Vehicle Control Unit 0.01
This is the c library for controlling the car.
Loading...
Searching...
No Matches
Can.h
Go to the documentation of this file.
1#ifndef __RENSSELAERMOTORSPORT_CAN_H__
2#define __RENSSELAERMOTORSPORT_CAN_H__
3
4
5#ifndef TEST_MODE
6#include "stm32f7xx_hal.h"
7#endif
8
9#include <stdint.h>
10
11/*******************************************************************/
12
13// Signals
14#define MAX_SIGNALS 8
15#define MAX_SIGNAL_NAME_LENGTH 32
16#define MAX_UNIT_NAME_LENGTH 32
17#define MAX_NODE_NAME_LENGTH 32
18
19typedef struct CAN_Signal_Template {
22 int length;
23 int endian;
25 float scale;
26 float offset;
27 float min;
28 float max;
32
33typedef struct CAN_Signal {
34 int value;
37
38/*******************************************************************/
39
40// Messages
41#define MAX_MESSAGE_NAME_LENGTH 32
42
43#ifdef TEST_MODE
44// define a dummy CAN_RxHeaderTypeDef
45typedef struct CAN_RxHeaderTypeDef {
46 uint32_t StdId;
47 uint32_t ExtId;
48 uint32_t IDE;
49 uint32_t RTR;
50 uint32_t DLC;
51 uint32_t FMI;
52 uint32_t FIFONumber;
53} CAN_RxHeaderTypeDef;
54
55// define a dummy CAN_TxHeaderTypeDef
56typedef struct CAN_TxHeaderTypeDef {
57 uint32_t StdId;
58 uint32_t ExtId;
59 uint32_t IDE;
60 uint32_t RTR;
61 uint32_t DLC;
62 uint32_t TransmitGlobalTime;
63} CAN_TxHeaderTypeDef;
64
65// define STM32 CAN constants
66#define CAN_ID_STD 0x00
67#define CAN_ID_EXT 0x04
68#define CAN_RTR_DATA 0x00
69#define CAN_RTR_REMOTE 0x02
70#endif
71
72typedef struct CAN_Message_Template {
73 int id;
74 int dlc; // Data Length Code
75 int ide; // Identifier Extension
76 int rtr; // Remote Transmission Request
83
84typedef struct CAN_Message {
85 CAN_RxHeaderTypeDef header;
86 uint8_t data[8];
88 CAN_Signal signals[]; // TODO:This should not be hardcoded, find way to dynamically allocate
90
91/*******************************************************************/
92
93// CAN
94#define MAX_BUS 2
95#define MAX_MESSAGES 128
96
97// CANBus enum
98typedef enum CANBus {
99 CAN_1 = 0,
100 CAN_2 = 1
102
103// CAN protocol enum
104typedef enum CANProtocol {
105 CAN_2A = 0, // Standard CAN w/ 11-bit ID
106 CAN_2B = 1, // Standard CAN w/ 29-bit ID
107 //CAN_FD = 2, // CAN FD w/ 11-bit ID
108 //CAN_FD_BRS = 3, // CAN FD w/ 29-bit ID
110
111// Baudrate enum
112typedef enum CANBaudrate {
113 CAN_100KBPS = 100000,
114 CAN_125KBPS = 125000,
115 CAN_250KBPS = 250000,
116 CAN_500KBPS = 500000,
117 CAN_1MBPS = 1000000,
119
120// CAN message list per length of CANBus enum
121typedef struct CAN_MessageList{
126
127// function prototypes
128
135int init_CANBus(CANBus bus);
136
144int load_dbc_file(CANBus bus, const unsigned char* filename);
145
153int add_message(CANBus bus, CAN_Message_Template message);
154
170int 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);
171
182int send_CAN_message(CANBus bus, CANProtocol protocol, uint32_t id, uint8_t* data, uint8_t len);
183
191void receive_CAN_message(CAN_RxHeaderTypeDef* header, uint8_t* data, CANBus bus);
192
199void parseMessage(CAN_MessageList* messages, CAN_Message* can_message);
200
207void parseSignals(CAN_Message_Template* message, CAN_Message* can_message);
208
216void parseSignal(CAN_Signal_Template* signal, CAN_Signal* can_signal, CAN_Message* can_message);
217
218
223#endif // RENSSELAERMOTORSPORT_CAN_H
CANBaudrate
Definition: Can.h:112
@ CAN_500KBPS
Definition: Can.h:116
@ CAN_125KBPS
Definition: Can.h:114
@ CAN_1MBPS
Definition: Can.h:117
@ CAN_100KBPS
Definition: Can.h:113
@ CAN_250KBPS
Definition: Can.h:115
#define MAX_NODE_NAME_LENGTH
Definition: Can.h:17
#define MAX_MESSAGES
Definition: Can.h:95
int init_CANBus(CANBus bus)
Initializes the CANBus struct.
Definition: Can.c:17
#define MAX_UNIT_NAME_LENGTH
Definition: Can.h:16
#define MAX_SIGNAL_NAME_LENGTH
Definition: Can.h:15
void parseSignals(CAN_Message_Template *message, CAN_Message *can_message)
Parses signals in a CAN message.
Definition: Can.c:150
void parseSignal(CAN_Signal_Template *signal, CAN_Signal *can_signal, CAN_Message *can_message)
Parses a CAN signal.
Definition: Can.c:160
void parseMessage(CAN_MessageList *messages, CAN_Message *can_message)
Parses a CAN message.
Definition: Can.c:135
#define MAX_MESSAGE_NAME_LENGTH
Definition: Can.h:41
CANBus
Definition: Can.h:98
@ CAN_1
Definition: Can.h:99
@ CAN_2
Definition: Can.h:100
int add_message(CANBus bus, CAN_Message_Template message)
Adds a message to the CAN message list.
Definition: Can.c:48
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...
Definition: Can.c:55
int send_CAN_message(CANBus bus, CANProtocol protocol, uint32_t id, uint8_t *data, uint8_t len)
Sends a CAN message.
Definition: Can.c:79
#define MAX_SIGNALS
Definition: Can.h:14
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.
Definition: Can.c:25
void receive_CAN_message(CAN_RxHeaderTypeDef *header, uint8_t *data, CANBus bus)
Receives a CAN message.
Definition: Can.c:112
CANProtocol
Definition: Can.h:104
@ CAN_2A
Definition: Can.h:105
@ CAN_2B
Definition: Can.h:106
void print_CAN_Messages_Lists()
Prints the CAN message list.
Definition: Can.c:190
CANBus bus
Definition: Can.h:122
int num_messages
Definition: Can.h:124
int signal_count
Definition: Can.h:80
int payload_length
Definition: Can.h:81
CAN_RxHeaderTypeDef header
Definition: Can.h:85
char unit[MAX_UNIT_NAME_LENGTH]
Definition: Can.h:29
char reciever[MAX_NODE_NAME_LENGTH]
Definition: Can.h:30
float offset
Definition: Can.h:26
float scale
Definition: Can.h:25
char name[MAX_SIGNAL_NAME_LENGTH]
Definition: Can.h:20
Definition: Can.h:33
int value
Definition: Can.h:34