23 lines
738 B
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);
|
|
}
|