Files
templates/c/set-protocol/src/pcan_id.c

23 lines
738 B
C

#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);
}