caffeine-hal 0.6.6
A Header-Defined Interface c library, it provides the hal layer for the Caffeine framework
Loading...
Searching...
No Matches
cfn_hal_can.h
Go to the documentation of this file.
1
26#ifndef CAFFEINE_HAL_HAL_CAN_H
27#define CAFFEINE_HAL_HAL_CAN_H
28
29#ifdef __cplusplus
30extern "C"
31{
32#endif
33
34/* Includes ---------------------------------------------------------*/
35#include "cfn_hal.h"
36#include "cfn_hal_base.h"
37#include "cfn_hal_gpio.h"
38#include "cfn_hal_types.h"
39
40/* Defines ----------------------------------------------------------*/
41
42/* Types Enums ------------------------------------------------------*/
43
53
63
64/* Types Structs ----------------------------------------------------*/
65
69typedef struct
70{
71 uint32_t id;
72 uint8_t dlc;
73 uint8_t data[8];
75
79typedef struct
80{
81 uint32_t baudrate;
82 void *custom;
84
95
99typedef struct
100{
101 uint32_t filter_id;
102 uint32_t filter_mask;
104
105typedef struct cfn_hal_can_s cfn_hal_can_t;
107
117 cfn_hal_can_t *driver, uint32_t event_mask, uint32_t error_mask, cfn_hal_can_msg_t *msg, void *user_arg);
118
123{
125
126 /* CAN Specific Extensions */
127 cfn_hal_error_code_t (*transmit)(cfn_hal_can_t *driver, const cfn_hal_can_msg_t *msg, uint32_t timeout);
128 cfn_hal_error_code_t (*receive)(cfn_hal_can_t *driver, cfn_hal_can_msg_t *msg, uint32_t timeout);
130};
131
133
135/* Functions inline ------------------------------------------------- */
137 uint32_t peripheral_id,
138 struct cfn_hal_clock_s *clock,
139 void *dependency,
140 const cfn_hal_can_api_t *api,
141 const cfn_hal_can_phy_t *phy,
142 const cfn_hal_can_config_t *config,
143 cfn_hal_can_callback_t callback,
144 void *user_arg)
145{
147 driver, CFN_HAL_PERIPHERAL_TYPE_CAN, peripheral_id, clock, dependency, api, phy, config, callback, user_arg);
148}
149
157 const cfn_hal_can_config_t *config)
158{
159 if (driver == NULL || config == NULL)
160 {
162 }
163
164 if (config->baudrate == 0)
165 {
167 }
168
169 return cfn_hal_base_config_validate(&driver->base, CFN_HAL_PERIPHERAL_TYPE_CAN, config);
170}
171
178{
179 if (!driver)
180 {
182 }
183 driver->base.vmt = (const struct cfn_hal_api_base_s *) driver->api;
184 cfn_hal_error_code_t error = cfn_hal_can_config_validate(driver, driver->config);
185 if (error != CFN_HAL_ERROR_OK)
186 {
187 return error;
188 }
189 return cfn_hal_base_init(&driver->base, CFN_HAL_PERIPHERAL_TYPE_CAN);
190}
191
198{
199 if (!driver)
200 {
202 }
204}
205
213{
214 if (!driver)
215 {
217 }
219 if (error != CFN_HAL_ERROR_OK)
220 {
221 return error;
222 }
223 {
224 driver->config = config;
225 }
226 return cfn_hal_base_config_set(&driver->base, CFN_HAL_PERIPHERAL_TYPE_CAN, (const void *) config);
227}
228
236{
237 if (!driver || !config || !driver->config)
238 {
240 }
241 *config = *(driver->config);
242 return CFN_HAL_ERROR_OK;
243}
244
253 const cfn_hal_can_callback_t callback,
254 void *user_arg)
255{
256 if (!driver)
257 {
259 }
260 {
261 driver->cb = callback;
262 driver->cb_user_arg = user_arg;
263 }
265 &driver->base, CFN_HAL_PERIPHERAL_TYPE_CAN, (cfn_hal_callback_t) callback, user_arg);
266}
267
282
290{
291 if (!driver)
292 {
294 }
295 return cfn_hal_base_event_enable(&driver->base, CFN_HAL_PERIPHERAL_TYPE_CAN, event_mask);
296}
297
305{
306 if (!driver)
307 {
309 }
310 return cfn_hal_base_event_disable(&driver->base, CFN_HAL_PERIPHERAL_TYPE_CAN, event_mask);
311}
312
320{
321 if (!driver)
322 {
324 }
325 return cfn_hal_base_event_get(&driver->base, CFN_HAL_PERIPHERAL_TYPE_CAN, event_mask);
326}
327
335{
336 if (!driver)
337 {
339 }
340 return cfn_hal_base_error_enable(&driver->base, CFN_HAL_PERIPHERAL_TYPE_CAN, error_mask);
341}
342
350{
351 if (!driver)
352 {
354 }
355 return cfn_hal_base_error_disable(&driver->base, CFN_HAL_PERIPHERAL_TYPE_CAN, error_mask);
356}
357
365{
366 if (!driver)
367 {
369 }
370 return cfn_hal_base_error_get(&driver->base, CFN_HAL_PERIPHERAL_TYPE_CAN, error_mask);
371}
372
373/* CAN Specific Functions ------------------------------------------- */
374
383 const cfn_hal_can_msg_t *msg,
384 uint32_t timeout)
385{
387 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_HAL_PERIPHERAL_TYPE_CAN, transmit, driver, error, msg, timeout);
388 return error;
389}
390
399{
401 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_HAL_PERIPHERAL_TYPE_CAN, receive, driver, error, msg, timeout);
402 return error;
403}
404
418 const cfn_hal_can_config_t *config,
419 const cfn_hal_can_phy_t *phy,
420 struct cfn_hal_clock_s *clock,
421 void *dependency,
422 cfn_hal_can_callback_t callback,
423 void *user_arg);
425#ifdef __cplusplus
426}
427#endif
428
429#endif // CAFFEINE_HAL_HAL_CAN_H
Core Hardware Abstraction Layer definitions and macros.
#define CFN_HAL_CHECK_AND_CALL_FUNC_VARG(expected_peripheral_type, func, driver, result,...)
Definition cfn_hal.h:134
#define CFN_HAL_INLINE
Macro for inlining HAL wrapper functions. Can be overridden with attribute((always_inline)) for perfo...
Definition cfn_hal.h:61
#define CFN_HAL_BIT(x)
Definition cfn_hal.h:79
#define CFN_HAL_CREATE_DRIVER_TYPE(prefix, config_type, api_type, phy_type, cb_type)
Definition cfn_hal.h:102
Base driver Hardware Abstraction Layer declarations.
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_error_disable(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, uint32_t error_mask)
Generic error disable for any driver. Deactivates exception-flow hardware triggers based on the provi...
Definition cfn_hal_base_impl.h:436
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_callback_register(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, cfn_hal_callback_t callback, void *user_arg)
Generic callback registration for any driver.
Definition cfn_hal_base_impl.h:254
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_error_enable(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, uint32_t error_mask)
Generic error enable for any driver. Activates exception-flow hardware triggers based on the provided...
Definition cfn_hal_base_impl.h:411
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_event_enable(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, uint32_t event_mask)
Generic event enable for any driver. Activates nominal hardware triggers based on the provided mask.
Definition cfn_hal_base_impl.h:331
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_event_get(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, uint32_t *event_mask)
Generic event status getter for any driver. Retrieves the current nominal hardware triggers/flags.
Definition cfn_hal_base_impl.h:386
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_error_get(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, uint32_t *error_mask)
Generic error status getter for any driver. Retrieves current exception-flow hardware flags/errors.
Definition cfn_hal_base_impl.h:461
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_config_set(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, const void *config)
Generic configuration setter for any driver.
Definition cfn_hal_base_impl.h:196
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_power_state_set(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, cfn_hal_power_state_t state)
Generic power state transition for any driver.
Definition cfn_hal_base_impl.h:279
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_deinit(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type)
Generic deinitialization for any driver. Returns the driver to the CONSTRUCTED state and releases boa...
Definition cfn_hal_base_impl.h:144
#define CFN_HAL_VMT_CHECK(api_struct_type)
Compile-time check to ensure a peripheral API struct is compatible with the base layer....
Definition cfn_hal_base.h:91
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_init(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type)
Generic initialization for any driver. Handles board-level hooks, type validation,...
Definition cfn_hal_base_impl.h:85
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_config_validate(const cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, const void *config)
Generic validation for a configuration.
Definition cfn_hal_base_impl.h:234
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_event_disable(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, uint32_t event_mask)
Generic event disable for any driver. Deactivates nominal hardware triggers based on the provided mas...
Definition cfn_hal_base_impl.h:361
#define CFN_HAL_POPULATE_DRIVER( driver_ptr, periph_type, periph_id, clock_ptr, dep_ptr, api_ptr, phy_ptr, cfg_ptr, cb_func, cb_arg)
Standardizes the population of a peripheral driver structure. This macro ensures that the base driver...
Definition cfn_hal_base_impl.h:45
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_can_config_get(cfn_hal_can_t *driver, cfn_hal_can_config_t *config)
Gets the current CAN configuration.
Definition cfn_hal_can.h:235
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_can_error_disable(cfn_hal_can_t *driver, uint32_t error_mask)
Disables one or more CAN exception errors.
Definition cfn_hal_can.h:349
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_can_power_state_set(cfn_hal_can_t *driver, cfn_hal_power_state_t state)
Sets the CAN power state.
Definition cfn_hal_can.h:274
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_can_callback_register(cfn_hal_can_t *driver, const cfn_hal_can_callback_t callback, void *user_arg)
Registers a callback for CAN events and errors.
Definition cfn_hal_can.h:252
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_can_event_disable(cfn_hal_can_t *driver, uint32_t event_mask)
Disables one or more CAN nominal events.
Definition cfn_hal_can.h:304
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_can_event_enable(cfn_hal_can_t *driver, uint32_t event_mask)
Enables one or more CAN nominal events.
Definition cfn_hal_can.h:289
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_can_config_validate(const cfn_hal_can_t *driver, const cfn_hal_can_config_t *config)
Validates the CAN configuration.
Definition cfn_hal_can.h:156
CFN_HAL_INLINE void cfn_hal_can_populate(cfn_hal_can_t *driver, uint32_t peripheral_id, struct cfn_hal_clock_s *clock, void *dependency, const cfn_hal_can_api_t *api, const cfn_hal_can_phy_t *phy, const cfn_hal_can_config_t *config, cfn_hal_can_callback_t callback, void *user_arg)
Definition cfn_hal_can.h:136
cfn_hal_error_code_t cfn_hal_can_construct(cfn_hal_can_t *driver, const cfn_hal_can_config_t *config, const cfn_hal_can_phy_t *phy, struct cfn_hal_clock_s *clock, void *dependency, cfn_hal_can_callback_t callback, void *user_arg)
Definition cfn_hal_can_port.c:68
cfn_hal_can_error_t
CAN exception error flags.
Definition cfn_hal_can.h:58
@ CFN_HAL_CAN_ERROR_NONE
Definition cfn_hal_can.h:59
@ CFN_HAL_CAN_ERROR_BUS_OFF
Definition cfn_hal_can.h:60
@ CFN_HAL_CAN_ERROR_GENERAL
Definition cfn_hal_can.h:61
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_can_add_filter(cfn_hal_can_t *driver, const cfn_hal_can_filter_t *filter)
Adds a message filter to the CAN peripheral.
Definition cfn_hal_can.h:411
struct cfn_hal_can_s cfn_hal_can_t
Definition cfn_hal_can.h:105
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_can_receive(cfn_hal_can_t *driver, cfn_hal_can_msg_t *msg, uint32_t timeout)
Receives a CAN message (blocking).
Definition cfn_hal_can.h:398
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_can_event_get(cfn_hal_can_t *driver, uint32_t *event_mask)
Retrieves the current CAN nominal event status.
Definition cfn_hal_can.h:319
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_can_config_set(cfn_hal_can_t *driver, const cfn_hal_can_config_t *config)
Sets the CAN configuration.
Definition cfn_hal_can.h:212
cfn_hal_error_code_t cfn_hal_can_destruct(cfn_hal_can_t *driver)
Definition cfn_hal_can_port.c:84
cfn_hal_can_event_t
CAN nominal event flags.
Definition cfn_hal_can.h:48
@ CFN_HAL_CAN_EVENT_RX_READY
Definition cfn_hal_can.h:51
@ CFN_HAL_CAN_EVENT_TX_COMPLETE
Definition cfn_hal_can.h:50
@ CFN_HAL_CAN_EVENT_NONE
Definition cfn_hal_can.h:49
void(* cfn_hal_can_callback_t)(cfn_hal_can_t *driver, uint32_t event_mask, uint32_t error_mask, cfn_hal_can_msg_t *msg, void *user_arg)
CAN callback signature.
Definition cfn_hal_can.h:116
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_can_deinit(cfn_hal_can_t *driver)
Deinitializes the CAN driver.
Definition cfn_hal_can.h:197
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_can_error_get(cfn_hal_can_t *driver, uint32_t *error_mask)
Retrieves the current CAN exception error status.
Definition cfn_hal_can.h:364
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_can_transmit(cfn_hal_can_t *driver, const cfn_hal_can_msg_t *msg, uint32_t timeout)
Transmits a CAN message (blocking).
Definition cfn_hal_can.h:382
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_can_error_enable(cfn_hal_can_t *driver, uint32_t error_mask)
Enables one or more CAN exception errors.
Definition cfn_hal_can.h:334
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_can_init(cfn_hal_can_t *driver)
Initializes the CAN driver.
Definition cfn_hal_can.h:177
General Purpose Input/Output (GPIO) HAL API.
Common type definitions and enums for the HAL.
void(* cfn_hal_callback_t)(void)
Generic function pointer for HAL callbacks. Used as a standard-compliant carrier in the base layer.
Definition cfn_hal_types.h:98
enum cfn_hal_error_codes cfn_hal_error_code_t
cfn_hal_power_state_t
Definition cfn_hal_types.h:156
#define CFN_HAL_PERIPHERAL_TYPE_CAN
Definition cfn_hal_types.h:121
@ CFN_HAL_ERROR_OK
Definition cfn_hal_types.h:50
@ CFN_HAL_ERROR_BAD_PARAM
Definition cfn_hal_types.h:53
@ CFN_HAL_ERROR_BAD_CONFIG
Definition cfn_hal_types.h:60
Base API structure for all peripheral drivers. Every peripheral-specific API struct MUST have this as...
Definition cfn_hal_base.h:63
CAN Virtual Method Table (VMT).
Definition cfn_hal_can.h:123
cfn_hal_error_code_t(* add_filter)(cfn_hal_can_t *driver, const cfn_hal_can_filter_t *filter)
Definition cfn_hal_can.h:129
cfn_hal_error_code_t(* receive)(cfn_hal_can_t *driver, cfn_hal_can_msg_t *msg, uint32_t timeout)
Definition cfn_hal_can.h:128
cfn_hal_error_code_t(* transmit)(cfn_hal_can_t *driver, const cfn_hal_can_msg_t *msg, uint32_t timeout)
Definition cfn_hal_can.h:127
cfn_hal_api_base_t base
Definition cfn_hal_can.h:124
CAN configuration structure.
Definition cfn_hal_can.h:80
void * custom
Definition cfn_hal_can.h:82
uint32_t baudrate
Definition cfn_hal_can.h:81
CAN filter configuration.
Definition cfn_hal_can.h:100
uint32_t filter_id
Definition cfn_hal_can.h:101
uint32_t filter_mask
Definition cfn_hal_can.h:102
CAN message structure.
Definition cfn_hal_can.h:70
uint8_t dlc
Definition cfn_hal_can.h:72
uint32_t id
Definition cfn_hal_can.h:71
CAN hardware physical mapping.
Definition cfn_hal_can.h:89
void * user_arg
Definition cfn_hal_can.h:93
cfn_hal_gpio_pin_handle_t * rx
Definition cfn_hal_can.h:92
cfn_hal_gpio_pin_handle_t * tx
Definition cfn_hal_can.h:91
void * instance
Definition cfn_hal_can.h:90
Lightweight handle to a specific GPIO pin. Used by other peripherals to reference physical pins.
Definition cfn_hal_gpio.h:173