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. В адаптере, для этой функции не используется. |
Функция записывает список параметров. Входным параметром является указатель на структуру SCONFIG_LIST. В которой задан список.
Название параметра | Описание |
---|---|
LOOPBACK | Не реализован в текущей версии адаптера. |
J1962_PINS | Подключает выводы OBDII разъёма к линиям интерфейсов. Значение задаётся двухбайтным числом 0xKKLL где KK - К линия, CAN-H, J1850+ и LL - L линия, СAN-L, J1850-. Значения могут быть в диапазоне 0x00 – 0x10 исключая 4, 5, 6, 14 и 16
выводы. Если задан 0 то происходит отключение линии от разъёма. |
#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)
{ // Обработка ошибки
}
Функция возвращает список запрашиваемых параметров установленных по умолчанию или командой 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)
{ // Обработка ошибки
}
Напряжение рассчитывается по формуле 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)
{ // Обработка ошибки
}
Запускает 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 инициализацию для протоколов с К линией. Принимает 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)
{ // Обработка ошибки
}
Удаляет из передающей очереди все сообщения
#include "j2534_lib.hpp"
unsigned long DeviceID;
long Ret;
Ret = PassThruIoctl(CLEAR_TX_BUFFER, NULL, NULL);
if (Ret != STATUS_NOERROR)
{ // Обработка ошибки
}
Удаляет из приёмной очереди все сообщения
#include "j2534_lib.hpp"
unsigned long DeviceID;
long Ret;
Ret = PassThruIoctl(CLEAR_RX_BUFFER, NULL, NULL);
if (Ret != STATUS_NOERROR)
{ // Обработка ошибки
}
Удаляет все ранее установленные периодические сообщения
#include "j2534_lib.hpp"
unsigned long DeviceID;
long Ret;
Ret = PassThruIoctl(CLEAR_PERIODIC_MSGS, NULL, NULL);
if (Ret != STATUS_NOERROR)
{ // Обработка ошибки
}
Удаляет все ранее установленные фильтры
#include "j2534_lib.hpp"
unsigned long DeviceID;
long Ret;
Ret = PassThruIoctl(CLEAR_MSG_FILTERS, NULL, NULL);
if (Ret != STATUS_NOERROR)
{ // Обработка ошибки
}