Quantex GmbH
DERU EN

PassThruIoctl Управление вводом выводом

Описание

long PassThruIoctl(unsigned long ChannelID, unsigned long IoctlID, void *pInput, void *pOutput)

Параметры

Возвращаемые коды ошибок

Определение Описание
STATUS_NOERROR Функция выполнена успешно
ERR_DEVICE_NOT_CONNECTED Нет соединения с адаптером. Возможные причины: Адаптер выключен, нет сети, или не правильно задан IP адрес.
ERR_INVALID_CHANNEL_ID Задан не существующий идентификатор канала ChannelID
ERR_INVALID_IOCTL_ID Задан не существующий идентификатор канала IoctlID
ERR_NULL_PARAMETER Не задан указатель pMsg
ERR_NOT_SUPPORTED Адаптер не поддерживает запрошенные параметры.
ERR_INVALID_MSG Не правильная структура сообщения заданная в указателе pMsg.
ERR_INVALID_IOCTL_VALUE Не правильно задан значение Ioctl параметра.
ERR_PIN_INVALID Не правильно задан вывод коммутатора.
ERR_FAILED Определён стандартом J2534. В адаптере, для этой функции не используется.

SET_CONFIG Запись установок протоколов

Функция записывает список параметров. Входным параметром является указатель на структуру SCONFIG_LIST. В которой задан список.

Название параметра Описание
LOOPBACK Не реализован в текущей версии адаптера.
J1962_PINS Подключает выводы OBDII разъёма к линиям интерфейсов. Значение задаётся двухбайтным числом 0xKKLL где KK - К линия, CAN-H, J1850+ и LL - L линия, СAN-L, J1850-. Значения могут быть в диапазоне 0x00 – 0x10 исключая 4, 5, 6, 14 и 16 выводы. Если задан 0 то происходит отключение линии от разъёма.Shematic of Quantex J2534 interface Обратите внимание, что ввиду физических ограничений, не все комбинации для L линии возможны.

Пример

#include "j2534_lib.hpp"

unsigned long DeviceID;
SCONFIG Config[10];
SCONFIG_LIST ConfigList;
long Ret;
Config.Parameter = J1962_PINS; Config.Value = PP_3 | SS_11; Config.Parameter = p3min; Config.Value = 500; ConfigList.NumOfParams = 2 ConfigList.ConfigPtr = Config;
Ret = PassThruIoctl(SET_CONFIG, &ConfigList, NULL);
if (Ret != STATUS_NOERROR)
{	// Обработка ошибки
}

GET_CONFIG Чтение установок протоколов

Функция возвращает список запрашиваемых параметров установленных по умолчанию или командой SET_CONFIG.

Пример

#include "j2534_lib.hpp"

unsigned long ChannelID;
SCONFIG_LIST ConfigList;
long Ret;

Ret = PassThruIoctl(ChannelID, GET_CONFIG, &ConfigList, NULL);
if (Ret != STATUS_NOERROR)
{	// Обработка ошибки
}

READ_VBATT Чтение напряжения питания

Напряжение рассчитывается по формуле Y = X/10 V. Команда не требует обязательного открытия канала командой PassThruConnect, и может быть выполнена сразу же после команды PassThruOpen.

Пример

#include "j2534_lib.hpp"				unsigned long DeviceID;
unsigned long Vbat;
long Ret;

Ret = PassThruIoctl(SET_CONFIG, NULL, &Vbat);
if (Ret != STATUS_NOERROR)
{	// Обработка ошибки
}

FIVE_BAUD_INIT Запуск 5 бод инициализации

Запускает 5 бод инициализацию для протоколов с К линией. Принимает Keyword от блока. Режим работы зависит от параметра FIVE_BAUD_MOD который задаётся командой SET_CONFIG. Команда автоматически определяет скорость обмена и записывает его в параметр datarate.

Пример

#include "j2534_lib.hpp"

unsigned long DeviceID;
SBYTE_ARRAY InputMsg;
SBYTE_ARRAY OutputMsg;
long Ret;

unsigned char InitByte[1]; // Адрес инициализации ЭБУ
unsigned char KeyWord[2];  // Keyword
EcuAddr[0] = 0x33; // Записываем адрес


InputMsg.NumOfBytes = 1; // Длина адреса инициализации
InputMsg.BytePtr = &InitByte[0];
OutputMsg.NumOfBytes = 2; // Длина буфера для приёма keyword. Если установлено не 2, то вернётся ошибка.
OutputMsg.BytePtr = &KeyWord[0];

Ret = PassThruIoctl(FIVE_BAUD_INIT, &InputMsg, &OutputMsg);
if (Ret != STATUS_NOERROR)
{	// Обработка ошибки
}

FAST_INIT Запуск Fast инициализации

Запускает Fast инициализацию для протоколов с К линией. Принимает Keyword от блока.

При широковещательном запросе необходимо учесть, что если в запросе был указан функциональный адрес, то на этот запрос может ответить несколько ЭБУ. Здесь будет ответ только первого ЭБУ. Остальные ответы попадут в приёмную очередь.

Пример

#include "j2534_lib.hpp"

unsigned long DeviceID;
PASSTHRU_MSG InputMsg;
PASSTHRU_MSG OutputMsg;
long Ret;

InputMsg.ProtocolID = ISO14230;
InputMsg.TxFlags = 0;
InputMsg.Data[0] = 0x81; InputMsg.Data[1] = 0x10; InputMsg.Data[2] = 0xF1; InputMsg.Data[3] = 0x81; InputMsg.DataSize = 4;

Ret = PassThruIoctl(ChannelID, FAST_INIT, &InputMsg, &OutputMsg);
if (Ret != STATUS_NOERROR)
{	// Обработка ошибки
}

CLEAR_TX_BUFFER Очистка передающей очереди

Удаляет из передающей очереди все сообщения

Пример

#include "j2534_lib.hpp"

unsigned long DeviceID;
long Ret;

Ret = PassThruIoctl(CLEAR_TX_BUFFER, NULL, NULL);
if (Ret != STATUS_NOERROR)
{	// Обработка ошибки
}

CLEAR_RX_BUFFER Очистка приёмной очереди

Удаляет из приёмной очереди все сообщения

Пример

#include "j2534_lib.hpp"

unsigned long DeviceID;
long Ret;

Ret = PassThruIoctl(CLEAR_RX_BUFFER, NULL, NULL);
if (Ret != STATUS_NOERROR)
{	// Обработка ошибки
}

CLEAR_PERIODIC_MSGS Очистка периодических сообщений

Удаляет все ранее установленные периодические сообщения

Пример

#include "j2534_lib.hpp"

unsigned long DeviceID;
long Ret;

Ret = PassThruIoctl(CLEAR_PERIODIC_MSGS, NULL, NULL);
if (Ret != STATUS_NOERROR)
{	// Обработка ошибки
}

CLEAR_MSG_FILTERS Очистка фильтров

Удаляет все ранее установленные фильтры

Пример

#include "j2534_lib.hpp"

unsigned long DeviceID;
long Ret;

Ret = PassThruIoctl(CLEAR_MSG_FILTERS, NULL, NULL);
if (Ret != STATUS_NOERROR)
{	// Обработка ошибки
}