读取 CAN 消息时如何创建停止过滤器(而不是通过过滤器)? [C++, Linux]

How to create a stop-filter (instead of a pass-filter) when reading CAN messages? [C++, Linux]

我正在使用 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 报文通过,除了 ID 为 0x18DAF101 的报文。

有人知道怎么做吗?

您必须在过滤器中设置位 CAN_INV_FILTER 以反转过滤器逻辑。

根据您提供的 link 背后的文档:

The filter can be inverted in this semantic, when the CAN_INV_FILTER bit is set in can_id element of the can_filter structure.