Midnight Sun Firmware
Loading...
Searching...
No Matches
global_enums.h
1#pragma once
2
3/************************************************************************************************
4 * @file global_enums.h
5 *
6 * @brief Header file for global enums which are exported between projects with CAN
7 *
8 * @date 2025-01-12
9 * @author Midnight Sun Team #24 - MSXVI
10 ************************************************************************************************/
11
12/* Standard library Headers */
13#include <assert.h>
14#include <stdint.h>
15
16/* Inter-component Headers */
17
18/* Intra-component Headers */
19
26/************************************************************************************************
27 * Shared Global definitions
28 ************************************************************************************************/
29
33typedef enum {
42 VEHICLE_DRIVE_NUM_STATES,
44
48static const char *vehicle_drive_state_strings[VEHICLE_DRIVE_NUM_STATES] = {
51};
52
53#define VEHICLE_DRIVE_STATE_TO_STR(s) (((s) < VEHICLE_DRIVE_NUM_STATES) ? vehicle_drive_state_strings[(s)] : "UNKNOWN")
54
58typedef enum {
64
71#define GLOBAL_LIGHTS_BLINK_FREQUENCY_HZ 1.5f
72#define GLOBAL_LIGHTS_BLINK_PERIOD_MS ((uint32_t)(1000.0f / (2.0f * GLOBAL_LIGHTS_BLINK_FREQUENCY_HZ)))
73
74/* Both signal and BPS lights share the one in-spec rate above */
75#define GLOBAL_SIGNAL_LIGHTS_BLINK_PERIOD_MS GLOBAL_LIGHTS_BLINK_PERIOD_MS
76#define GLOBAL_BPS_LIGHTS_BLINK_PERIOD_MS GLOBAL_LIGHTS_BLINK_PERIOD_MS
77
82typedef enum {
83 ERROR_FLAG_HARDWARE_OVERCURRENT = 0,
84 ERROR_FLAG_SOFTWARE_OVERCURRENT = 1,
85 ERROR_FLAG_DC_BUS_OV = 2,
86 ERROR_FLAG_BAD_HALL_SEQUENCE = 3,
87 ERROR_FLAG_WATCHDOG_CAUSED_RESET = 4,
88 ERROR_FLAG_CFG_READ_ERROR = 6,
89 ERROR_FLAG_UVLO = 6,
90 ERROR_FLAG_DESATURATION_FAULT = 7,
91 ERROR_FLAG_MOTOR_OVER_SPEED = 8,
92 LIMIT_FLAG_OUTPUT_VOLTAGE_PWM = 9,
93 LIMIT_FLAG_MOTOR_CURRENT = 10,
94 LIMIT_FLAG_VELOCITY = 11,
95 LIMIT_FLAG_BUS_CURRENT = 12,
96 LIMIT_FLAG_BUS_VOLTAGE_UPPER = 13,
97 LIMIT_FLAG_BUS_VOLTAGE_LOWER = 14,
98 LIMIT_FLAG_TEMPERATURE = 15,
99 NUM_WS22_MOTOR_FLAGS,
101
103#define ERROR_FLAG_HARDWARE_OVERCURRENT_MASK (1U << ERROR_FLAG_HARDWARE_OVERCURRENT)
105#define ERROR_FLAG_SOFTWARE_OVERCURRENT_MASK (1U << ERROR_FLAG_SOFTWARE_OVERCURRENT)
107#define ERROR_FLAG_DC_BUS_OV_MASK (1U << ERROR_FLAG_DC_BUS_OV)
109#define ERROR_FLAG_BAD_HALL_SEQUENCE_MASK (1U << ERROR_FLAG_BAD_HALL_SEQUENCE)
111#define ERROR_FLAG_WATCHDOG_CAUSED_RESET_MASK (1U << ERROR_FLAG_WATCHDOG_CAUSED_RESET)
113#define ERROR_FLAG_CFG_READ_ERROR_MASK (1U << ERROR_FLAG_CFG_READ_ERROR)
115#define ERROR_FLAG_UVLO_MASK (1U << ERROR_FLAG_UVLO)
117#define ERROR_FLAG_DESATURATION_FAULT_MASK (1U << ERROR_FLAG_DESATURATION_FAULT)
119#define ERROR_FLAG_MOTOR_OVER_SPEED_MASK (1U << ERROR_FLAG_MOTOR_OVER_SPEED)
121#define LIMIT_FLAG_OUTPUT_VOLTAGE_PWM_MASK (1U << LIMIT_FLAG_OUTPUT_VOLTAGE_PWM)
123#define LIMIT_FLAG_MOTOR_CURRENT_MASK (1U << LIMIT_FLAG_MOTOR_CURRENT)
125#define LIMIT_FLAG_VELOCITY_MASK (1U << LIMIT_FLAG_VELOCITY)
127#define LIMIT_FLAG_BUS_CURRENT_MASK (1U << LIMIT_FLAG_BUS_CURRENT)
129#define LIMIT_FLAG_BUS_VOLTAGE_UPPER_MASK (1U << LIMIT_FLAG_BUS_VOLTAGE_UPPER)
131#define LIMIT_FLAG_BUS_VOLTAGE_LOWER_MASK (1U << LIMIT_FLAG_BUS_VOLTAGE_LOWER)
133#define LIMIT_FLAG_TEMPERATURE_MASK (1U << LIMIT_FLAG_TEMPERATURE)
134
135/************************************************************************************************
136 * Front Controller Global Definitions
137 ************************************************************************************************/
138
143typedef struct PedalCalibrationData {
144 uint16_t lower_value;
145 uint16_t upper_value;
147
151typedef struct __attribute__((aligned(4))) PedalPersistData {
152 PedalCalibrationData accel_pedal_data_raw;
153 PedalCalibrationData accel_pedal_data_amplified;
154 PedalCalibrationData brake_pedal_data;
155} PedalPersistData;
156
157/************************************************************************************************
158 * Rear Controller Global Definitions
159 ************************************************************************************************/
160
164typedef enum {
176 NUM_BPS_FAULTS
177} BpsFault;
178
180#define BPS_FAULT_OVERVOLTAGE_MASK (1U << BPS_FAULT_OVERVOLTAGE)
182#define BPS_FAULT_UNBALANCE_MASK (1U << BPS_FAULT_UNBALANCE)
184#define BPS_FAULT_OVERTEMP_AMBIENT_MASK (1U << BPS_FAULT_OVERTEMP_AMBIENT)
186#define BPS_FAULT_COMMS_LOSS_AFE_MASK (1U << BPS_FAULT_COMMS_LOSS_AFE)
188#define BPS_FAULT_COMMS_LOSS_CURR_SENSE_MASK (1U << BPS_FAULT_COMMS_LOSS_CURR_SENSE)
190#define BPS_FAULT_OVERTEMP_CELL_MASK (1U << BPS_FAULT_OVERTEMP_CELL)
192#define BPS_FAULT_OVERCURRENT_MASK (1U << BPS_FAULT_OVERCURRENT)
194#define BPS_FAULT_UNDERVOLTAGE_MASK (1U << BPS_FAULT_UNDERVOLTAGE)
196#define BPS_FAULT_KILLSWITCH_MASK (1U << BPS_FAULT_KILLSWITCH)
198#define BPS_FAULT_RELAY_CLOSE_FAILED_MASK (1U << BPS_FAULT_RELAY_CLOSE_FAILED)
200#define BPS_FAULT_DISCONNECTED_MASK (1U << BPS_FAULT_DISCONNECTED)
201
203#define BPS_FAULT_HIGH_PRIORITY_MASK (1U << 15U)
205#define BPS_FAULT_LOW_PRIORITY_MASK (1U << 14U)
206
213typedef struct {
214 uint8_t cell_index;
215 uint8_t reserved0;
216 uint16_t cell_voltage;
217 uint32_t reserved1;
218} __attribute__((packed)) BpsCellFaultData;
220typedef struct {
225 uint16_t reserved;
226} __attribute__((packed)) BpsUnbalanceFaultData;
228typedef struct {
229 uint8_t cell_index;
230 uint8_t reserved0;
232 uint32_t reserved1;
233} __attribute__((packed)) BpsTempFaultData;
235typedef struct {
236 float current_a;
237 uint32_t reserved;
238} __attribute__((packed)) BpsCurrentFaultData;
240typedef union {
241 uint64_t raw;
242 BpsCellFaultData cell;
243 BpsUnbalanceFaultData unbalance;
244 BpsTempFaultData temp;
245 BpsCurrentFaultData current;
247static_assert(sizeof(BpsFaultData) == 8, "BpsFaultData must be 8 bytes");
248
252typedef struct {
253 uint32_t fault_code;
256static_assert(sizeof(BpsFaultRecord) == 16, "BpsFaultRecord must be 16 bytes");
257
258/************************************************************************************************
259 * Steering Global Definitions
260 ************************************************************************************************/
261
265typedef enum {
272
276static const char *steering_light_state_strings[STEERING_LIGHTS_NUM_STATES] = { "OFF", "LEFT", "RIGHT", "HAZARD" };
277
278#define STEERING_LIGHT_STATE_TO_STR(s) (((s) < STEERING_LIGHTS_NUM_STATES) ? steering_light_state_strings[(s)] : "UNKNOWN")
279
280typedef enum {
285
289typedef enum {
294
296#define STEERING_CC_INCREASE_MASK (1U << EE_STEERING_CC_INCREASE_BIT)
298#define STEERING_CC_DECREASE_MASK (1U << EE_STEERING_CC_DECREASE_BIT)
300#define STEERING_CC_TOGGLE_MASK (1U << EE_STEERING_CC_TOGGLE_BIT)
301
302/************************************************************************************************
303 * WS22 Motor Controller Global Definitions
304 ************************************************************************************************/
305
307#define IS_WS22_CAN_ID(x) (((x) >= 0x80U && (x) <= 0x8BU) || (x) == 0x501U)
308
309/************************************************************************************************
310 * Power Distribution Global Definitions
311 ************************************************************************************************/
312
316typedef enum {
322
Ws22MotorFlags
WS22 motor limit and error flags.
Definition: global_enums.h:82
PDPowerState
Power distribution power state definitions.
Definition: global_enums.h:316
SteeringLightState
Steering lights definitions.
Definition: global_enums.h:265
VehicleDriveState
Vehicle drive states.
Definition: global_enums.h:33
SteeringCruiseControl
Steering cruise control definitions.
Definition: global_enums.h:289
static const char * vehicle_drive_state_strings[VEHICLE_DRIVE_NUM_STATES]
LUT + Macro to help print vehicle drive states.
Definition: global_enums.h:48
BpsLightState
Definition: global_enums.h:280
static const char * steering_light_state_strings[STEERING_LIGHTS_NUM_STATES]
LUT + Macro to help print steering light states.
Definition: global_enums.h:276
VehiclePowerStates
Vehicle power states.
Definition: global_enums.h:58
BpsFault
Battery fault definitions.
Definition: global_enums.h:164
@ EE_POWER_PRECHARGE_STATE
Definition: global_enums.h:318
@ EE_POWER_OFF_STATE
Definition: global_enums.h:317
@ EE_POWER_DRIVE_STATE
Definition: global_enums.h:319
@ EE_POWER_FAULT_STATE
Definition: global_enums.h:320
@ STEERING_LIGHTS_LEFT_STATE
Definition: global_enums.h:267
@ STEERING_LIGHTS_HAZARD_STATE
Definition: global_enums.h:269
@ STEERING_LIGHTS_NUM_STATES
Definition: global_enums.h:270
@ STEERING_LIGHTS_RIGHT_STATE
Definition: global_enums.h:268
@ STEERING_LIGHTS_OFF_STATE
Definition: global_enums.h:266
@ VEHICLE_DRIVE_STATE_REGEN
Definition: global_enums.h:40
@ VEHICLE_DRIVE_STATE_NEUTRAL
Definition: global_enums.h:35
@ VEHICLE_DRIVE_STATE_DRIVE
Definition: global_enums.h:36
@ VEHICLE_DRIVE_STATE_BRAKE
Definition: global_enums.h:39
@ VEHICLE_DRIVE_STATE_CRUISE
Definition: global_enums.h:38
@ VEHICLE_DRIVE_STATE_INVALID
Definition: global_enums.h:34
@ VEHICLE_DRIVE_STATE_REVERSE
Definition: global_enums.h:37
@ VEHICLE_DRIVE_STATE_FAULT
Definition: global_enums.h:41
@ STEERING_CRUISE_CONTROL_INCREASE_BIT
Definition: global_enums.h:291
@ STEERING_CRUISE_CONTROL_TOGGLE_BIT
Definition: global_enums.h:292
@ STEERING_CRUISE_CONTROL_DECREASE_BIT
Definition: global_enums.h:290
@ NUM_BPS_LIGHT_STATES
Definition: global_enums.h:283
@ BPS_LIGHT_ON_STATE
Definition: global_enums.h:281
@ BPS_LIGHT_OFF_STATE
Definition: global_enums.h:282
@ VEHICLE_POWER_STATE_CHARGE
Definition: global_enums.h:61
@ VEHICLE_POWER_STATE_DRIVE
Definition: global_enums.h:60
@ VEHICLE_POWER_STATE_IDLE
Definition: global_enums.h:59
@ VEHICLE_POWER_STATE_FAULT
Definition: global_enums.h:62
@ BPS_FAULT_UNDERVOLTAGE
Definition: global_enums.h:172
@ BPS_FAULT_UNBALANCE
Definition: global_enums.h:166
@ BPS_FAULT_DISCONNECTED
Definition: global_enums.h:175
@ BPS_FAULT_KILLSWITCH
Definition: global_enums.h:173
@ BPS_FAULT_OVERVOLTAGE
Definition: global_enums.h:165
@ BPS_FAULT_OVERTEMP_AMBIENT
Definition: global_enums.h:167
@ BPS_FAULT_OVERCURRENT
Definition: global_enums.h:171
@ BPS_FAULT_COMMS_LOSS_AFE
Definition: global_enums.h:168
@ BPS_FAULT_OVERTEMP_CELL
Definition: global_enums.h:170
@ BPS_FAULT_COMMS_LOSS_CURR_SENSE
Definition: global_enums.h:169
@ BPS_FAULT_RELAY_CLOSE_FAILED
Definition: global_enums.h:174
Latched BPS fault state, persisted on the rear controller.
Definition: global_enums.h:252
BpsFaultData extra_info
Definition: global_enums.h:254
uint32_t fault_code
Definition: global_enums.h:253
Stores data that defines when the pedal is full pressed or unpressed.
Definition: main.c:39
uint16_t upper_value
Definition: global_enums.h:145
uint16_t lower_value
Definition: global_enums.h:144
Per-fault detail snapshot for the BPS fault code.
Definition: global_enums.h:213
uint8_t min_cell_index
Definition: global_enums.h:222
uint8_t max_cell_index
Definition: global_enums.h:221
int16_t temperature_c
Definition: global_enums.h:231
uint16_t min_cell_voltage
Definition: global_enums.h:224
uint16_t max_cell_voltage
Definition: global_enums.h:223
float current_a
Definition: global_enums.h:236
uint16_t cell_voltage
Definition: global_enums.h:216
uint8_t cell_index
Definition: global_enums.h:214
Definition: global_enums.h:240
BpsCellFaultData cell
Definition: global_enums.h:242
uint64_t raw
Definition: global_enums.h:241
BpsCurrentFaultData current
Definition: global_enums.h:245
BpsUnbalanceFaultData unbalance
Definition: global_enums.h:243
BpsTempFaultData temp
Definition: global_enums.h:244