Как создать стоп-фильтр (вместо фильтра пропускания) при чтении сообщений CAN? [C , Linux]

#c #c #linux #can-bus #socketcan

#c #c #linux #can-bus #socketcan

Вопрос:

Я использую 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. Покажите нам, что вы пробовали?

2. Я просмотрел эту ссылку на документацию, не найдя ничего, что можно было бы попробовать, вот почему я спросил здесь.

Ответ №1:

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

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

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

Комментарии:

1. Спасибо! Я проверю как можно скорее, но я уже верю, что это то, что мне нужно!