Master_Interface/Core/Inc/CAN_Communication.h

86 lines
2.2 KiB
C

/*
* 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_ */