#pragma once const uint8_t PANDA_CAN_CNT = 3U; const uint8_t PANDA_BUS_CNT = 4U; // bump this when changing the CAN packet #define CAN_PACKET_VERSION 4 #define CANPACKET_HEAD_SIZE 6U #if !defined(STM32F4) && !defined(STM32F2) #define CANFD #define CANPACKET_DATA_SIZE_MAX 64U #else #define CANPACKET_DATA_SIZE_MAX 8U #endif typedef struct { unsigned char reserved : 1; unsigned char bus : 3; unsigned char data_len_code : 4; // lookup length with dlc_to_len unsigned char rejected : 1; unsigned char returned : 1; unsigned char extended : 1; unsigned int addr : 29; unsigned char checksum; unsigned char data[CANPACKET_DATA_SIZE_MAX]; } __attribute__((packed, aligned(4))) CANPacket_t; const unsigned char dlc_to_len[] = {0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 12U, 16U, 20U, 24U, 32U, 48U, 64U}; #define GET_BUS(msg) ((msg)->bus) #define GET_LEN(msg) (dlc_to_len[(msg)->data_len_code]) #define GET_ADDR(msg) ((msg)->addr)