Quantex GmbH
DE RU EN EL
Ваш регион: Европа

PassThruWriteMsgs Передача сообщений

Последнее изменение:

Описание

Функция предаёт сообщения по диагностическому протоколу. Передающая очередь адаптера рассчитана на 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()

Примеры

Пример на C/C++

#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)
{
    // Обработка ошибки
}

Пример на Kotlin (Android)

// 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}")
}