5#include "../../../../Inc/Systems/Comms/Can/Can.h"
6#include "../../../../Inc/Systems/Comms/Can/DBCParser.h"
7#include "../../../../Inc/Utils/Common.h"
8#include "../../../../Inc/Utils/MessageFormat.h"
32 unsigned char* dbc_contents = filename;
64 strcpy(message.
name, name);
65 strcpy(message.
sender, sender);
70 for (
int i = 0; i < signal_count; i++) {
81 CAN_TxHeaderTypeDef TxHeader;
84 TxHeader.IDE = CAN_ID_STD;
85 }
else if (protocol ==
CAN_2B) {
87 TxHeader.IDE = CAN_ID_EXT;
93 TxHeader.RTR = CAN_RTR_DATA;
98 for (
int i = 0; i < len; i++) {
99 printf(
"%02X ", data[i]);
115 can_message->
header = *RxHeader;
116 memcpy(can_message->
data, RxData, 8);
120 for (
int i = 0; i < RxHeader->DLC && i < 8; i++) {
121 sprintf(&data_hex[i*2],
"%02X", RxData[i]);
123 data_hex[RxHeader->DLC * 2] =
'\0';
127 RxHeader->StdId, RxHeader->DLC, data_hex);
152 if (msg->
id == can_message->
header.StdId || msg->
id == can_message->
header.ExtId) {
176 uint64_t raw_data = 0;
177 for (
int i = signal->
start_bit; i < signal->start_bit + signal->
length; i++) {
178 raw_data |= ((can_message->
data[i / 8] >> (i % 8)) & 1) << (i - signal->
start_bit);
182 if (signal->
endian == 1) {
184 uint64_t reversed_data = 0;
185 for (
int i = 0; i < signal->
length; i++) {
186 reversed_data |= ((raw_data >> i) & 1) << (signal->
length - i - 1);
188 raw_data = reversed_data;
194 raw_data = (raw_data << (64 - signal->
length)) >> (64 - signal->
length);
203 for (
int i = 0; i <
MAX_BUS; i++) {
int init_CANBus(CANBus bus)
Initializes the CANBus struct.
CAN_MessageList can_messages[MAX_BUS]
void parseSignals(CAN_Message_Template *message, CAN_Message *can_message)
Parses signals in a CAN message.
void parseSignal(CAN_Signal_Template *signal, CAN_Signal *can_signal, CAN_Message *can_message)
Parses a CAN signal.
void parseMessage(CAN_MessageList *messages, CAN_Message *can_message)
Parses a CAN message.
int add_message(CANBus bus, CAN_Message_Template message)
Adds a message to the CAN message list.
int add_message_lop(CANBus bus, int id, int dlc, int ide, int rtr, const char *name, const char *sender, int signal_count, CAN_Signal_Template *signals)
Adds a message to the CAN message list by passing in the individual message parameters hence "LOP" (L...
int send_CAN_message(CANBus bus, CANProtocol protocol, uint32_t id, uint8_t *data, uint8_t len)
Sends a CAN message.
void receive_CAN_message(CAN_RxHeaderTypeDef *RxHeader, uint8_t *RxData, CANBus bus)
Receives a CAN message.
int load_dbc_file(CANBus bus, const unsigned char *filename)
Loads a DBC file into the CAN database. Makes the messages and signals and stores them in the list.
void print_CAN_Messages_Lists()
Prints the CAN message list.
#define ANSI_COLOR_YELLOW
int parseDbcFile(CAN_MessageList *messages, const unsigned char *dbc_contents)
Parses a DBC (CAN database) file and populates the DBC structure.
void print_CAN_MessageList(const CAN_MessageList *messages)
Prints the contents of a CAN message list (aka DBC file).
static TelemetrySignal signals[MAX_TELEMETRY_SIGNALS]
This file contains the headers of the interrupt handlers.
int send_CAN_message_helper(CANBus bus, CAN_TxHeaderTypeDef *TxHeader, uint8_t *data)
CAN_Message_Template messages[MAX_MESSAGES]
char sender[MAX_NODE_NAME_LENGTH]
CAN_Signal_Template signals[MAX_SIGNALS]
char name[MAX_MESSAGE_NAME_LENGTH]
CAN_Message_Template * template
CAN_RxHeaderTypeDef header
CAN_Signal_Template * template