firmware
IEM Firmware Documentation
Loading...
Searching...
No Matches
can_rtos.h
Go to the documentation of this file.
1
7
8#ifndef CAN_RTOS_H
9#define CAN_RTOS_H
10
11#include <stdint.h>
12#include <stdbool.h>
13
14#include "iem_types.h"
15
16#include "FreeRTOS.h"
17#include "task.h"
18#include "timers.h"
19
20#include "stm32h7xx_hal.h"
21
22
27enum __attribute__((packed)) can_bus { CAN_1 = 0U, CAN_2, CAN_3, CAN_BUS_MAX };
28
29#define CAN_BUS_CNT ((uint8_t)CAN_BUS_MAX)
30#define IS_CAN_BUS(bus) ((bus) >= 0 && (bus) < CAN_BUS_MAX)
31
32#define CANLIB_TIMEOUT_INVALID UINT32_MAX
33
34#define CAN_DATA_MAX 8U
35
39typedef struct {
40 uint32_t id;
41 uint8_t length;
43 bool is_ext;
44
46} CAN_Msg_t;
47
48typedef void (*CAN_Rx_Handler_t)(CAN_Msg_t* msg_ptr);
49
55
56
57void canlib_tx_task_init(Task_Init_t* init_ptr, enum can_bus bus, FDCAN_HandleTypeDef* hfdcan, uint16_t tx_queue_length);
59 Task_Init_t* init_ptr, enum can_bus bus, FDCAN_HandleTypeDef* hfdcan, uint32_t rx_location, CAN_Rx_Handler_t handler);
60void canlib_start(void);
61
63 enum can_bus bus, FDCAN_HandleTypeDef* hfdcan, uint32_t timeout_ids_ptr[], unsigned timeout_ids_cnt);
65
66uint32_t canlib_get_msg_timeout(enum can_bus bus, uint32_t msg_id);
67
68bool canlib_tx_generic(const CAN_Msg_t* msg_ptr, TickType_t block_time, bool is_critical);
69
70static __always_inline bool canlib_tx(const CAN_Msg_t* msg_ptr, TickType_t block_time) {
71 return canlib_tx_generic(msg_ptr, block_time, false);
72}
73
74static __always_inline bool canlib_tx_critical(const CAN_Msg_t* msg_ptr, TickType_t block_time) {
75 return canlib_tx_generic(msg_ptr, block_time, true);
76}
77
78bool canlib_is_bus_ok(enum can_bus bus);
80
81#endif
#define __always_inline
Definition can_codec_utils.h:18
#define CAN_DATA_MAX
Definition can_rtos.h:34
TimerHandle_t canlib_register_scheduled_msgs(struct canlib_scheduled_msg_params *params_ptr)
Registers an array of CAN messages for periodic transmission on a set interval with a FreeRTOS softwa...
Definition can_rtos.c:297
can_bus
CAN bus ID enum.
Definition can_rtos.h:27
bool canlib_tx_generic(const CAN_Msg_t *msg_ptr, TickType_t block_time, bool is_critical)
Queues a CAN message for transmission.
Definition can_rtos.c:283
void canlib_rx_task_init(Task_Init_t *init_ptr, enum can_bus bus, FDCAN_HandleTypeDef *hfdcan, uint32_t rx_location, CAN_Rx_Handler_t handler)
Initializes a FreeRTOS CAN receive task for bus that receives messages from rx_location....
Definition can_rtos.c:141
void(* CAN_Rx_Handler_t)(CAN_Msg_t *msg_ptr)
Definition can_rtos.h:48
static __always_inline bool canlib_tx_critical(const CAN_Msg_t *msg_ptr, TickType_t block_time)
Definition can_rtos.h:74
void canlib_register_timeout_ids(enum can_bus bus, FDCAN_HandleTypeDef *hfdcan, uint32_t timeout_ids_ptr[], unsigned timeout_ids_cnt)
Registers CAN messages for timeout tracking by the CAN receive task for a CAN bus (also sorts the arr...
Definition can_rtos.c:316
static __always_inline bool canlib_tx(const CAN_Msg_t *msg_ptr, TickType_t block_time)
Definition can_rtos.h:70
void canlib_start(void)
Starts all STM32 FDCAN peripherals that were registered to a CAN transmit or receive task.
Definition can_rtos.c:172
bool canlib_is_bus_ok(enum can_bus bus)
Checks for protocol errors on bus.
Definition can_rtos.c:404
void canlib_tx_task_init(Task_Init_t *init_ptr, enum can_bus bus, FDCAN_HandleTypeDef *hfdcan, uint16_t tx_queue_length)
Initializes a FreeRTOS CAN transmit task for bus and creates a transmit queue with capacity tx_queue_...
Definition can_rtos.c:109
uint32_t canlib_get_msg_timeout(enum can_bus bus, uint32_t msg_id)
Get the time since a message with ID msg_id was received on bus. If the CAN ID wasn't registered with...
Definition can_rtos.c:360
@ CAN_BUS_MAX
Definition can_rtos.h:27
@ CAN_1
Definition can_rtos.h:27
@ CAN_2
Definition can_rtos.h:27
@ CAN_3
Definition can_rtos.h:27
uint16_t TickType_t
Definition portmacro.h:63
Definition can_rtos.h:39
bool is_ext
Definition can_rtos.h:43
uint8_t length
Definition can_rtos.h:41
uint8_t data[CAN_DATA_MAX]
Definition can_rtos.h:45
uint32_t id
Definition can_rtos.h:40
enum can_bus bus
Definition can_rtos.h:42
Definition can_rtos.h:50
TickType_t period
Definition can_rtos.h:53
CAN_Msg_t * msgs_ptr
Definition can_rtos.h:51
uint8_t msg_cnt
Definition can_rtos.h:52
struct tmrTimerControl * TimerHandle_t
Definition timers.h:78