SocketCAN 中的非 FD(“传统”)CAN 帧具有以下格式:
struct can_frame {
canid_t can_id; /* 32 bit CAN_ID + EFF/RTR/ERR flags */
__u8 can_dlc; /* frame payload length in byte (0 .. 8) */
__u8 __pad; /* padding */
__u8 __res0; /* reserved / padding */
__u8 __res1; /* reserved / padding */
__u8 data[8] __attribute__((aligned(8)));
};
帧ID、长度和数据都有明确的位置,加上一些我们不用担心的填充。但是,对于 CAN-FD 帧,有一个额外的字段:
struct canfd_frame {
canid_t can_id; /* 32 bit CAN_ID + EFF/RTR/ERR flags */
__u8 len; /* frame payload length in byte (0 .. 64) */
__u8 flags; /* additional flags for CAN FD */
__u8 __res0; /* reserved / padding */
__u8 __res1; /* reserved / padding */
__u8 data[64] __attribute__((aligned(8)));
};
该flags
字段看起来很有用,但我没有找到关于它实际包含什么的文档。它是内部的(即由内核设置)?可能的标志是什么,它们是什么意思?
谢谢!