1#include "TelemetryInterface.h"
7 float mech_brake_percent)
10 MCU_PEDAL_READINGS_t pedal_readings;
12 pedal_readings.accel_percent_float_ro = HYTECH_accel_percent_float_ro_toS(accel_percent * 100);
13 pedal_readings.brake_percent_float_ro = HYTECH_brake_percent_float_ro_toS(brake_percent * 100);
14 pedal_readings.mechanical_brake_percent_float_ro = HYTECH_mechanical_brake_percent_float_ro_toS(mech_brake_percent * 100);
16 enqueue_new_CAN<MCU_PEDAL_READINGS_t>(&pedal_readings, &Pack_MCU_PEDAL_READINGS_hytech);
19 const AnalogConversion_s &accel_2,
20 const AnalogConversion_s &brake_1,
21 const AnalogConversion_s &brake_2)
23 MCU_PEDAL_RAW_t pedal_read;
25 pedal_read.accel_1_raw = accel_1.raw;
26 pedal_read.accel_2_raw = accel_2.raw;
27 pedal_read.brake_1_raw = brake_1.raw;
28 pedal_read.brake_2_raw = brake_2.raw;
30 enqueue_new_CAN<MCU_PEDAL_RAW_t>(&pedal_read, &Pack_MCU_PEDAL_RAW_hytech);
34 const AnalogConversion_s &lc_fr,
35 const AnalogConversion_s &pots_fl,
36 const AnalogConversion_s &pots_fr)
39 sus.load_cell_fl = lc_fl.raw;
40 sus.load_cell_fr = lc_fr.raw;
41 sus.potentiometer_fl = pots_fl.raw;
42 sus.potentiometer_fr = pots_fr.raw;
44 enqueue_new_CAN<MCU_SUSPENSION_t>(&sus, &Pack_MCU_SUSPENSION_hytech);
48 const AnalogConversion_s &steer2,
49 const AnalogConversion_s ¤t,
50 const AnalogConversion_s &reference,
51 const AnalogConversion_s &glv)
64 DRIVETRAIN_RPMS_TELEM_t rpms;
70 enqueue_new_CAN<DRIVETRAIN_RPMS_TELEM_t>(&rpms, &Pack_DRIVETRAIN_RPMS_TELEM_hytech);
78 DRIVETRAIN_ERR_STATUS_TELEM_t errors;
83 enqueue_new_CAN<DRIVETRAIN_ERR_STATUS_TELEM_t>(&errors, &Pack_DRIVETRAIN_ERR_STATUS_TELEM_hytech);
97 DRIVETRAIN_STATUS_TELEM_t status;
135 status.accel_implausible = accel_implaus;
136 status.brake_implausible = brake_implaus;
137 status.brake_percent = (uint8_t)(abs(brake_per) * 100);
138 status.accel_percent = (uint8_t)(abs(accel_per) * 100);
150 enqueue_CAN<MC_temps>(mc1_temps, ID_MC1_TEMPS);
151 enqueue_CAN<MC_temps>(mc2_temps, ID_MC2_TEMPS);
152 enqueue_CAN<MC_temps>(mc3_temps, ID_MC3_TEMPS);
153 enqueue_CAN<MC_temps>(mc4_temps, ID_MC4_TEMPS);
154 enqueue_CAN<MC_setpoints_command>(mc1_cmd, ID_MC1_SETPOINTS_COMMAND);
155 enqueue_CAN<MC_setpoints_command>(mc2_cmd, ID_MC2_SETPOINTS_COMMAND);
156 enqueue_CAN<MC_setpoints_command>(mc3_cmd, ID_MC3_SETPOINTS_COMMAND);
157 enqueue_CAN<MC_setpoints_command>(mc4_cmd, ID_MC4_SETPOINTS_COMMAND);
158 enqueue_new_CAN<DRIVETRAIN_STATUS_TELEM_t>(&status, &Pack_DRIVETRAIN_STATUS_TELEM_hytech);
169 DRIVETRAIN_TORQUE_TELEM_t torque;
175 enqueue_new_CAN<DRIVETRAIN_TORQUE_TELEM_t>(&torque, &Pack_DRIVETRAIN_TORQUE_TELEM_hytech);
186 DRIVETRAIN_FILTER_OUT_TORQUE_TEL_t torque;
192 enqueue_new_CAN<DRIVETRAIN_FILTER_OUT_TORQUE_TEL_t>(&torque, &Pack_DRIVETRAIN_FILTER_OUT_TORQUE_TEL_hytech);
198 PENTHOUSE_ACCUM_MSG_t message;
199 message.hall_curr_ref = reference.raw;
200 message.hall_curr_signal = current.raw;
202 enqueue_new_CAN<PENTHOUSE_ACCUM_MSG_t>(&message, &Pack_PENTHOUSE_ACCUM_MSG_hytech);
206 const float filtered_angle_encoder,
207 const float filtered_angle_analog,
208 const uint8_t steering_system_status,
209 const uint8_t steering_encoder_status,
210 const uint8_t steering_analog_status)
212 STEERING_SYSTEM_REPORT_t
msg;
214 msg.steering_system_angle_ro = HYTECH_steering_system_angle_ro_toS(steering_system_angle);
215 msg.steering_encoder_angle_ro = HYTECH_steering_encoder_angle_ro_toS(filtered_angle_encoder);
216 msg.steering_analog_angle_ro = HYTECH_steering_analog_angle_ro_toS(filtered_angle_analog);
217 msg.steering_system_status = steering_system_status;
218 msg.steering_encoder_status = steering_encoder_status;
219 msg.steering_analog_status = steering_analog_status;
221 enqueue_new_CAN<STEERING_SYSTEM_REPORT_t>(&
msg, &Pack_STEERING_SYSTEM_REPORT_hytech);
230 msg_class.write(
msg.buf);
232 msg.len =
sizeof(msg_class);
233 uint8_t buf[
sizeof(CAN_message_t)];
234 memmove(buf, &
msg,
sizeof(CAN_message_t));
236 msg_queue_->push_back(buf,
sizeof(CAN_message_t));
243 CAN_message_t can_msg;
244 can_msg.id = pack_function(structure, can_msg.buf, &can_msg.len, (uint8_t *)&can_msg.flags.extended);
245 uint8_t buf[
sizeof(CAN_message_t)] = {};
246 memmove(buf, &can_msg,
sizeof(CAN_message_t));
247 msg_queue_->push_back(buf,
sizeof(CAN_message_t));
253 const AnalogConversionPacket_s<4> &adc2,
254 const AnalogConversionPacket_s<4> &adc3,
264 const AnalogConversion_s &accel_1,
265 const AnalogConversion_s &accel_2,
266 const AnalogConversion_s &brake_1,
267 const AnalogConversion_s &brake_2,
268 float mech_brake_active_percent,
272 MCU_ERROR_STATES_t error_states;
273 error_states.torque_controller_mux_status =
static_cast<uint8_t
>(current_mux_status);
274 enqueue_new_CAN<MCU_ERROR_STATES_t>(&error_states, &Pack_MCU_ERROR_STATES_hytech);
279 mech_brake_active_percent);
TorqueControllerMuxError
Defines errors for TC Mux to use to maintain system safety.
bool inverter_system_ready()
uint16_t get_error_status()
int16_t get_commanded_torque()
MC_setpoints_command get_cmd_msg()
bool get_quit_inverter_on()
void update_drivetrain_rpms_CAN_msg(InvInt_t *fl, InvInt_t *fr, InvInt_t *rl, InvInt_t *rr)
void update_pedal_readings_CAN_msg(float accel_percent, float brake_percent, float mech_brake_percent)
void update_steering_status_CAN_msg(const float steering_system_angle, const float filtered_angle_encoder, const float filtered_angle_analog, const uint8_t steering_system_status, const uint8_t steering_encoder_status, const uint8_t steering_analog_status)
void update_suspension_CAN_msg(const AnalogConversion_s &lc_fl, const AnalogConversion_s &lc_fr, const AnalogConversion_s &pots_fl, const AnalogConversion_s &pots_fr)
CANBufferType * msg_queue_
void update_drivetrain_torque_telem_CAN_msg(InvInt_t *fl, InvInt_t *fr, InvInt_t *rl, InvInt_t *rr)
void enqueue_new_CAN(U *structure, uint32_t(*pack_function)(U *, uint8_t *, uint8_t *, uint8_t *))
void update_penthouse_accum_CAN_msg(const AnalogConversion_s ¤t, const AnalogConversion_s &reference)
TelemetryInterfaceReadChannels channels_
void enqueue_CAN(T can_msg, uint32_t id)
MCU_analog_readings mcu_analog_readings_
void update_drivetrain_status_telem_CAN_msg(InvInt_t *fl, InvInt_t *fr, InvInt_t *rl, InvInt_t *rr, bool accel_implaus, bool brake_implaus, float accel_per, float brake_per)
void update_analog_readings_CAN_msg(const SteeringEncoderConversion_s &steer1, const AnalogConversion_s &steer2, const AnalogConversion_s ¤t, const AnalogConversion_s &reference, const AnalogConversion_s &glv)
void update_pedal_readings_raw_CAN_msg(const AnalogConversion_s &accel_1, const AnalogConversion_s &accel_2, const AnalogConversion_s &brake_1, const AnalogConversion_s &brake_2)
void tick(const AnalogConversionPacket_s< 8 > &adc1, const AnalogConversionPacket_s< 4 > &adc2, const AnalogConversionPacket_s< 4 > &adc3, const SteeringEncoderConversion_s &encoder, InvInt_t *fl, InvInt_t *fr, InvInt_t *rl, InvInt_t *rr, bool accel_implaus, bool brake_implaus, float accel_per, float brake_per, const AnalogConversion_s &accel_1, const AnalogConversion_s &accel_2, const AnalogConversion_s &brake_1, const AnalogConversion_s &brake_2, float mech_brake_active_percent, const TorqueControllerMuxError ¤t_mux_status)
void update_drivetrain_err_status_CAN_msg(InvInt_t *fl, InvInt_t *fr, InvInt_t *rl, InvInt_t *rr)
void update_drivetrain_torque_filter_out_telem_CAN_msg(InvInt_t *fl, InvInt_t *fr, InvInt_t *rl, InvInt_t *rr)
const int FIXED_POINT_PRECISION
int analog_steering_channel