11 ASSERT(type < Type::TYPE_NUM);
13 auto node =
new (std::align_val_t(LIBXR_CACHE_LINE_SIZE))
15 subscriber_list_[
static_cast<uint8_t
>(type)].Add(*node);
18void CAN::OnMessage(
const ClassicPack &pack,
bool in_isr)
20 ASSERT(pack.type < Type::TYPE_NUM);
21 subscriber_list_[
static_cast<uint8_t
>(pack.type)].Foreach<Filter>(
26 case FilterMode::ID_MASK:
27 if ((pack.id & node.start_id_mask) == node.end_id_match)
29 node.cb.Run(in_isr, pack);
32 case FilterMode::ID_RANGE:
33 if (pack.id >= node.start_id_mask && pack.id <= node.end_id_match)
35 node.cb.Run(in_isr, pack);
47 ASSERT(type < Type::TYPE_NUM);
48 auto node =
new (std::align_val_t(LIBXR_CACHE_LINE_SIZE))
50 subscriber_list_fd_[
static_cast<uint8_t
>(type)].Add(*node);
53void FDCAN::OnMessage(
const FDPack &pack,
bool in_isr)
55 ASSERT(pack.type < Type::TYPE_NUM);
56 subscriber_list_fd_[
static_cast<uint8_t
>(pack.type)].Foreach<Filter>(
61 case FilterMode::ID_MASK:
62 if ((pack.id & node.start_id_mask) == node.end_id_mask)
64 node.cb.Run(in_isr, pack);
67 case FilterMode::ID_RANGE:
68 if (pack.id >= node.start_id_mask && pack.id <= node.end_id_mask)
70 node.cb.Run(in_isr, pack);
void Register(Callback cb, Type type, FilterMode mode=FilterMode::ID_RANGE, uint32_t start_id_mask=0, uint32_t end_id_match=UINT32_MAX)
注册回调函数 Registers a callback function
Type
CAN 消息类型 (Enumeration of CAN message types).
提供一个通用的回调包装,支持动态参数传递。 Provides a generic callback wrapper, supporting dynamic argument passing.
void Register(CallbackFD cb, Type type, FilterMode mode=FilterMode::ID_RANGE, uint32_t start_id_mask=0, uint32_t end_id_mask=UINT32_MAX)
注册回调函数 Registers a callback function
数据节点模板,继承自 BaseNode,用于存储具体数据类型。 Template data node that inherits from BaseNode to store specific data...