MCU
Loading...
Searching...
No Matches
MCUInterface.cpp
Go to the documentation of this file.
1#include "MCUInterface.h"
2
3/* Member functions */
4
5/* Initialize shutdown circuit input readings */
7{
8 // Set pin mode
9 pinMode(pins_.pin_inv_en, OUTPUT);
10 pinMode(pins_.pin_inv_24V_en, OUTPUT);
11 pinMode(pins_.pin_brake_light_ctrl, OUTPUT);
12
13 // Set initial shutdown circuit readings
14 bms_ok_high = false;
15 imd_ok_high = false;
16 brb_ok_high = false;
17
18 // Enable inverters (?)
19 // Should be called from drivetrain
20}
21
22/* Read shutdown system values (Not ticked, just in main loop)*/
24{
25
28}
29
30/* Measure shutdown circuits' input */
32{
33 // TODO: change these back to pins from constructor
36
37 bspd_ok_high = digitalRead(pins_.pin_bspd_ok_read);
39 brb_ok_high = digitalRead(pins_.pin_brb_ok_read);
40
41}
42
43/* Measure shutdown circuits' voltages */
45{
46
52}
53
54/* Write brake light */
55void MCUInterface::set_brake_light(bool brake_pedal_is_active)
56{
57
58 digitalWrite(pins_.pin_brake_light_ctrl, brake_pedal_is_active);
59}
60
62{
63 digitalWrite(pins_.pin_inv_en, HIGH);
64 digitalWrite(pins_.pin_inv_24V_en, HIGH);
65}
67{
68 digitalWrite(pins_.pin_inv_en, LOW);
69 digitalWrite(pins_.pin_inv_24V_en, LOW);
70}
71/* Shutdown circuit input state */
72// BMS
74{
75 return bms_ok_high;
76}
77// OKHS (IMD)
79{
80 return imd_ok_high;
81}
82
83// BRB
85{
86 return brb_ok_high;
87}
88
90{
92}
93
94/* Send CAN message */
95// MCU status
97{
98 CAN_message_t msg;
99
100 msg.id = Pack_MCU_STATUS_hytech(&mcu_status_, msg.buf, &msg.len, (uint8_t*) &msg.flags.extended);
101
102 uint8_t buf[sizeof(CAN_message_t)] = {};
103 memmove(buf, &msg, sizeof(CAN_message_t));
104 msg_queue_->push_back(buf, sizeof(CAN_message_t));
105}
106
107/* Update MCU_status CAN */
108// MCUInterface
110{
111 // Shutdown circuit input
112 mcu_status_.bms_ok_high = bms_ok_high;
113 mcu_status_.imd_ok_high = imd_ok_high;
114 mcu_status_.bspd_ok_high = bspd_ok_high;
115 mcu_status_.software_ok_high = software_ok_high;
116 // Shutdown circuit voltage
117 mcu_status_.shutdown_b_above_threshold = shutdown_b_above_threshold;
118 mcu_status_.shutdown_c_above_threshold = shutdown_c_above_threshold;
119 mcu_status_.shutdown_d_above_threshold = shutdown_d_above_threshold;
120 mcu_status_.shutdown_e_above_threshold = shutdown_e_above_threshold;
121
122}
123
124// Main loop
125// State machine
126void MCUInterface::update_mcu_status_CAN_fsm(int fsm_state_enum_val)
127{
128 mcu_status_.ecu_state = fsm_state_enum_val;
129}
130// DriveTrain
132{
133 // Drivetrain returns struct in main loop
134 // drivetrain.drive_error_occured()
135 mcu_status_.inverter_error = has_error; // could also be called has_error
136}
137// SafetySystem
139{
140 // SafetySystem returns struct in main loop
141 // safety_system.get_software_is_ok()
142 mcu_status_.software_ok = is_ok;
143}
144// AMSInterface
146{
147 // AMSInterface returns struct in main loop
148 // ams_interface.pack_charge_is_critical()
149 mcu_status_.pack_charge_critical = is_critical;
150}
151// TorqueControllerMux
152// Would need an agreement on
153void MCUInterface::update_mcu_status_CAN_TCMux(int drive_mode, int torque_mode, float max_torque)
154{
155 // TorqueControllerMux returns struct in main loop
156 mcu_status_.drive_mode = drive_mode;
157 mcu_status_.torque_mode = torque_mode;
158 mcu_status_.max_torque = static_cast<uint8_t>(max_torque);
159}
160// DashboardInterface
162{
163 // DashboardInterface (?) returns struct in main loop
164 // dash.lauchControlButtonPressed()
165 mcu_status_.launch_control_active = is_active;
166}
167// BuzzerSystem
169{
170 // Buzzer returns struct in main loop
171 // buzzer.buzzer_is_on()
172 mcu_status_.drive_buzzer = is_on;
173}
174// PedalSystem
175// Would need to agree on
177{
178 // PedalSystem returns struct in main loop
179 mcu_status_.brake_pedal_active = pedals.brakePressed;
180 // mcu_status_.set_mech_brake_active();
181 mcu_status_.no_accel_implausibility = !pedals.accelImplausible;
182 mcu_status_.no_brake_implausibility = !pedals.brakeImplausible;
183 mcu_status_.no_accel_or_brake_implausibility = !(pedals.brakeAndAccelPressedImplausibility);
184}
186{
187 BRAKE_PRESSURE_SENSOR_t brake_sensor_msg;
188 brake_sensor_msg.brake_sensor_analog_read = analogRead(pins_.pin_brake_pressure_sensor_read);
189
190 CAN_message_t msg;
191
192 msg.id = Pack_BRAKE_PRESSURE_SENSOR_hytech(&brake_sensor_msg, msg.buf, &msg.len, (uint8_t*) &msg.flags.extended);
193
194 uint8_t buf[sizeof(CAN_message_t)] = {};
195 memmove(buf, &msg, sizeof(CAN_message_t));
196 msg_queue_->push_back(buf, sizeof(CAN_message_t));
197}
198
199void MCUInterface::tick(int fsm_state,
200 bool inv_has_error,
201 bool software_is_ok,
202
203 const TorqueControllerMuxStatus& tc_mux_status,
204 bool buzzer_is_on,
205 const PedalsSystemData_s &pedals_data,
206 bool pack_charge_is_critical,
207 bool button_is_pressed)
208{
209 // State machine
210 update_mcu_status_CAN_fsm(fsm_state);
211 // Systems
213 update_mcu_status_CAN_safety(software_is_ok);
214
215 auto drive_mode = static_cast<int>(tc_mux_status.active_controller_mode);
216 auto torque_mode = static_cast<int>(tc_mux_status.active_torque_limit_enum);
217 auto max_torque = tc_mux_status.active_torque_limit_value;
218
219 update_mcu_status_CAN_TCMux(drive_mode, torque_mode, max_torque);
220 update_mcu_status_CAN_buzzer(buzzer_is_on);
221 update_mcu_status_CAN_pedals(pedals_data);
222 // External Interfaces
223 update_mcu_status_CAN_ams(pack_charge_is_critical);
224 update_mcu_status_CAN_dashboard(button_is_pressed);
226 // Internal values
228 // Push into buffer
230 set_brake_light(pedals_data.brakePressed);
231}
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)
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()
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_BMS_SENSE_PIN
Definition: MCUInterface.h:13
const int DEFAULT_IMD_SENSE_PIN
Definition: MCUInterface.h:15
bool brakeAndAccelPressedImplausibility
packages TC Mux indicators: errors, mode, torque limit, bypass
TorqueLimit_e active_torque_limit_enum
ControllerMode_e active_controller_mode
CAN_message_t msg