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

PassThruReadMsg Чтение принятого пакета

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

Описание

Функция вычитывает из очереди канала принятые сообщения. Адаптер может принять максимум 100 сообщений на одну очередь для одного канала и имеет 64 Кбайт свободной памяти для всех очередей. При заполнении очереди или всей свободной памяти, приём сообщений приостанавливается. Приём сообщений по протоколам независим от передачи.
Для протоколов ISO 9141, ISO 14230, ISO 15765, на каждый принятый пакет генерируется сообщение-индикатор начала приёма пакета. Оно состоит только из заголовка приёмного флага START_OF_MESSAGE и отметки времени начала приёма сообщения. За этим сообщением следует нормальное сообщение с отметкой времени конца приема последнего бита сообщения. Этот неэкономный приём предназначен для того, чтобы определить время начала и конца прихода пакета.

long PassThruReadMsgs(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_NOT_SUPPORTED Адаптер не поддерживает запрошенные параметры.
ERR_BUFFER_EMPTY Приёмная очередь пустая.
ERR_NO_FLOW_CONTROL Для протокола ISO15765 не установлен фильтр для Flow Control.
ERR_BUFFER_OVERFLOW Показывает что приёмная очередь была переполнена и сообщения были потеряны. Реальное количество принятых сообщений будет находится в NumMsgs.
ERR_FAILED Внутренняя ошибка в dll или в микропрограммы адаптере. Такие как ошибка выделения памяти или сбой стека. Для получения поробностей нужно использовать функцию PassThruGetLastError()

Примеры

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

#include "j2534_lib.hpp"

unsigned long ChannelID; // ID, полученный от PassThruConnect
long Ret;
PASSTHRU_MSG Msgs[10]; // Буфер для сообщений
unsigned long NumMsgs = 10; // Запрашиваем до 10 сообщений
unsigned long Timeout = 1000; // Таймаут в мс

Ret = PassThruReadMsgs(ChannelID, &Msgs[0], &NumMsgs, Timeout);
if (Ret == STATUS_NOERROR)
{
    // Обработка полученных сообщений (NumMsgs штук)
    for (unsigned long i = 0; i < NumMsgs; i++) {
        // ...
    }
}

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

// channelID получен ранее от ptConnect
val numMsgsToRead = 10
val timeout = 1000 // ms

val resReadMsgs = j2534.ptReadMsgs(channelID, numMsgsToRead, timeout)
if (resReadMsgs.status == STATUS_NOERROR) {
    // Успешно прочитано resReadMsgs.msgs.size() сообщений
    for (msg in resReadMsgs.msgs) {
        // Обрабатываем каждое сообщение (msg)
        Log.i("J2534", "Получено сообщение: ${msg.data.toHexString()}")
    }
} else {
    // Обработка ошибки
    Log.e("J2534", "Ошибка чтения сообщений: ${resReadMsgs.status}")
}