48 static uint8_t
constexpr MAX_DATA_LENGTH = 8;
50 static uint32_t
constexpr CAN_EFF_FLAG = 0x80000000U;
51 static uint32_t
constexpr CAN_SFF_MASK = 0x000007FFU;
52 static uint32_t
constexpr CAN_EFF_MASK = 0x1FFFFFFFU;
55 CanMsg(uint32_t
const can_id, uint8_t
const can_data_len, uint8_t
const * can_data_ptr)
57 , data_length{min(can_data_len, MAX_DATA_LENGTH)}
60 if (data_length && can_data_ptr)
61 memcpy(data, can_data_ptr, data_length);
69 data_length = other.data_length;
71 memcpy(data, other.data, data_length);
81 data_length = other.data_length;
83 memcpy(data, other.data, data_length);
88 virtual size_t printTo(
Print & p)
const override
95 len = snprintf(buf,
sizeof(buf),
"[%03" PRIX32
"] (%d) : ", getStandardId(), data_length);
97 len = snprintf(buf,
sizeof(buf),
"[%08" PRIX32
"] (%d) : ", getExtendedId(), data_length);
98 size_t n = p.write(buf, len);
101 for (
size_t d = 0; d < data_length; d++)
103 len = snprintf(buf,
sizeof(buf),
"%02X", data[d]);
104 n += p.write(buf, len);
112 uint32_t getStandardId()
const {
113 return (
id & CAN_SFF_MASK);
115 uint32_t getExtendedId()
const {
116 return (
id & CAN_EFF_MASK);
118 bool isStandardId()
const {
119 return ((
id & CAN_EFF_FLAG) == 0);
121 bool isExtendedId()
const {
122 return ((
id & CAN_EFF_FLAG) == CAN_EFF_FLAG);
135 uint8_t data[MAX_DATA_LENGTH];