Последнее изменение:
Функция предаёт сообщения по диагностическому протоколу. Передающая очередь адаптера рассчитана на 50 сообщений на одну очередь для одного канала и имеет 64 Кбайт свободной памяти для всех очередей. При заполнении очереди или всей свободной памяти, приём сообщений в передающую очередь приостанавливается.
long PassThruWriteMsgs(unsigned long ChannelID, PASSTHRU_MSG *pMsg, unsigned long *pNumMsgs, unsigned long Timeout)
| Определение | Описание |
|---|---|
| STATUS_NOERROR | Функция выполнена успешно |
| ERR_DEVICE_NOT_CONNECTED | Нет соединения с адаптером. Возможные причины: Адаптер выключен, нет сети, или не правильно задан IP адрес. |
| ERR_INVALID_DEVICE_ID | Задан не существующий идентификатор адаптера DeviceID |
| ERR_INVALID_CHANNEL_ID | Задан не существующий идентификатор канала ChannelID |
| ERR_NULL_PARAMETER | Не задан указатель на буфер приёмных пакетов pMsg |
| ERR_TIMEOUT | За заданное время не смогли передать все сообщения. |
| ERR_INVALID_MSG | Не правильная структура сообщения заданная в указателе pMsg |
| ERR_NULL_PARAMETER | Не задан указатель pMsg |
| ERR_MSG_PROTOCOL_ID | Протокол заданный в параметрах передаваемого сообщения не совпадает с протоколом заданным в ChannelID |
| ERR_NO_FLOW_CONTROL | Для протокола ISO15765 не установлен фильтр для Flow Control. |
| ERR_BUFFER_FULL | Очередь передачи переполнена. |
| ERR_FAILED | Внутренняя ошибка в dll или в микропрограммы адаптере. Такие как ошибка выделения памяти или сбой стека. Для получения поробностей нужно использовать функцию PassThruGetLastError() |
#include "j2534_lib.hpp"
unsigned long ChannelID; // ID, полученный от PassThruConnect
long Ret;
PASSTHRU_MSG Msg;
unsigned long NumMsgs = 1;
unsigned long Timeout = 200;
// Формирование сообщения (запрос SID 0x22, PID 0xF190)
Msg.ProtocolID = ISO15765;
Msg.TxFlags = ISO15765_FRAME_PAD;
Msg.Data[0] = 0x00;
Msg.Data[1] = 0x00;
Msg.Data[2] = 0x07;
Msg.Data[3] = 0xDF;
Msg.Data[4] = 0x22;
Msg.Data[5] = 0xF1;
Msg.Data[6] = 0x90;
Msg.DataSize = 7;
Ret = PassThruWriteMsgs(ChannelID, &Msg, &NumMsgs, Timeout);
if (Ret != STATUS_NOERROR)
{
// Обработка ошибки
}
// channelID получен ранее от ptConnect
val msg = PassThruMsg(
protocolID = ISO15765,
dataSize = 6,
txFlags = ISO15765_FRAME_PAD,
// Пример запроса VIN (SID 0x09, PID 0x02)
data = byteArrayOf(0x00, 0x00, 0x07, 0xDF.toByte(), 0x09, 0x02)
)
val messages = arrayOf(msg)
val timeout = 200 // ms
val resWrite = j2534.ptWriteMsgs(channelID, messages, timeout)
if (resWrite.status == STATUS_NOERROR) {
// Сообщения успешно отправлены
Log.i("J2534", "Отправлено сообщений: ${resWrite.NumMsgs}")
} else {
// Обработка ошибки
Log.e("J2534", "Ошибка отправки: ${resWrite.status}")
}