/* * CAN_Communication.h * * Created on: Apr 26, 2022 * Author: max */ #ifndef INC_CAN_COMMUNICATION_H_ #define INC_CAN_COMMUNICATION_H_ #include "stm32g4xx_hal.h" #include "stm32g4xx_hal_fdcan.h" #define CANFRAMEBUFFERSIZE 256 // Shunt Message IDs #define SHUNT_CURRENT 0x521 #define SHUNT_VOLTAGE_1 0x522 #define SHUNT_VOLTAGE_2 0x523 #define SHUNT_VOLTAGE_3 0x524 #define SHUNT_BUSBAR_TEMP 0x525 #define SHUNT_POWER 0x526 #define SHUNT_AMPERE_SECONDS 0x527 #define SHUNT_ENERGY 0x528 // Autobox->Master IDS #define AUTOBOX_INFO 0x0B // Master->Autobox IDs #define AMS_STATUS_ID 0x0A #define AMS_PANIC_ID 0x42 #define AMS_LOGGING_ID 0x500 #define AMS_LOGGING_NUM_FRAMES 6 #define AMS_LOGGING_FRAMES_PER_LOOP 1 // Charger->Master IDs #define CHARGER_START_CHARGING 0x446 #define BATTERY_VOLTAGE_TYPE 1 #define BATTERY_TEMP_TYPE 2 #define LOG_BAT_LOW_VOLTAGE 32768 #define LOG_TEMP_LOW_VOLTAGE // External Variables to Communicate with other parts of the Program extern int32_t shuntcurrent; extern int32_t shuntvoltage1; extern int32_t shuntvoltage2; extern int32_t shuntvoltage3; extern int32_t shuntbusbartemp; extern int32_t shuntpower; extern int32_t shuntampereseconds; extern int32_t shuntenergy; extern uint32_t shuntlastmessage; extern uint8_t currentlap; extern uint8_t TSTargetState; typedef struct { int16_t FrameID; uint8_t data[8]; uint8_t length; uint32_t timestamp; uint8_t error; } canFrame; extern canFrame framebuffer[CANFRAMEBUFFERSIZE]; void HAL_FDCAN_RxFifo0Callback(FDCAN_HandleTypeDef* handle, uint32_t interrupt_flags); void HAL_FDCAN_ErrorCallback(FDCAN_HandleTypeDef* hcan); void CAN_Init(FDCAN_HandleTypeDef* hcan); uint8_t CAN_Receive(FDCAN_HandleTypeDef* hcan); uint8_t CAN_Transmit(FDCAN_HandleTypeDef* hcan, uint16_t frameid, uint8_t* buffer, uint8_t datalen); void CAN_SendAbxStatus(FDCAN_HandleTypeDef* hcan); typedef struct ErrorFlagHandlerStruct ErrorFlagHandler; void CAN_SendAMSPanic(FDCAN_HandleTypeDef* hcan, ErrorFlagHandler* errorflags); void CAN_SendLoggingFrame(FDCAN_HandleTypeDef* hcan); uint8_t CAN_convert_logval(uint16_t value, uint8_t type); #endif /* INC_CAN_COMMUNICATION_H_ */