26#ifndef CAFFEINE_HAL_HAL_UART_H
27#define CAFFEINE_HAL_HAL_UART_H
59#define CFN_HAL_UART_FLAG_CONTINUOUS_RX CFN_HAL_BIT(0)
219 cfn_hal_uart_t *driver, uint8_t *data,
size_t max_bytes,
size_t *received_bytes, uint32_t timeout);
230 uint32_t peripheral_id,
231 struct cfn_hal_clock_s *clock,
251 if (driver == NULL || config == NULL)
319 driver->config = config;
332 if (!driver || !config || !driver->config)
336 *config = *(driver->config);
356 driver->cb = callback;
357 driver->cb_user_arg = user_arg;
585 cfn_hal_uart_t *driver, uint8_t *data,
size_t max_bytes,
size_t *received_bytes, uint32_t timeout)
625 struct cfn_hal_clock_s *clock,
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_CHECK_AND_CALL_FUNC(expected_peripheral_type, func, driver, result)
Definition cfn_hal.h:114
#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
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
#define CFN_HAL_PERIPHERAL_TYPE_UART
Definition cfn_hal_types.h:131
enum cfn_hal_error_codes cfn_hal_error_code_t
cfn_hal_power_state_t
Definition cfn_hal_types.h:156
@ 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
cfn_hal_uart_config_flow_ctrl_t
UART hardware flow control configuration.
Definition cfn_hal_uart.h:115
@ CFN_HAL_UART_CONFIG_FLOW_CTRL_NONE
Definition cfn_hal_uart.h:116
@ CFN_HAL_UART_CONFIG_FLOW_CTRL_CTS
Definition cfn_hal_uart.h:117
@ CFN_HAL_UART_CONFIG_FLOW_CTRL_RTS_CTS
Definition cfn_hal_uart.h:119
@ CFN_HAL_UART_CONFIG_FLOW_CTRL_MAX
Definition cfn_hal_uart.h:121
@ CFN_HAL_UART_CONFIG_FLOW_CTRL_RTS
Definition cfn_hal_uart.h:118
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_uart_rx_dma(cfn_hal_uart_t *driver, uint8_t *data, size_t nbr_of_bytes)
Receives data using DMA (non-blocking).
Definition cfn_hal_uart.h:616
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_uart_error_get(cfn_hal_uart_t *driver, uint32_t *error_mask)
Retrieves the current UART exception error status.
Definition cfn_hal_uart.h:459
cfn_hal_uart_config_data_len_t
UART data length configuration.
Definition cfn_hal_uart.h:101
@ CFN_HAL_UART_CONFIG_DATA_LEN_8
Definition cfn_hal_uart.h:105
@ CFN_HAL_UART_CONFIG_DATA_LEN_5
Definition cfn_hal_uart.h:102
@ CFN_HAL_UART_CONFIG_DATA_LEN_9
Definition cfn_hal_uart.h:106
@ CFN_HAL_UART_CONFIG_DATA_LEN_MAX
Definition cfn_hal_uart.h:108
@ CFN_HAL_UART_CONFIG_DATA_LEN_7
Definition cfn_hal_uart.h:104
@ CFN_HAL_UART_CONFIG_DATA_LEN_6
Definition cfn_hal_uart.h:103
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_uart_rx_n_irq(cfn_hal_uart_t *driver, uint8_t *data, size_t nbr_of_bytes)
Starts UART data reception using interrupts to receive exactly N bytes.
Definition cfn_hal_uart.h:506
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_uart_rx_to_idle(cfn_hal_uart_t *driver, uint8_t *data, size_t max_bytes, size_t *received_bytes, uint32_t timeout)
Receives data until an idle condition or max bytes reached.
Definition cfn_hal_uart.h:584
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_uart_config_set(cfn_hal_uart_t *driver, const cfn_hal_uart_config_t *config)
Sets the UART configuration.
Definition cfn_hal_uart.h:307
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_uart_deinit(cfn_hal_uart_t *driver)
Deinitializes the UART driver.
Definition cfn_hal_uart.h:292
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_uart_rx_irq_abort(cfn_hal_uart_t *driver)
Aborts an ongoing interrupt-based reception.
Definition cfn_hal_uart.h:530
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_uart_tx_polling(cfn_hal_uart_t *driver, const uint8_t *data, size_t nbr_of_bytes, uint32_t timeout)
Transmits data using polling (blocking).
Definition cfn_hal_uart.h:545
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_uart_rx_polling(cfn_hal_uart_t *driver, uint8_t *data, size_t nbr_of_bytes, uint32_t timeout)
Receives data using polling (blocking).
Definition cfn_hal_uart.h:564
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_uart_config_validate(const cfn_hal_uart_t *driver, const cfn_hal_uart_config_t *config)
Validates the UART configuration.
Definition cfn_hal_uart.h:248
cfn_hal_error_code_t cfn_hal_uart_construct(cfn_hal_uart_t *driver, const cfn_hal_uart_config_t *config, const cfn_hal_uart_phy_t *phy, struct cfn_hal_clock_s *clock, void *dependency, cfn_hal_uart_callback_t callback, void *user_arg)
Definition cfn_hal_uart_port.c:97
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_uart_config_get(cfn_hal_uart_t *driver, cfn_hal_uart_config_t *config)
Gets the current UART configuration.
Definition cfn_hal_uart.h:330
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_uart_event_disable(cfn_hal_uart_t *driver, uint32_t event_mask)
Disables one or more UART nominal events.
Definition cfn_hal_uart.h:399
cfn_hal_error_code_t cfn_hal_uart_destruct(cfn_hal_uart_t *driver)
Definition cfn_hal_uart_port.c:113
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_uart_event_enable(cfn_hal_uart_t *driver, uint32_t event_mask)
Enables one or more UART nominal events.
Definition cfn_hal_uart.h:384
struct cfn_hal_uart_s cfn_hal_uart_t
Definition cfn_hal_uart.h:181
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_uart_init(cfn_hal_uart_t *driver)
Initializes the UART driver.
Definition cfn_hal_uart.h:272
cfn_hal_uart_config_stop_bits_t
UART stop bits configuration.
Definition cfn_hal_uart.h:90
@ CFN_HAL_UART_CONFIG_STOP_ONE_BIT
Definition cfn_hal_uart.h:91
@ CFN_HAL_UART_CONFIG_STOP_MAX
Definition cfn_hal_uart.h:94
@ CFN_HAL_UART_CONFIG_STOP_TWO_BITS
Definition cfn_hal_uart.h:92
CFN_HAL_INLINE void cfn_hal_uart_populate(cfn_hal_uart_t *driver, uint32_t peripheral_id, struct cfn_hal_clock_s *clock, void *dependency, const cfn_hal_uart_api_t *api, const cfn_hal_uart_phy_t *phy, const cfn_hal_uart_config_t *config, cfn_hal_uart_callback_t callback, void *user_arg)
Definition cfn_hal_uart.h:229
cfn_hal_uart_config_parity_t
UART parity configuration.
Definition cfn_hal_uart.h:78
@ CFN_HAL_UART_CONFIG_PARITY_EVEN
Definition cfn_hal_uart.h:80
@ CFN_HAL_UART_CONFIG_PARITY_NONE
Definition cfn_hal_uart.h:79
@ CFN_HAL_UART_CONFIG_PARITY_MAX
Definition cfn_hal_uart.h:83
@ CFN_HAL_UART_CONFIG_PARITY_ODD
Definition cfn_hal_uart.h:81
void(* cfn_hal_uart_callback_t)(cfn_hal_uart_t *driver, uint32_t event_mask, uint32_t error_mask, uint8_t *data, size_t nbr_of_bytes, void *user_arg)
UART callback signature.
Definition cfn_hal_uart.h:193
cfn_hal_uart_config_direction_t
UART I/O operation mode.
Definition cfn_hal_uart.h:141
@ CFN_HAL_UART_CONFIG_DIRECTION_RX_ONLY
Definition cfn_hal_uart.h:144
@ CFN_HAL_UART_CONFIG_DIRECTION_TX_RX
Definition cfn_hal_uart.h:145
@ CFN_HAL_UART_CONFIG_DIRECTION_TX_ONLY
Definition cfn_hal_uart.h:143
@ CFN_HAL_UART_CONFIG_DIRECTION_NONE
Definition cfn_hal_uart.h:142
@ CFN_HAL_UART_CONFIG_DIRECTION_MAX
Definition cfn_hal_uart.h:147
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_uart_rx_irq(cfn_hal_uart_t *driver)
Starts UART data reception in continuous interrupt mode.
Definition cfn_hal_uart.h:518
cfn_hal_uart_error_t
UART exception error flags.
Definition cfn_hal_uart.h:65
@ CFN_HAL_UART_ERROR_FRAMING
Definition cfn_hal_uart.h:67
@ CFN_HAL_UART_ERROR_TIMEOUT
Definition cfn_hal_uart.h:70
@ CFN_HAL_UART_ERROR_PARITY
Definition cfn_hal_uart.h:68
@ CFN_HAL_UART_ERROR_GENERAL
Definition cfn_hal_uart.h:71
@ CFN_HAL_UART_ERROR_OVERRUN
Definition cfn_hal_uart.h:69
@ CFN_HAL_UART_ERROR_NONE
Definition cfn_hal_uart.h:66
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_uart_tx_irq(cfn_hal_uart_t *driver, const uint8_t *data, size_t nbr_of_bytes)
Starts UART data transmission using interrupts (non-blocking).
Definition cfn_hal_uart.h:477
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_uart_tx_dma(cfn_hal_uart_t *driver, const uint8_t *data, size_t nbr_of_bytes)
Transmits data using DMA (non-blocking).
Definition cfn_hal_uart.h:600
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_uart_tx_irq_abort(cfn_hal_uart_t *driver)
Aborts an ongoing interrupt-based transmission.
Definition cfn_hal_uart.h:491
cfn_hal_uart_config_mode_t
UART I/O operation mode.
Definition cfn_hal_uart.h:128
@ CFN_HAL_UART_CONFIG_MODE_DMA
Definition cfn_hal_uart.h:132
@ CFN_HAL_UART_CONFIG_MODE_BLOCKING
Definition cfn_hal_uart.h:130
@ CFN_HAL_UART_CONFIG_MODE_INTERRUPT
Definition cfn_hal_uart.h:131
@ CFN_HAL_UART_CONFIG_MODE_MAX
Definition cfn_hal_uart.h:134
@ CFN_HAL_UART_CONFIG_MODE_NONE
Definition cfn_hal_uart.h:129
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_uart_error_disable(cfn_hal_uart_t *driver, uint32_t error_mask)
Disables one or more UART exception errors.
Definition cfn_hal_uart.h:444
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_uart_event_get(cfn_hal_uart_t *driver, uint32_t *event_mask)
Retrieves the current UART nominal event status.
Definition cfn_hal_uart.h:414
cfn_hal_uart_event_t
UART nominal event flags.
Definition cfn_hal_uart.h:48
@ CFN_HAL_UART_EVENT_RX_READY
Definition cfn_hal_uart.h:51
@ CFN_HAL_UART_EVENT_TX_COMPLETE
Definition cfn_hal_uart.h:50
@ CFN_HAL_UART_EVENT_NONE
Definition cfn_hal_uart.h:49
@ CFN_HAL_UART_EVENT_BUS_IDLE
Definition cfn_hal_uart.h:52
@ CFN_HAL_UART_EVENT_RX_BYTE
Definition cfn_hal_uart.h:53
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_uart_power_state_set(cfn_hal_uart_t *driver, cfn_hal_power_state_t state)
Sets the UART power state.
Definition cfn_hal_uart.h:369
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_uart_callback_register(cfn_hal_uart_t *driver, const cfn_hal_uart_callback_t callback, void *user_arg)
Registers a callback for UART events and errors.
Definition cfn_hal_uart.h:347
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_uart_error_enable(cfn_hal_uart_t *driver, uint32_t error_mask)
Enables one or more UART exception errors.
Definition cfn_hal_uart.h:429
Base API structure for all peripheral drivers. Every peripheral-specific API struct MUST have this as...
Definition cfn_hal_base.h:63
Lightweight handle to a specific GPIO pin. Used by other peripherals to reference physical pins.
Definition cfn_hal_gpio.h:173
UART Virtual Method Table (VMT).
Definition cfn_hal_uart.h:204
cfn_hal_error_code_t(* rx_dma)(cfn_hal_uart_t *driver, uint8_t *data, size_t nbr_of_bytes)
Definition cfn_hal_uart.h:221
cfn_hal_error_code_t(* rx_irq_abort)(cfn_hal_uart_t *driver)
Definition cfn_hal_uart.h:212
cfn_hal_error_code_t(* rx_n_irq)(cfn_hal_uart_t *driver, uint8_t *data, size_t nbr_of_bytes)
Definition cfn_hal_uart.h:210
cfn_hal_error_code_t(* rx_to_idle)(cfn_hal_uart_t *driver, uint8_t *data, size_t max_bytes, size_t *received_bytes, uint32_t timeout)
Definition cfn_hal_uart.h:218
cfn_hal_error_code_t(* rx_polling)(cfn_hal_uart_t *driver, uint8_t *data, size_t nbr_of_bytes, uint32_t timeout)
Definition cfn_hal_uart.h:217
cfn_hal_error_code_t(* tx_polling)(cfn_hal_uart_t *driver, const uint8_t *data, size_t nbr_of_bytes, uint32_t timeout)
Definition cfn_hal_uart.h:213
cfn_hal_error_code_t(* tx_irq)(cfn_hal_uart_t *driver, const uint8_t *data, size_t nbr_of_bytes)
Definition cfn_hal_uart.h:208
cfn_hal_error_code_t(* tx_irq_abort)(cfn_hal_uart_t *driver)
Definition cfn_hal_uart.h:209
cfn_hal_error_code_t(* tx_dma)(cfn_hal_uart_t *driver, const uint8_t *data, size_t nbr_of_bytes)
Definition cfn_hal_uart.h:220
cfn_hal_api_base_t base
Definition cfn_hal_uart.h:205
cfn_hal_error_code_t(* rx_irq)(cfn_hal_uart_t *driver)
Definition cfn_hal_uart.h:211
UART configuration structure.
Definition cfn_hal_uart.h:168
cfn_hal_uart_config_direction_t direction
Definition cfn_hal_uart.h:177
cfn_hal_uart_config_parity_t parity
Definition cfn_hal_uart.h:175
bool echo
Definition cfn_hal_uart.h:169
cfn_hal_uart_config_flow_ctrl_t flow_ctrl
Definition cfn_hal_uart.h:176
cfn_hal_uart_config_mode_t read_mode
Definition cfn_hal_uart.h:171
cfn_hal_uart_config_mode_t write_mode
Definition cfn_hal_uart.h:172
cfn_hal_uart_config_data_len_t data_len
Definition cfn_hal_uart.h:173
cfn_hal_uart_config_stop_bits_t stop_bits
Definition cfn_hal_uart.h:174
uint32_t baudrate
Definition cfn_hal_uart.h:170
void * custom
Definition cfn_hal_uart.h:178
UART hardware physical mapping.
Definition cfn_hal_uart.h:155
cfn_hal_gpio_pin_handle_t * cts
Definition cfn_hal_uart.h:159
void * instance
Definition cfn_hal_uart.h:156
cfn_hal_gpio_pin_handle_t * rx
Definition cfn_hal_uart.h:158
void * user_data
Definition cfn_hal_uart.h:161
cfn_hal_gpio_pin_handle_t * rts
Definition cfn_hal_uart.h:160
cfn_hal_gpio_pin_handle_t * tx
Definition cfn_hal_uart.h:157