跳到主要内容

CAN / FDCAN(控制器局域网)

LibXR::CANLibXR::FDCAN 提供跨平台的控制器局域网通信接口,支持经典 CAN 消息与 FD CAN 消息收发,具备回调注册与过滤功能,适用于车辆通信、传感器网络等场景。

CAN 接口说明

消息类型

enum class Type : uint8_t {
STANDARD, // 标准帧
EXTENDED, // 扩展帧
REMOTE_STANDARD, // 标准远程帧
REMOTE_EXTENDED, // 扩展远程帧
};

消息结构

struct ClassicPack {
uint32_t id; // 消息 ID
Type type; // 消息类型
uint8_t data[8]; // 数据,最多 8 字节
};

注册回调

using Callback = LibXR::Callback<const ClassicPack &>;
void Register(Callback cb, Type type,
FilterMode mode = FilterMode::ID_RANGE,
uint32_t start_id_mask = 0,
uint32_t end_id_match = UINT32_MAX);
  • 支持掩码或区间两种过滤模式
  • 可按消息类型分别注册回调
  • 回调类型为 Callback<const ClassicPack&>

添加消息

virtual ErrorCode AddMessage(const ClassicPack &pack) = 0;
  • 派生类需实现该接口完成消息注入

FDCAN 接口扩展

FD 消息结构

struct FDPack {
uint32_t id; // 消息 ID
Type type; // 消息类型
uint8_t len; // 数据长度
uint8_t data[64]; // 数据,最多 64 字节
};

注册回调

using CallbackFD = LibXR::Callback<const FDPack &>;
void Register(CallbackFD cb, Type type,
FilterMode mode = FilterMode::ID_RANGE,
uint32_t start_id_mask = 0,
uint32_t end_id_mask = UINT32_MAX);
  • 支持按 ID 区间或掩码过滤
  • 每种类型可独立注册多个回调

添加 FD 消息

virtual ErrorCode AddMessage(const FDPack &pack) = 0;

特性总结

  • 支持标准 CAN 与 FDCAN 协议;
  • 消息过滤灵活,支持掩码与范围;
  • 可在 ISR 安全调用回调;
  • 支持多订阅者、无锁列表;
  • 抽象接口适用于多平台驱动扩展。