mirror of
https://github.com/infiniteCable2/panda.git
synced 2026-02-18 17:23:52 +08:00
26 lines
1.1 KiB
C
26 lines
1.1 KiB
C
#include "dlc_to_len.h"
|
|
|
|
#define CAN_PACKET_VERSION 2
|
|
typedef struct {
|
|
unsigned char reserved : 1;
|
|
unsigned char bus : 3;
|
|
unsigned char data_len_code : 4;
|
|
unsigned char rejected : 1;
|
|
unsigned char returned : 1;
|
|
unsigned char extended : 1;
|
|
unsigned int addr : 29;
|
|
unsigned char data[CANPACKET_DATA_SIZE_MAX];
|
|
} __attribute__((packed, aligned(4))) CANPacket_t;
|
|
|
|
#define GET_BUS(msg) ((msg)->bus)
|
|
#define GET_LEN(msg) (dlc_to_len[(msg)->data_len_code])
|
|
#define GET_ADDR(msg) ((msg)->addr)
|
|
|
|
// Flasher and pedal use raw mailbox access
|
|
#define GET_MAILBOX_BYTE(msg, b) (((int)(b) > 3) ? (((msg)->RDHR >> (8U * ((unsigned int)(b) % 4U))) & 0xFFU) : (((msg)->RDLR >> (8U * (unsigned int)(b))) & 0xFFU))
|
|
#define GET_MAILBOX_BYTES_04(msg) ((msg)->RDLR)
|
|
#define GET_MAILBOX_BYTES_48(msg) ((msg)->RDHR)
|
|
|
|
#define WORD_TO_BYTE_ARRAY(dst8, src32) 0[dst8] = ((src32) & 0xFFU); 1[dst8] = (((src32) >> 8U) & 0xFFU); 2[dst8] = (((src32) >> 16U) & 0xFFU); 3[dst8] = (((src32) >> 24U) & 0xFFU)
|
|
#define BYTE_ARRAY_TO_WORD(dst32, src8) ((dst32) = 0[src8] | (1[src8] << 8U) | (2[src8] << 16U) | (3[src8] << 24U))
|