Как создать стоп-фильтр (вместо проходного фильтра) при чтении CAN-сообщений?[C ++, Linux] - PullRequest
0 голосов
/ 11 апреля 2019

Я использую SocketCAN для доступа к шине CAN.Я успешно создал фильтры-проходы, подобные этому:

struct can_filter m_Filter;
// ... setting up m_Filters
setsockopt(m_CanSockId, SOL_CAN_RAW, CAN_RAW_FILTER, m_Filter,
           sizeof(struct can_filter));

Это дает команду пропускать CAN-сообщения при соблюдении настроек фильтра.

Теперь я хочу создать стоп-фильтр, но я делаюне знаю как это сделать.Например: я хочу, чтобы все сообщения CAN проходили, кроме тех, которые имеют идентификатор 0x18DAF101.

Кто-нибудь знает, как это сделать?

1 Ответ

0 голосов
/ 12 апреля 2019

Вам необходимо установить бит CAN_INV_FILTER в фильтре, чтобы инвертировать логику фильтра.

Из документации, предоставленной по указанной вами ссылке:

Фильтр может бытьинвертируется в этой семантике, когда бит CAN_INV_FILTER установлен в элементе can_id структуры can_filter.

...