Последнее изменение:
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 | Внутренняя ошибка в dll или в микропрограммы адаптере. Такие как ошибка выделения памяти или сбой стека. Для получения поробностей нужно использовать функцию PassThruGetLastError() |
Функция записывает список параметров. Входным параметром является указатель на структуру SCONFIG_LIST, в которой задан список. Этот же список будет заполнен знаяениями. pOutput не учавствует в операции.
| Название параметра | Описание |
|---|---|
| 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; // ID канала
SCONFIG Config[1];
SCONFIG_LIST ConfigList;
long Ret;
// Запрашиваем значение параметра DATA_RATE
Config[0].Parameter = DATA_RATE;
ConfigList.NumOfParams = 1;
ConfigList.ConfigPtr = &Config[0];
// pInput - какие параметры запрашиваем, pOutput - куда записать результат
Ret = PassThruIoctl(ChannelID, GET_CONFIG, &ConfigList, &ConfigList);
if (Ret == STATUS_NOERROR)
{
// Успешно, значение в Config[0].Value
}
// channelID получен ранее
// Запрашиваем значения нескольких параметров
val configList = listOf(
PtConfig(parameter = DATA_RATE, value = 0u),
PtConfig(parameter = LOOPBACK, value = 0u)
)
val configByteArray = configListToByteArray(configList)
val result = j2534.ptIoctl(channelID, GET_CONFIG, configList.size, configByteArray)
if (result.status == STATUS_NOERROR) {
val resultConfig = byteArrayToConfigList(result.ouput, configList.size)
resultConfig.forEach { config ->
Log.i("J2534", "Параметр ${config.parameter} = ${config.value}")
}
} else {
// Обработка ошибки
Log.e("J2534", "Ошибка GET_CONFIG: ${result.status}")
}
Напряжение рассчитывается по формуле 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)
{ // Обработка ошибки
}