MCU
Loading...
Searching...
No Matches
Classes | Functions | Variables
HytechCANInterface.h File Reference
#include <tuple>
#include "FlexCAN_T4.h"
#include "hytech.h"
#include "HyTech_CAN.h"
#include "InverterInterface.h"
#include "DashboardInterface.h"
#include "AMSInterface.h"
#include "SABInterface.h"
#include "VectornavInterface.h"
#include "HT08_CASE_types.h"
#include "MessageQueueDefine.h"
Include dependency graph for HytechCANInterface.h:

Go to the source code of this file.

Classes

struct  CANInterfaces< circular_buffer >
 

Functions

void on_can1_receive (const CAN_message_t &msg)
 
void on_can2_receive (const CAN_message_t &msg)
 
void on_can3_receive (const CAN_message_t &msg)
 
template<typename BufferType , typename InterfaceType >
void process_ring_buffer (BufferType &rx_buffer, const InterfaceType &interfaces, unsigned long curr_millis)
 
template<typename bufferType >
void send_all_CAN_msgs (bufferType &buffer, FlexCAN_T4_Base *can_interface)
 
template<typename bufferType >
void enqueue_matlab_msg (bufferType *msg_queue, const CAN_MESSAGE_BUS &structure)
 message enque function for matlab generated CAN_MESSAGE_BUS type More...
 

Variables

Circular_Buffer< uint8_t,(uint32_t) 16, sizeof(CAN_message_t)> CAN1_rxBuffer
 
Circular_Buffer< uint8_t,(uint32_t) 16, sizeof(CAN_message_t)> CAN2_rxBuffer
 
Circular_Buffer< uint8_t,(uint32_t) 16, sizeof(CAN_message_t)> CAN3_rxBuffer
 
CANBufferType CAN1_txBuffer
 
CANBufferType CAN2_txBuffer
 
CANBufferType CAN3_txBuffer
 

Function Documentation

◆ enqueue_matlab_msg()

template<typename bufferType >
void enqueue_matlab_msg ( bufferType *  msg_queue,
const CAN_MESSAGE_BUS &  structure 
)

message enque function for matlab generated CAN_MESSAGE_BUS type

Template Parameters
bufferTypethe message buffer template type onto which you are enquing a msg
Parameters
msg_queuethe pointer to the msg queue that will contain the generic message
structurethe matlab generated CAN message type that will be sent

Definition at line 216 of file HytechCANInterface.h.

217{
218 CAN_message_t can_msg = {};
219 can_msg.id = structure.ID;
220 can_msg.len = structure.Length;
221 // TODO ensure memory safety of this, but this should be fine
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));
226}

◆ on_can1_receive()

void on_can1_receive ( const CAN_message_t &  msg)

Definition at line 12 of file HytechCANInterface.cpp.

13{
14 uint8_t buf[sizeof(CAN_message_t)];
15 memmove(buf, &msg, sizeof(msg));
16 CAN1_rxBuffer.push_back(buf, sizeof(CAN_message_t));
17}
Circular_Buffer< uint8_t,(uint32_t) 16, sizeof(CAN_message_t)> CAN1_rxBuffer
CAN_message_t msg

◆ on_can2_receive()

void on_can2_receive ( const CAN_message_t &  msg)

Definition at line 19 of file HytechCANInterface.cpp.

20{
21 uint8_t buf[sizeof(CAN_message_t)];
22 memmove(buf, &msg, sizeof(msg));
23 CAN2_rxBuffer.push_back(buf, sizeof(CAN_message_t));
24}
Circular_Buffer< uint8_t,(uint32_t) 16, sizeof(CAN_message_t)> CAN2_rxBuffer

◆ on_can3_receive()

void on_can3_receive ( const CAN_message_t &  msg)

Definition at line 26 of file HytechCANInterface.cpp.

27{
28 uint8_t buf[sizeof(CAN_message_t)];
29 memmove(buf, &msg, sizeof(msg));
30 CAN3_rxBuffer.push_back(buf, sizeof(CAN_message_t));
31}
Circular_Buffer< uint8_t,(uint32_t) 16, sizeof(CAN_message_t)> CAN3_rxBuffer

◆ process_ring_buffer()

template<typename BufferType , typename InterfaceType >
void process_ring_buffer ( BufferType &  rx_buffer,
const InterfaceType &  interfaces,
unsigned long  curr_millis 
)

Definition at line 72 of file HytechCANInterface.h.

73{
74 // TODO switch to using the global CAN receive function from the generated CAN library
75 // if(rx_buffer.size() > 0){
76
77 // Serial.println(rx_buffer.size());
78 // }
79 while (rx_buffer.available())
80 {
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));
85 switch (recvd_msg.id)
86 {
87
88 case DASHBOARD_STATE_CANID:
89 interfaces.dash_interface->read(recvd_msg);
90 break;
91
92 // AMS msg receives
93 case ID_BMS_STATUS:
94 interfaces.ams_interface->retrieve_status_CAN(curr_millis, recvd_msg);
95 break;
96 case ID_BMS_TEMPERATURES:
97 interfaces.ams_interface->retrieve_temp_CAN(recvd_msg);
98 break;
99 case ID_BMS_VOLTAGES:
100 interfaces.ams_interface->retrieve_voltage_CAN(recvd_msg);
101 break;
102 case ID_EM_MEASUREMENT:
103 interfaces.ams_interface->retrieve_em_measurement_CAN(recvd_msg);
104 break;
105 case ACU_SHUNT_MEASUREMENTS_CANID:
106 interfaces.ams_interface->retrieve_current_shunt_CAN(recvd_msg);
107 break;
108
109 // MC status msgs
110 case ID_MC1_STATUS:
111 interfaces.front_left_inv->receive_status_msg(recvd_msg);
112 break;
113 case ID_MC2_STATUS:
114 interfaces.front_right_inv->receive_status_msg(recvd_msg);
115 break;
116 case ID_MC3_STATUS:
117 interfaces.rear_left_inv->receive_status_msg(recvd_msg);
118 break;
119 case ID_MC4_STATUS:
120 interfaces.rear_right_inv->receive_status_msg(recvd_msg);
121 break;
122
123 // MC temp msgs
124 case ID_MC1_TEMPS:
125 interfaces.front_left_inv->receive_temp_msg(recvd_msg);
126 break;
127 case ID_MC2_TEMPS:
128 interfaces.front_right_inv->receive_temp_msg(recvd_msg);
129 break;
130 case ID_MC3_TEMPS:
131 interfaces.rear_left_inv->receive_temp_msg(recvd_msg);
132 break;
133 case ID_MC4_TEMPS:
134 interfaces.rear_right_inv->receive_temp_msg(recvd_msg);
135 break;
136
137 // MC energy msgs
138 case ID_MC1_ENERGY:
139 interfaces.front_left_inv->receive_energy_msg(recvd_msg);
140 break;
141 case ID_MC2_ENERGY:
142 interfaces.front_right_inv->receive_energy_msg(recvd_msg);
143 break;
144 case ID_MC3_ENERGY:
145 interfaces.rear_left_inv->receive_energy_msg(recvd_msg);
146 break;
147 case ID_MC4_ENERGY:
148 interfaces.rear_right_inv->receive_energy_msg(recvd_msg);
149 break;
150
151 // SAB msgs
152 case SAB_SUSPENSION_CANID:
153 interfaces.sab_interface->retrieve_pots_and_load_cells_CAN(recvd_msg);
154 break;
155
156 // vector nav msgs
157 case VN_VEL_CANID:
158 interfaces.vn_interface->retrieve_velocity_CAN(recvd_msg);
159 break;
160 case VN_LINEAR_ACCEL_CANID:
161 interfaces.vn_interface->retrieve_linear_accel_CAN(recvd_msg);
162 break;
163 case VN_LINEAR_ACCEL_UNCOMP_CANID:
164 interfaces.vn_interface->retrieve_uncompLinear_accel_CAN(recvd_msg);
165 break;
166 case VN_YPR_CANID:
167 interfaces.vn_interface->retrieve_ypr_CAN(recvd_msg);
168 break;
169 case VN_LAT_LON_CANID:
170 interfaces.vn_interface->retrieve_lat_lon_CAN(recvd_msg);
171 break;
172 case VN_GPS_TIME_MSG_CANID:
173 interfaces.vn_interface->retrieve_gps_time_CAN(recvd_msg);
174 break;
175 case VN_STATUS_CANID:
176 interfaces.vn_interface->retrieve_vn_status_CAN(recvd_msg); // double check this
177 break;
178 case VN_ANGULAR_RATE_CANID:
179 interfaces.vn_interface->receive_ang_rates_CAN(recvd_msg);
180 break;
181 default:
182 break;
183 }
184 }
185}

◆ send_all_CAN_msgs()

template<typename bufferType >
void send_all_CAN_msgs ( bufferType &  buffer,
FlexCAN_T4_Base *  can_interface 
)

Definition at line 191 of file HytechCANInterface.h.

192{
193 CAN_message_t msg;
194 while (buffer.available())
195 {
196 CAN_message_t msg;
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);
201 // delayMicroseconds(2500);
202 }
203}

Variable Documentation

◆ CAN1_rxBuffer

Circular_Buffer<uint8_t, (uint32_t)16, sizeof(CAN_message_t)> CAN1_rxBuffer
extern

Definition at line 3 of file HytechCANInterface.cpp.

◆ CAN1_txBuffer

CANBufferType CAN1_txBuffer
extern

Definition at line 7 of file HytechCANInterface.cpp.

◆ CAN2_rxBuffer

Circular_Buffer<uint8_t, (uint32_t)16, sizeof(CAN_message_t)> CAN2_rxBuffer
extern

Definition at line 4 of file HytechCANInterface.cpp.

◆ CAN2_txBuffer

CANBufferType CAN2_txBuffer
extern

Definition at line 8 of file HytechCANInterface.cpp.

◆ CAN3_rxBuffer

Circular_Buffer<uint8_t, (uint32_t)16, sizeof(CAN_message_t)> CAN3_rxBuffer
extern

Definition at line 5 of file HytechCANInterface.cpp.

◆ CAN3_txBuffer

CASESystem< CircularBufferType > case_system & CAN3_txBuffer
extern

Definition at line 187 of file main.cpp.