#include "pcan_id.h" uint32_t pcan_id_pack(const pcan_id_t *id) { return ((uint32_t)(id->priority & 0x1U) << 28) | ((uint32_t)(id->route & 0x1U) << 27) | ((uint32_t)(id->device_type & 0x7U) << 24) | ((uint32_t)(id->device_id & 0xFU) << 20) | ((uint32_t)(id->msg_type & 0xFU) << 16) | ((uint32_t)id->msg_body); } void pcan_id_unpack(uint32_t raw, pcan_id_t *id) { raw &= PCAN_ID_MASK; id->msg_body = (uint16_t)(raw & 0xFFFFU); id->msg_type = (uint8_t)((raw >> 16) & 0xFU); id->device_id = (uint8_t)((raw >> 20) & 0xFU); id->device_type = (uint8_t)((raw >> 24) & 0x7U); id->route = (uint8_t)((raw >> 27) & 0x1U); id->priority = (uint8_t)((raw >> 28) & 0x1U); }