MCU
Loading...
Searching...
No Matches
Public Member Functions | Private Attributes | List of all members
TelemetryInterface Class Reference

#include <TelemetryInterface.h>

Collaboration diagram for TelemetryInterface:
Collaboration graph

Public Member Functions

 TelemetryInterface (CANBufferType *msg_output_queue, const TelemetryInterfaceReadChannels &channels)
 
AnalogConversion_s get_glv_voltage (const AnalogConversionPacket_s< 8 > &adc1)
 
void update_pedal_readings_CAN_msg (float accel_percent, float brake_percent, float mech_brake_percent)
 
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 update_suspension_CAN_msg (const AnalogConversion_s &lc_fl, const AnalogConversion_s &lc_fr, const AnalogConversion_s &pots_fl, const AnalogConversion_s &pots_fr)
 
void update_analog_readings_CAN_msg (const SteeringEncoderConversion_s &steer1, const AnalogConversion_s &steer2, const AnalogConversion_s &current, const AnalogConversion_s &reference, const AnalogConversion_s &glv)
 
void update_drivetrain_rpms_CAN_msg (InvInt_t *fl, InvInt_t *fr, InvInt_t *rl, InvInt_t *rr)
 
void update_drivetrain_err_status_CAN_msg (InvInt_t *fl, InvInt_t *fr, InvInt_t *rl, InvInt_t *rr)
 
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_drivetrain_torque_telem_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)
 
void update_penthouse_accum_CAN_msg (const AnalogConversion_s &current, const AnalogConversion_s &reference)
 
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)
 
template<typename T >
void enqueue_CAN (T can_msg, uint32_t id)
 
template<typename U >
void enqueue_new_CAN (U *structure, uint32_t(*pack_function)(U *, uint8_t *, uint8_t *, uint8_t *))
 
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 &current_mux_status)
 
 TelemetryInterface ()
 
 ~TelemetryInterface ()
 
void update_TCMux_status_CAN_msg (const TCMuxStatus_s &tcMuxStatus)
 
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)
 

Private Attributes

MCU_analog_readings mcu_analog_readings_
 
CANBufferTypemsg_queue_
 
TelemetryInterfaceReadChannels channels_
 

Detailed Description

Definition at line 37 of file TelemetryInterface.h.

Constructor & Destructor Documentation

◆ TelemetryInterface() [1/2]

TelemetryInterface::TelemetryInterface ( CANBufferType msg_output_queue,
const TelemetryInterfaceReadChannels channels 
)
inline

Definition at line 48 of file TelemetryInterface.h.

48 : msg_queue_(msg_output_queue),
49 channels_(channels){};
CANBufferType * msg_queue_
TelemetryInterfaceReadChannels channels_

◆ TelemetryInterface() [2/2]

TelemetryInterface::TelemetryInterface ( )
inline

Definition at line 13 of file TelemetryInterface.h.

13{};

◆ ~TelemetryInterface()

TelemetryInterface::~TelemetryInterface ( )
inline

Definition at line 14 of file TelemetryInterface.h.

14{};

Member Function Documentation

◆ enqueue_CAN()

template<typename T >
void TelemetryInterface::enqueue_CAN ( can_msg,
uint32_t  id 
)

Definition at line 226 of file TelemetryInterface.cpp.

227{
228
229 CAN_message_t msg;
230 msg_class.write(msg.buf);
231 msg.id = id;
232 msg.len = sizeof(msg_class);
233 uint8_t buf[sizeof(CAN_message_t)];
234 memmove(buf, &msg, sizeof(CAN_message_t));
235
236 msg_queue_->push_back(buf, sizeof(CAN_message_t));
237}
CAN_message_t msg

◆ enqueue_new_CAN()

template<typename U >
void TelemetryInterface::enqueue_new_CAN ( U *  structure,
uint32_t(*)(U *, uint8_t *, uint8_t *, uint8_t *)  pack_function 
)

Definition at line 241 of file TelemetryInterface.cpp.

242{
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));
248}

◆ get_glv_voltage()

AnalogConversion_s TelemetryInterface::get_glv_voltage ( const AnalogConversionPacket_s< 8 > &  adc1)
inline

Definition at line 53 of file TelemetryInterface.h.

54 {
55 return adc1.conversions[channels_.glv_sense_channel];
56 }

◆ tick()

void TelemetryInterface::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 current_mux_status 
)

Definition at line 252 of file TelemetryInterface.cpp.

270{
271
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);
275
276 // Pedals
278 brake_per,
279 mech_brake_active_percent);
280
282 accel_2,
283 brake_1,
284 brake_2);
285 // Analog readings
287 adc1.conversions[channels_.analog_steering_channel],
288 adc1.conversions[channels_.current_channel],
289 adc1.conversions[channels_.current_ref_channel],
290 adc1.conversions[channels_.glv_sense_channel]);
291 // Load cells
293 adc3.conversions[channels_.loadcell_fr_channel],
294 adc2.conversions[channels_.pots_fl_channel],
295 adc3.conversions[channels_.pots_fr_channel]);
296
297 update_drivetrain_rpms_CAN_msg(fl, fr, rl, rr);
299 update_drivetrain_status_telem_CAN_msg(fl, fr, rl, rr, accel_implaus, brake_implaus, accel_per, brake_per);
302
304 adc1.conversions[channels_.current_ref_channel]);
305
306}
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_suspension_CAN_msg(const AnalogConversion_s &lc_fl, const AnalogConversion_s &lc_fr, const AnalogConversion_s &pots_fl, const AnalogConversion_s &pots_fr)
void update_drivetrain_torque_telem_CAN_msg(InvInt_t *fl, InvInt_t *fr, InvInt_t *rl, InvInt_t *rr)
void update_penthouse_accum_CAN_msg(const AnalogConversion_s &current, const AnalogConversion_s &reference)
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 &current, 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 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)

◆ update_analog_readings_CAN_msg()

void TelemetryInterface::update_analog_readings_CAN_msg ( const SteeringEncoderConversion_s steer1,
const AnalogConversion_s &  steer2,
const AnalogConversion_s &  current,
const AnalogConversion_s &  reference,
const AnalogConversion_s &  glv 
)

Definition at line 47 of file TelemetryInterface.cpp.

52{
53 // do sth with mcu_analog_readings_
54 mcu_analog_readings_.set_steering_1(steer1.raw);
55 mcu_analog_readings_.set_steering_2(steer2.raw);
56 mcu_analog_readings_.set_hall_effect_current(current.raw - reference.raw); // this is wrong btw. should let analog channel do the math but not necessary atm
57 mcu_analog_readings_.set_glv_battery_voltage(glv.conversion * FIXED_POINT_PRECISION);
58
59 enqueue_CAN<MCU_analog_readings>(mcu_analog_readings_, ID_MCU_ANALOG_READINGS);
60}
MCU_analog_readings mcu_analog_readings_
const int FIXED_POINT_PRECISION

◆ update_drivetrain_err_status_CAN_msg()

void TelemetryInterface::update_drivetrain_err_status_CAN_msg ( InvInt_t fl,
InvInt_t fr,
InvInt_t rl,
InvInt_t rr 
)

Definition at line 73 of file TelemetryInterface.cpp.

74{
75
76 if (1)
77 { // We should only write error status if some error has occurred, but for now, this is just an if(1)
78 DRIVETRAIN_ERR_STATUS_TELEM_t errors;
79 errors.mc1_diagnostic_number = fl->get_error_status();
80 errors.mc2_diagnostic_number = fr->get_error_status();
81 errors.mc3_diagnostic_number = rl->get_error_status();
82 errors.mc4_diagnostic_number = rr->get_error_status();
83 enqueue_new_CAN<DRIVETRAIN_ERR_STATUS_TELEM_t>(&errors, &Pack_DRIVETRAIN_ERR_STATUS_TELEM_hytech);
84 }
85}
uint16_t get_error_status()

◆ update_drivetrain_rpms_CAN_msg()

void TelemetryInterface::update_drivetrain_rpms_CAN_msg ( InvInt_t fl,
InvInt_t fr,
InvInt_t rl,
InvInt_t rr 
)

Definition at line 62 of file TelemetryInterface.cpp.

63{
64 DRIVETRAIN_RPMS_TELEM_t rpms;
65 rpms.fl_motor_rpm = fl->get_speed();
66 rpms.fr_motor_rpm = fr->get_speed();
67 rpms.rl_motor_rpm = rl->get_speed();
68 rpms.rr_motor_rpm = rr->get_speed();
69
70 enqueue_new_CAN<DRIVETRAIN_RPMS_TELEM_t>(&rpms, &Pack_DRIVETRAIN_RPMS_TELEM_hytech);
71}

◆ update_drivetrain_status_telem_CAN_msg()

void TelemetryInterface::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 
)

Definition at line 87 of file TelemetryInterface.cpp.

96{
97 DRIVETRAIN_STATUS_TELEM_t status;
98
99 status.mc1_dc_on = fl->get_dc_on();
100 status.mc1_derating_on = fl->get_derating_on();
101 status.mc1_error = fl->get_error();
102 status.mc1_inverter_on = fl->get_inverter_on();
103 status.mc1_quit_dc = fl->get_quit_dc_on();
104 status.mc1_quit_inverter_on = fl->get_quit_inverter_on();
105 status.mc1_system_ready = fl->inverter_system_ready();
106 status.mc1_warning = fl->get_warning();
107
108 status.mc2_dc_on = fr->get_dc_on();
109 status.mc2_derating_on = fr->get_derating_on();
110 status.mc2_error = fr->get_error();
111 status.mc2_inverter_on = fr->get_inverter_on();
112 status.mc2_quit_dc = fr->get_quit_dc_on();
113 status.mc2_quit_inverter_on = fr->get_quit_inverter_on();
114 status.mc2_system_ready = fr->inverter_system_ready();
115 status.mc2_warning = fr->get_warning();
116
117 status.mc3_dc_on = rl->get_dc_on();
118 status.mc3_derating_on = rl->get_derating_on();
119 status.mc3_error = rl->get_error();
120 status.mc3_inverter_on = rl->get_inverter_on();
121 status.mc3_quit_dc = rl->get_quit_dc_on();
122 status.mc3_quit_inverter_on = rl->get_quit_inverter_on();
123 status.mc3_system_ready = rl->inverter_system_ready();
124 status.mc3_warning = rl->get_warning();
125
126 status.mc4_dc_on = rr->get_dc_on();
127 status.mc4_derating_on = rr->get_derating_on();
128 status.mc4_error = rr->get_error();
129 status.mc4_inverter_on = rr->get_inverter_on();
130 status.mc4_quit_dc = rr->get_quit_dc_on();
131 status.mc4_quit_inverter_on = rr->get_quit_inverter_on();
132 status.mc4_system_ready = rr->inverter_system_ready();
133 status.mc4_warning = rr->get_warning();
134
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);
139
140 MC_temps mc1_temps = fl->get_temps_msg();
141 MC_temps mc2_temps = fr->get_temps_msg();
142 MC_temps mc3_temps = rl->get_temps_msg();
143 MC_temps mc4_temps = rr->get_temps_msg();
144
145 MC_setpoints_command mc1_cmd = fl->get_cmd_msg();
146 MC_setpoints_command mc2_cmd = fr->get_cmd_msg();
147 MC_setpoints_command mc3_cmd = rl->get_cmd_msg();
148 MC_setpoints_command mc4_cmd = rr->get_cmd_msg();
149
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);
159}
MC_setpoints_command get_cmd_msg()

◆ update_drivetrain_torque_filter_out_telem_CAN_msg()

void TelemetryInterface::update_drivetrain_torque_filter_out_telem_CAN_msg ( InvInt_t fl,
InvInt_t fr,
InvInt_t rl,
InvInt_t rr 
)

Definition at line 178 of file TelemetryInterface.cpp.

183{
184 // TODO: change this to use actual torque values from inverter
185 // Torque current just temporary for gearbox seal validation
186 DRIVETRAIN_FILTER_OUT_TORQUE_TEL_t torque;
187 torque.fl_motor_torque = fl->get_commanded_torque();
188 torque.fr_motor_torque = fr->get_commanded_torque();
189 torque.rl_motor_torque = rl->get_commanded_torque();
190 torque.rr_motor_torque = rr->get_commanded_torque();
191
192 enqueue_new_CAN<DRIVETRAIN_FILTER_OUT_TORQUE_TEL_t>(&torque, &Pack_DRIVETRAIN_FILTER_OUT_TORQUE_TEL_hytech);
193}
int16_t get_commanded_torque()

◆ update_drivetrain_torque_telem_CAN_msg()

void TelemetryInterface::update_drivetrain_torque_telem_CAN_msg ( InvInt_t fl,
InvInt_t fr,
InvInt_t rl,
InvInt_t rr 
)

Definition at line 161 of file TelemetryInterface.cpp.

166{
167 // TODO: change this to use actual torque values from inverter
168 // Torque current just temporary for gearbox seal validation
169 DRIVETRAIN_TORQUE_TELEM_t torque;
170 torque.fl_motor_torque = fl->get_motor_torque();
171 torque.fr_motor_torque = fr->get_motor_torque();
172 torque.rl_motor_torque = rl->get_motor_torque();
173 torque.rr_motor_torque = rr->get_motor_torque();
174
175 enqueue_new_CAN<DRIVETRAIN_TORQUE_TELEM_t>(&torque, &Pack_DRIVETRAIN_TORQUE_TELEM_hytech);
176}

◆ update_pedal_readings_CAN_msg()

void TelemetryInterface::update_pedal_readings_CAN_msg ( float  accel_percent,
float  brake_percent,
float  mech_brake_percent 
)

Definition at line 5 of file TelemetryInterface.cpp.

8{
9
10 MCU_PEDAL_READINGS_t pedal_readings;
11
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);
15
16 enqueue_new_CAN<MCU_PEDAL_READINGS_t>(&pedal_readings, &Pack_MCU_PEDAL_READINGS_hytech);
17}

◆ update_pedal_readings_raw_CAN_msg()

void TelemetryInterface::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 
)

Definition at line 18 of file TelemetryInterface.cpp.

22{
23 MCU_PEDAL_RAW_t pedal_read;
24
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;
29
30 enqueue_new_CAN<MCU_PEDAL_RAW_t>(&pedal_read, &Pack_MCU_PEDAL_RAW_hytech);
31}

◆ update_penthouse_accum_CAN_msg()

void TelemetryInterface::update_penthouse_accum_CAN_msg ( const AnalogConversion_s &  current,
const AnalogConversion_s &  reference 
)

Definition at line 196 of file TelemetryInterface.cpp.

197{
198 PENTHOUSE_ACCUM_MSG_t message;
199 message.hall_curr_ref = reference.raw;
200 message.hall_curr_signal = current.raw;
201
202 enqueue_new_CAN<PENTHOUSE_ACCUM_MSG_t>(&message, &Pack_PENTHOUSE_ACCUM_MSG_hytech);
203}

◆ update_steering_status_CAN_msg() [1/2]

void TelemetryInterface::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 
)

Definition at line 205 of file TelemetryInterface.cpp.

211{
212 STEERING_SYSTEM_REPORT_t msg;
213
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;
220
221 enqueue_new_CAN<STEERING_SYSTEM_REPORT_t>(&msg, &Pack_STEERING_SYSTEM_REPORT_hytech);
222}

◆ update_steering_status_CAN_msg() [2/2]

void TelemetryInterface::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 
)
inline

Definition at line 20 of file TelemetryInterface.h.

27 {};

◆ update_suspension_CAN_msg()

void TelemetryInterface::update_suspension_CAN_msg ( const AnalogConversion_s &  lc_fl,
const AnalogConversion_s &  lc_fr,
const AnalogConversion_s &  pots_fl,
const AnalogConversion_s &  pots_fr 
)

Definition at line 33 of file TelemetryInterface.cpp.

37{
38 MCU_SUSPENSION_t sus;
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;
43
44 enqueue_new_CAN<MCU_SUSPENSION_t>(&sus, &Pack_MCU_SUSPENSION_hytech);
45}

◆ update_TCMux_status_CAN_msg()

void TelemetryInterface::update_TCMux_status_CAN_msg ( const TCMuxStatus_s tcMuxStatus)
inline

Definition at line 16 of file TelemetryInterface.h.

18 {};

Member Data Documentation

◆ channels_

TelemetryInterfaceReadChannels TelemetryInterface::channels_
private

Definition at line 45 of file TelemetryInterface.h.

◆ mcu_analog_readings_

MCU_analog_readings TelemetryInterface::mcu_analog_readings_
private

Definition at line 41 of file TelemetryInterface.h.

◆ msg_queue_

CANBufferType* TelemetryInterface::msg_queue_
private

Definition at line 43 of file TelemetryInterface.h.


The documentation for this class was generated from the following files: