14typedef enum : uint8_t {
23 switch (bswap_width) {
25 return __builtin_bswap16((uint16_t)raw);
27 return __builtin_bswap32((uint32_t)raw);
29 return __builtin_bswap64(raw);
38 memcpy(&payload, data, len);
44 memcpy(dest, &payload, len);
57 payload |= (raw & mask) << bit_shift;
68 uint64_t raw = (payload >> bit_shift) & mask;
74 if (bit_length == 0) {
77 if (bit_length >= 64) {
81 uint8_t shift = 64U - bit_length;
82 return (int64_t)(raw << shift) >> shift;
88 memcpy(&raw, &value,
sizeof(raw));
94 uint32_t bits = (uint32_t)raw;
96 memcpy(&value, &bits,
sizeof(value));
bswap_width_t
Definition can_codec.h:14
@ BSWAP_16
Definition can_codec.h:16
@ BSWAP_NONE
Definition can_codec.h:15
@ BSWAP_32
Definition can_codec.h:17
@ BSWAP_64
Definition can_codec.h:18
static uint64_t CAN_apply_bswap(uint64_t raw, bswap_width_t bswap_width)
Definition can_codec.h:22
static void CAN_store_payload_u64(uint8_t *dest, uint64_t payload, uint8_t len)
Definition can_codec.h:43
static uint64_t CAN_float32_to_raw(float value)
Definition can_codec.h:86
static int64_t CAN_sign_extend_raw(uint64_t raw, uint8_t bit_length)
Definition can_codec.h:73
static float CAN_raw_to_float32(uint64_t raw)
Definition can_codec.h:93
static uint64_t CAN_load_payload_u64(const uint8_t *data, uint8_t len)
Definition can_codec.h:36
static uint64_t CAN_pack_raw_signal(uint64_t payload, uint64_t raw, uint64_t mask, uint8_t bit_shift, bswap_width_t bswap_width)
Definition can_codec.h:48
static uint64_t CAN_unpack_raw_signal(uint64_t payload, uint64_t mask, uint8_t bit_shift, bswap_width_t bswap_width)
Definition can_codec.h:62