#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. Спасибо! Я проверю как можно скорее, но я уже верю, что это то, что мне нужно!