MCU
Loading...
Searching...
No Matches
TelemetryInterface.h
Go to the documentation of this file.
1#ifndef TELEMETRYINTERFACE
2#define TELEMETRYINTERFACE
3
4#include "stdint.h"
5#include "FlexCAN_T4.h"
6#include "HyTech_CAN.h"
7
11#include "hytech.h"
12#include "InverterInterface.h"
13// #include "TorqueControllersData.h"
14#include "SharedDataTypes.h"
16
17const int FIXED_POINT_PRECISION = 1000;
18
20{
35};
36
38{
39private:
40 /* Outbound telemetry CAN messages */
41 MCU_analog_readings mcu_analog_readings_;
42 /* CAN Tx buffer */
44 /* ADC read channels */
46
47public:
48 TelemetryInterface(CANBufferType *msg_output_queue, const TelemetryInterfaceReadChannels &channels) : msg_queue_(msg_output_queue),
49 channels_(channels){};
50
51 /* GETTERS for basic conversions that don't have a home */
52
53 AnalogConversion_s get_glv_voltage(const AnalogConversionPacket_s<8> &adc1)
54 {
55 return adc1.conversions[channels_.glv_sense_channel];
56 }
57
58 /* Update CAN messages (main loop) */
59 // Interfaces
61 float accel_percent,
62 float brake_percent,
63 float mech_brake_percent);
65 const AnalogConversion_s &accel_1,
66 const AnalogConversion_s &accel_2,
67 const AnalogConversion_s &brake_1,
68 const AnalogConversion_s &brake_2);
70 const AnalogConversion_s &lc_fl,
71 const AnalogConversion_s &lc_fr,
72 const AnalogConversion_s &pots_fl,
73 const AnalogConversion_s &pots_fr);
75 const SteeringEncoderConversion_s &steer1,
76 const AnalogConversion_s &steer2,
77 const AnalogConversion_s &current,
78 const AnalogConversion_s &reference,
79 const AnalogConversion_s &glv);
81 InvInt_t *fl,
82 InvInt_t *fr,
83 InvInt_t *rl,
84 InvInt_t *rr);
86 InvInt_t *fl,
87 InvInt_t *fr,
88 InvInt_t *rl,
89 InvInt_t *rr);
91 InvInt_t *fl,
92 InvInt_t *fr,
93 InvInt_t *rl,
94 InvInt_t *rr,
95 bool accel_implaus,
96 bool brake_implaus,
97 float accel_per,
98 float brake_per);
100 InvInt_t *fl,
101 InvInt_t *fr,
102 InvInt_t *rl,
103 InvInt_t *rr
104 );
106 InvInt_t *fl,
107 InvInt_t *fr,
108 InvInt_t *rl,
109 InvInt_t *rr
110 );
112 const AnalogConversion_s &current,
113 const AnalogConversion_s &reference);
114
115 void update_steering_status_CAN_msg(const float steering_system_angle,
116 const float filtered_angle_encoder,
117 const float filtered_angle_analog,
118 const uint8_t steering_system_status,
119 const uint8_t steering_encoder_status,
120 const uint8_t steering_analog_status);
121 /* Enqueue outbound telemetry CAN messages */
122 template <typename T>
123 void enqueue_CAN(T can_msg, uint32_t id);
124
125 template <typename U>
126 void enqueue_new_CAN(U *structure, uint32_t (*pack_function)(U *, uint8_t *, uint8_t *, uint8_t *));
127
128 // TODO dont pass in pointer to inverter interface here we will break shit with this
129 /* Tick at 50Hz to send CAN */
130 void tick(
131 const AnalogConversionPacket_s<8> &adc1,
132 const AnalogConversionPacket_s<4> &adc2,
133 const AnalogConversionPacket_s<4> &adc3,
134 const SteeringEncoderConversion_s &encoder,
135 InvInt_t *fl,
136 InvInt_t *fr,
137 InvInt_t *rl,
138 InvInt_t *rr,
139 bool accel_implaus,
140 bool brake_implaus,
141 float accel_per,
142 float brake_per,
143 const AnalogConversion_s &accel_1,
144 const AnalogConversion_s &accel_2,
145 const AnalogConversion_s &brake_1,
146 const AnalogConversion_s &brake_2,
147 float mech_brake_active_percent,
148 const TorqueControllerMuxError &current_mux_status);
149};
150
151#endif /* TELEMETRYINTERFACE */
Circular_Buffer< uint8_t,(uint32_t) 128, sizeof(CAN_message_t)> CANBufferType
TorqueControllerMuxError
Defines errors for TC Mux to use to maintain system safety.
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 &current, 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)
TelemetryInterface(CANBufferType *msg_output_queue, const TelemetryInterfaceReadChannels &channels)
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)
AnalogConversion_s get_glv_voltage(const AnalogConversionPacket_s< 8 > &adc1)
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)
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