1#ifndef HYTECHCANINTERFACE
2#define HYTECHCANINTERFACE
15#include "HT08_CASE_types.h"
24template <
typename circular_buffer>
42extern Circular_Buffer<uint8_t, (uint32_t)16,
sizeof(CAN_message_t)>
45extern Circular_Buffer<uint8_t, (uint32_t)16,
sizeof(CAN_message_t)>
48extern Circular_Buffer<uint8_t, (uint32_t)16,
sizeof(CAN_message_t)>
71template <
typename BufferType,
typename InterfaceType>
72void process_ring_buffer(BufferType &rx_buffer,
const InterfaceType &interfaces,
unsigned long curr_millis)
79 while (rx_buffer.available())
81 CAN_message_t recvd_msg;
82 uint8_t buf[
sizeof(CAN_message_t)];
83 rx_buffer.pop_front(buf,
sizeof(CAN_message_t));
84 memmove(&recvd_msg, buf,
sizeof(recvd_msg));
88 case DASHBOARD_STATE_CANID:
89 interfaces.dash_interface->read(recvd_msg);
94 interfaces.ams_interface->retrieve_status_CAN(curr_millis, recvd_msg);
96 case ID_BMS_TEMPERATURES:
97 interfaces.ams_interface->retrieve_temp_CAN(recvd_msg);
100 interfaces.ams_interface->retrieve_voltage_CAN(recvd_msg);
102 case ID_EM_MEASUREMENT:
103 interfaces.ams_interface->retrieve_em_measurement_CAN(recvd_msg);
105 case ACU_SHUNT_MEASUREMENTS_CANID:
106 interfaces.ams_interface->retrieve_current_shunt_CAN(recvd_msg);
111 interfaces.front_left_inv->receive_status_msg(recvd_msg);
114 interfaces.front_right_inv->receive_status_msg(recvd_msg);
117 interfaces.rear_left_inv->receive_status_msg(recvd_msg);
120 interfaces.rear_right_inv->receive_status_msg(recvd_msg);
125 interfaces.front_left_inv->receive_temp_msg(recvd_msg);
128 interfaces.front_right_inv->receive_temp_msg(recvd_msg);
131 interfaces.rear_left_inv->receive_temp_msg(recvd_msg);
134 interfaces.rear_right_inv->receive_temp_msg(recvd_msg);
139 interfaces.front_left_inv->receive_energy_msg(recvd_msg);
142 interfaces.front_right_inv->receive_energy_msg(recvd_msg);
145 interfaces.rear_left_inv->receive_energy_msg(recvd_msg);
148 interfaces.rear_right_inv->receive_energy_msg(recvd_msg);
152 case SAB_SUSPENSION_CANID:
153 interfaces.sab_interface->retrieve_pots_and_load_cells_CAN(recvd_msg);
158 interfaces.vn_interface->retrieve_velocity_CAN(recvd_msg);
160 case VN_LINEAR_ACCEL_CANID:
161 interfaces.vn_interface->retrieve_linear_accel_CAN(recvd_msg);
163 case VN_LINEAR_ACCEL_UNCOMP_CANID:
164 interfaces.vn_interface->retrieve_uncompLinear_accel_CAN(recvd_msg);
167 interfaces.vn_interface->retrieve_ypr_CAN(recvd_msg);
169 case VN_LAT_LON_CANID:
170 interfaces.vn_interface->retrieve_lat_lon_CAN(recvd_msg);
172 case VN_GPS_TIME_MSG_CANID:
173 interfaces.vn_interface->retrieve_gps_time_CAN(recvd_msg);
175 case VN_STATUS_CANID:
176 interfaces.vn_interface->retrieve_vn_status_CAN(recvd_msg);
178 case VN_ANGULAR_RATE_CANID:
179 interfaces.vn_interface->receive_ang_rates_CAN(recvd_msg);
190template <
typename bufferType>
194 while (buffer.available())
197 uint8_t buf[
sizeof(CAN_message_t)];
198 buffer.pop_front(buf,
sizeof(CAN_message_t));
199 memmove(&
msg, buf,
sizeof(
msg));
200 can_interface->write(
msg);
215template <
typename bufferType>
218 CAN_message_t can_msg = {};
219 can_msg.id = structure.ID;
220 can_msg.len = structure.Length;
222 memmove( can_msg.buf, structure.Data, structure.Length );
223 uint8_t buf[
sizeof(CAN_message_t)] = {};
224 memmove(buf, &can_msg,
sizeof(CAN_message_t));
225 msg_queue->push_back(buf,
sizeof(CAN_message_t));
Circular_Buffer< uint8_t,(uint32_t) 128, sizeof(CAN_message_t)> CANBufferType
this class is for interfacing with the AMS (accumulator management system)
void on_can2_receive(const CAN_message_t &msg)
CANBufferType CAN1_txBuffer
Circular_Buffer< uint8_t,(uint32_t) 16, sizeof(CAN_message_t)> CAN3_rxBuffer
void process_ring_buffer(BufferType &rx_buffer, const InterfaceType &interfaces, unsigned long curr_millis)
void send_all_CAN_msgs(bufferType &buffer, FlexCAN_T4_Base *can_interface)
CANBufferType CAN3_txBuffer
void on_can3_receive(const CAN_message_t &msg)
void enqueue_matlab_msg(bufferType *msg_queue, const CAN_MESSAGE_BUS &structure)
message enque function for matlab generated CAN_MESSAGE_BUS type
Circular_Buffer< uint8_t,(uint32_t) 16, sizeof(CAN_message_t)> CAN1_rxBuffer
void on_can1_receive(const CAN_message_t &msg)
Circular_Buffer< uint8_t,(uint32_t) 16, sizeof(CAN_message_t)> CAN2_rxBuffer
CANBufferType CAN2_txBuffer
AMSInterface * ams_interface
InverterInterface< circular_buffer > * front_left_inv
DashboardInterface * dash_interface
VNInterface< circular_buffer > * vn_interface
InverterInterface< circular_buffer > * front_right_inv
InverterInterface< circular_buffer > * rear_left_inv
InverterInterface< circular_buffer > * rear_right_inv
SABInterface * sab_interface