MCU
Loading...
Searching...
No Matches
MCUInterface.h
Go to the documentation of this file.
1#ifndef __MCU_INTERFACE_H__
2#define __MCU_INTERFACE_H__
3
4#include <stdint.h>
5#include "FlexCAN_T4.h"
6#include "HyTech_CAN.h"
7#include "hytech.h"
9#include "PedalsSystem.h"
10#include "SharedDataTypes.h"
11
12const int DEFAULT_BMS_OK_READ = 17; // SHDN_D_READ
13const int DEFAULT_BMS_SENSE_PIN = 16; // BMS_OK_SENSE
14const int DEFAULT_IMD_OK_READ = 10; // SHDN_C_READ
15const int DEFAULT_IMD_SENSE_PIN = 18; // OKHS_SENSE
16const int DEFAULT_BSPD_OK_READ = 39; // SHDN_E_READ
17const int DEFAULT_SOFTWARE_OK_READ = 25; // SHDN_F_READ Watchdog Combined
18const int DEFAULT_BOTS_OK_READ = 24; // SHDN_B_READ
19const int DEFAULT_BRB_OK_READ = 26; // SHDN_G_READ
23const int DEFAULT_BRAKE_PRESSURE_SENSOR_READ = 27; // Read pin for brake pressure sensor.
24
27{
28 // shutdown read pins
35 // brake light pin
37 // inverter enable pins
41};
42
46
48{
49private:
51
53
54 /* Outbound CAN message */
55 MCU_STATUS_t mcu_status_;
56
57 /* Shutdown circuit input */
63 /* Shutdown circuit voltage */
69
70 /* Private utility functions */
71 // Read all shutdown signals on ECU
74 // Update CAN message content
76
77public:
78 // PLEASE replace these long lists of parameters with structs
79 // and put initialization in constructor body instead of initializer list -- happy?
80 // my retinas are in pain
81 MCUInterface(CANBufferType *msg_output_queue, const MainECUHardwareReadPins &pins):
82 // Member initialization list
83 msg_queue_(msg_output_queue),
84 pins_(pins){};
85
86 // Overloading constructor
87 MCUInterface(CANBufferType *msg_output_queue):
88 MCUInterface(msg_output_queue, DEFAULT_PINS)
89 {};
90
91 /* Initialize shutdown circuit input readings */
92 void init();
93
94 /* Read from Main ECU */
95 void read_mcu_status();
96
97 /* Write to Main ECU */
98 void set_brake_light(bool brake_pedal_is_active); // Called from PedalInterface/System
101
102 /* Feed to state machine */
103 bool bms_ok_is_high();
104 bool imd_ok_is_high();
105 bool brb_ok_is_high();
106
107 bool get_bots_ok();
108
109 /* Update MCU_status CAN (main loop) */
110 // State machine
111 void update_mcu_status_CAN_fsm(int fsm_state);
112 // Systems
113 void update_mcu_status_CAN_drivetrain(bool has_error);
114 void update_mcu_status_CAN_safety(bool is_ok);
115 void update_mcu_status_CAN_TCMux(int drive_mode, int torque_mode, float max_torque);
116 void update_mcu_status_CAN_buzzer(bool is_on);
118 // Interfaces
119 void update_mcu_status_CAN_ams(bool is_critical);
120 void update_mcu_status_CAN_dashboard(bool is_active);
122
123 /* Enqueue MCU_status CAN */
125
126 /* Tick MCUInterface at 10HZ */
127 void tick(
128 int fsm_state,
129 bool inv_has_error,
130 bool software_is_ok,
131 const TorqueControllerMuxStatus& tc_mux_status,
132 bool buzzer_is_on,
133 const PedalsSystemData_s &pedals_data,
134 bool pack_charge_is_critical,
135 bool button_is_pressed);
136};
137
138#endif /* __MCU_INTERFACE_H__ */
Circular_Buffer< uint8_t,(uint32_t) 128, sizeof(CAN_message_t)> CANBufferType
bool brb_ok_is_high()
bool bspd_ok_high
Definition: MCUInterface.h:60
void update_mcu_status_CAN_pedals(const PedalsSystemData_s &pedals)
bool imd_ok_is_high()
void update_mcu_status_CAN_drivetrain(bool has_error)
bool shutdown_e_above_threshold
Definition: MCUInterface.h:67
MainECUHardwareReadPins pins_
Definition: MCUInterface.h:52
bool brb_ok_high
Definition: MCUInterface.h:62
void enable_inverters_pin()
void update_mcu_status_CAN_fsm(int fsm_state)
MCUInterface(CANBufferType *msg_output_queue)
Definition: MCUInterface.h:87
bool shutdown_d_above_threshold
Definition: MCUInterface.h:66
bool bms_ok_high
Definition: MCUInterface.h:58
void measure_shutdown_circuit_input()
bool imd_ok_high
Definition: MCUInterface.h:59
bool get_bots_ok()
bool shutdown_b_above_threshold
Definition: MCUInterface.h:64
void enqueue_CAN_mcu_status()
bool shutdown_g_above_threshold
Definition: MCUInterface.h:68
void tick(int fsm_state, bool inv_has_error, bool software_is_ok, const TorqueControllerMuxStatus &tc_mux_status, bool buzzer_is_on, const PedalsSystemData_s &pedals_data, bool pack_charge_is_critical, bool button_is_pressed)
void update_mcu_status_CAN_buzzer(bool is_on)
CANBufferType * msg_queue_
Definition: MCUInterface.h:50
void update_mcu_status_CAN_ams(bool is_critical)
void read_mcu_status()
MCUInterface(CANBufferType *msg_output_queue, const MainECUHardwareReadPins &pins)
Definition: MCUInterface.h:81
void update_brake_pressure_CAN()
void set_brake_light(bool brake_pedal_is_active)
void update_mcu_status_CAN_TCMux(int drive_mode, int torque_mode, float max_torque)
void disable_inverters_pin()
MCU_STATUS_t mcu_status_
Definition: MCUInterface.h:55
bool software_ok_high
Definition: MCUInterface.h:61
void update_mcu_status_CAN_safety(bool is_ok)
void measure_shutdown_circuit_voltage()
void update_mcu_status_CAN()
void update_mcu_status_CAN_dashboard(bool is_active)
bool bms_ok_is_high()
bool shutdown_c_above_threshold
Definition: MCUInterface.h:65
const int DEFAULT_INVERTER_ENABLE
Definition: MCUInterface.h:21
const int DEFAULT_BMS_SENSE_PIN
Definition: MCUInterface.h:13
const int DEFAULT_IMD_SENSE_PIN
Definition: MCUInterface.h:15
const int DEFAULT_BRAKE_PRESSURE_SENSOR_READ
Definition: MCUInterface.h:23
const int DEFAULT_IMD_OK_READ
Definition: MCUInterface.h:14
const int DEFAULT_INVERTER_24V_ENABLE
Definition: MCUInterface.h:22
const int DEFAULT_BRAKE_LIGHT_CTRL
Definition: MCUInterface.h:20
const int DEFAULT_BRB_OK_READ
Definition: MCUInterface.h:19
const int DEFAULT_SOFTWARE_OK_READ
Definition: MCUInterface.h:17
const int DEFAULT_BOTS_OK_READ
Definition: MCUInterface.h:18
const int DEFAULT_BSPD_OK_READ
Definition: MCUInterface.h:16
const int DEFAULT_BMS_OK_READ
Definition: MCUInterface.h:12
specifically designed so that Walker would be happy
Definition: MCUInterface.h:27
packages TC Mux indicators: errors, mode, torque limit, bypass