Quantex GmbH
DERU EN

PassThru StartMsgFilter Установка фильтра сообщений

Описание

Перед началом приёма или передачи сообщений, необходимо установить фильтры сообщений. Если ни один фильтр не установлен, то все сообщения блокируются. Для протокола ISO 15765 доступен только один тип фильтра FLOW_CONTROL_FILTER. Его нельзя устанавливать для других протоколов. Для каждого СhannelID можно создать до 64 фильтров FLOW_CONTROL_FILTER и до 10 PASS_FILTER или BLOCK_FILTER. Для каждого выбранного типа фильтра необходимо указать параметры фильтра. Для FLOW_CONTROL_FILTER указывается три параметра pMaskMsg, pPatternMsg, pFlowControlMsg. Для PASS_FILTER или BLOCK_FILTER указывается два параметра pMaskMsg и pPatternMsg. Длина параметров может быть от 1 до 12 байт.

long PassThruStartMsgFilter(unsigned long ChannelID, unsigned long FilterType, PASSTHRU_MSG *pMaskMsg, PASSTHRU_MSG *pPatternMsg, PASSTHRU_MSG *pFlowControlMsg, unsigned long *FilterID)

Параметры

В протоколе ISO 15765 существует стандартное и расширенное сообщение. В стандартном сообщении для заголовка используется 4 байта для расширенного 5 байт. Расширенный заголовок используется например в BCM Toyota или в ЭБУ BMW.

Возвращаемые коды ошибок

Определение Описание
STATUS_NOERROR Функция выполнена успешно
ERR_DEVICE_NOT_CONNECTED Нет соединения с адаптером. Возможные причины: Адаптер выключен, нет сети, или не правильно задан IP адрес.
ERR_INVALID_DEVICE_ID Задан не существующий идентификатор адаптера DeviceID
ERR_INVALID_MSG Не правильная структура сообщения заданная в указателях pMaskMsg, pPatternMsg или pFlowControlMsg
ERR_INVALID_CHANNEL_ID Задан не существующий идентификатор канала ChannelID
ERR_NULL_PARAMETER Не задан указатель на pMaskMsg или pPatternMsg
ERR_NOT_UNIQUE CAN ID в pPatternMsg или pFlowControlMsg соответствует какому либо ID в уже существующем FLOW_CONTROL_FILTER
ERR_MSG_PROTOCOL_ID Протокол заданный в параметрах фильтра не совпадает с протоколом заданным в ChannelID
ERR_EXCEEDED_LIMIT Превышено количество установленных фильтров.
ERR_FAILED Определён стандартом J2534. В адаптере, для этой функции не используется.

Пример

Протокол ISO15765

#include "j2534_lib.hpp"

PASSTHRU_MSG MaskMsg, PatternMsg, FlowControlMsg;

unsigned long ChannelID;
unsigned long FilterID;

static const uint8_t cMaskMsg[] = { 0xFF, 0xFF, 0xFF, 0xFF};
static const uint8_t cPatternMsg[] = { 0x00, 0x00, 0x07, 0xE8};
static const uint8_t cFlowControlMsg[] = { 0x00, 0x00, 0x07, 0xE0};


PassThruOpen("192.168.1.3", &DeviceID);
PassThruConnect(DeviceID, ISO15765, 0, 500000, &ChannelID);


MaskMsg.ProtocolID = ISO15765;
MaskMsg.TxFlags = FL_ISO15765_FRAME_PAD;
memcpy(MaskMsg.Data, cMaskMsg, sizeof(cMaskMsg));
MaskMsg.DataSize = sizeof(cMaskMsg);

PatternMsg.ProtocolID = ISO15765;
PatternMsg.TxFlags = FL_ISO15765_FRAME_PAD;
memcpy(PatternMsg.Data, cPatternMsg, sizeof(cPatternMsg));
PatternMsg.DataSize = sizeof(cPatternMsg);

FlowControlMsg.ProtocolID = ISO15765;
FlowControlMsg.TxFlags = FL_ISO15765_FRAME_PAD;
memcpy(FlowControlMsg.Data, cFlowControlMsg, sizeof(cFlowControlMsg));
FlowControlMsg.DataSize = sizeof(cFlowControlMsg);


Ret = PassThruStartMsgFilter(ChannelID, FLOW_CONTROL_FILTER, &MaskMsg, &PatternMsg, &FlowControlMsg, &FilterID);
if (Ret != STATUS_NOERROR)
{	// Обработка ошибки
}

Протокол ISO14230

#include "j2534_lib.hpp"

PASSTHRU_MSG MaskMsg, PatternMsg, FlowControlMsg;

unsigned long ChannelID;
unsigned long FilterID;

static const uint8_t cMaskMsg[] = {0x80};
static const uint8_t cPatternMsg[] = {0x80};

PassThruOpen("192.168.1.3", &DeviceID);
PassThruConnect(DeviceID, ISO14230, 0, 10400, &ChannelID);


MaskMsg.ProtocolID = ISO14230;
MaskMsg.TxFlags = 0;
memcpy(MaskMsg.Data, cMaskMsg, sizeof(cMaskMsg));
MaskMsg.DataSize = sizeof(cMaskMsg);

PatternMsg.ProtocolID = ISO14230;
PatternMsg.TxFlags = 0;
memcpy(PatternMsg.Data, cPatternMsg, sizeof(cPatternMsg));
PatternMsg.DataSize = sizeof(cPatternMsg);

Ret = PassThruStartMsgFilter(ChannelID, PASS_FILTER, &MaskMsg, &PatternMsg, NULL, &FilterID);
if (Ret != STATUS_NOERROR)
{	// Обработка ошибки
}