Quantex GmbH
DERU EN

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 Определён стандартом J2534. В адаптере, для этой функции не используется.

Пример

#include "j2534_lib.hpp"

unsigned long ChannelID;
long Ret;

PASSTHRU_MSG Msg[10];
unsigned long NumMsgs;

NumMsgs = 2;

Ret = PassThruReadMsgs(ChannelID, Msg, &NumMsgs, 100);
if (Ret != STATUS_NOERROR)
{	// Обработка ошибки
}