Последнее изменение:
Функция вычитывает из очереди канала принятые сообщения. Адаптер может принять максимум 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() |
#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++) {
// ...
}
}
// 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}")
}