读取 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.
我正在使用 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.