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_i2s.h
Go to the documentation of this file.
1
26#ifndef CAFFEINE_HAL_HAL_I2S_H
27#define CAFFEINE_HAL_HAL_I2S_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
64
65/* Types Structs ----------------------------------------------------*/
66
79
93
106
118
132
133typedef struct cfn_hal_i2s_s cfn_hal_i2s_t;
135
143typedef void (*cfn_hal_i2s_callback_t)(cfn_hal_i2s_t *driver, uint32_t event_mask, uint32_t error_mask, void *user_arg);
144
149{
151
152 /* I2S Specific Extensions */
153 cfn_hal_error_code_t (*transmit_dma)(cfn_hal_i2s_t *driver, const uint16_t *data, size_t size);
154 cfn_hal_error_code_t (*receive_dma)(cfn_hal_i2s_t *driver, uint16_t *data, size_t size);
158};
159
161
163
164/* Functions inline ------------------------------------------------- */
166 uint32_t peripheral_id,
167 struct cfn_hal_clock_s *clock,
168 void *dependency,
169 const cfn_hal_i2s_api_t *api,
170 const cfn_hal_i2s_phy_t *phy,
171 const cfn_hal_i2s_config_t *config,
172 cfn_hal_i2s_callback_t callback,
173 void *user_arg)
174{
176 driver, CFN_HAL_PERIPHERAL_TYPE_I2S, peripheral_id, clock, dependency, api, phy, config, callback, user_arg);
177}
178
186 const cfn_hal_i2s_config_t *config)
187{
188 if (driver == NULL || config == NULL)
189 {
191 }
192
195 {
197 }
198
199 return cfn_hal_base_config_validate(&driver->base, CFN_HAL_PERIPHERAL_TYPE_I2S, config);
200}
201
208{
209 if (!driver)
210 {
212 }
213 driver->base.vmt = (const struct cfn_hal_api_base_s *) driver->api;
214 cfn_hal_error_code_t error = cfn_hal_i2s_config_validate(driver, driver->config);
215 if (error != CFN_HAL_ERROR_OK)
216 {
217 return error;
218 }
219 return cfn_hal_base_init(&driver->base, CFN_HAL_PERIPHERAL_TYPE_I2S);
220}
221
228{
229 if (!driver)
230 {
232 }
234}
235
243{
244 if (!driver)
245 {
247 }
249 if (error != CFN_HAL_ERROR_OK)
250 {
251 return error;
252 }
253 {
254 driver->config = config;
255 }
256 return cfn_hal_base_config_set(&driver->base, CFN_HAL_PERIPHERAL_TYPE_I2S, (const void *) config);
257}
258
266{
267 if (!driver || !config || !driver->config)
268 {
270 }
271 *config = *(driver->config);
272 return CFN_HAL_ERROR_OK;
273}
274
283 const cfn_hal_i2s_callback_t callback,
284 void *user_arg)
285{
286 if (!driver)
287 {
289 }
290 {
291 driver->cb = callback;
292 driver->cb_user_arg = user_arg;
293 }
295 &driver->base, CFN_HAL_PERIPHERAL_TYPE_I2S, (cfn_hal_callback_t) callback, user_arg);
296}
297
312
320{
321 if (!driver)
322 {
324 }
325 return cfn_hal_base_event_enable(&driver->base, CFN_HAL_PERIPHERAL_TYPE_I2S, event_mask);
326}
327
335{
336 if (!driver)
337 {
339 }
340 return cfn_hal_base_event_disable(&driver->base, CFN_HAL_PERIPHERAL_TYPE_I2S, event_mask);
341}
342
350{
351 if (!driver)
352 {
354 }
355 return cfn_hal_base_event_get(&driver->base, CFN_HAL_PERIPHERAL_TYPE_I2S, event_mask);
356}
357
365{
366 if (!driver)
367 {
369 }
370 return cfn_hal_base_error_enable(&driver->base, CFN_HAL_PERIPHERAL_TYPE_I2S, error_mask);
371}
372
380{
381 if (!driver)
382 {
384 }
385 return cfn_hal_base_error_disable(&driver->base, CFN_HAL_PERIPHERAL_TYPE_I2S, error_mask);
386}
387
395{
396 if (!driver)
397 {
399 }
400 return cfn_hal_base_error_get(&driver->base, CFN_HAL_PERIPHERAL_TYPE_I2S, error_mask);
401}
402
403/* I2S Specific Functions ------------------------------------------- */
404
413{
415 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_HAL_PERIPHERAL_TYPE_I2S, transmit_dma, driver, error, data, size);
416 return error;
417}
418
427{
429 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_HAL_PERIPHERAL_TYPE_I2S, receive_dma, driver, error, data, size);
430 return error;
431}
432
444
456
468
470 const cfn_hal_i2s_config_t *config,
471 const cfn_hal_i2s_phy_t *phy,
472 struct cfn_hal_clock_s *clock,
473 void *dependency,
474 cfn_hal_i2s_callback_t callback,
475 void *user_arg);
477#ifdef __cplusplus
478}
479#endif
480
481#endif // CAFFEINE_HAL_HAL_I2S_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_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.
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_i2s_error_enable(cfn_hal_i2s_t *driver, uint32_t error_mask)
Enables one or more I2S exception errors.
Definition cfn_hal_i2s.h:364
cfn_hal_i2s_config_dataformat_t
I2S data format.
Definition cfn_hal_i2s.h:98
@ CFN_HAL_I2S_CONFIG_DATAFORMAT_16B_EXTENDED
Definition cfn_hal_i2s.h:100
@ CFN_HAL_I2S_CONFIG_DATAFORMAT_16B
Definition cfn_hal_i2s.h:99
@ CFN_HAL_I2S_CONFIG_DATAFORMAT_32B
Definition cfn_hal_i2s.h:102
@ CFN_HAL_I2S_CONFIG_DATAFORMAT_MAX
Definition cfn_hal_i2s.h:104
@ CFN_HAL_I2S_CONFIG_DATAFORMAT_24B
Definition cfn_hal_i2s.h:101
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_i2s_error_disable(cfn_hal_i2s_t *driver, uint32_t error_mask)
Disables one or more I2S exception errors.
Definition cfn_hal_i2s.h:379
void(* cfn_hal_i2s_callback_t)(cfn_hal_i2s_t *driver, uint32_t event_mask, uint32_t error_mask, void *user_arg)
I2S callback signature.
Definition cfn_hal_i2s.h:143
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_i2s_event_get(cfn_hal_i2s_t *driver, uint32_t *event_mask)
Retrieves the current I2S nominal event status.
Definition cfn_hal_i2s.h:349
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_i2s_transmit_dma(cfn_hal_i2s_t *driver, const uint16_t *data, size_t size)
Starts non-blocking audio transmission via DMA.
Definition cfn_hal_i2s.h:412
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_i2s_resume(cfn_hal_i2s_t *driver)
Resumes a previously paused I2S audio stream.
Definition cfn_hal_i2s.h:450
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_i2s_config_set(cfn_hal_i2s_t *driver, const cfn_hal_i2s_config_t *config)
Sets the I2S configuration.
Definition cfn_hal_i2s.h:242
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_i2s_event_disable(cfn_hal_i2s_t *driver, uint32_t event_mask)
Disables one or more I2S nominal events.
Definition cfn_hal_i2s.h:334
cfn_hal_i2s_event_t
I2S nominal event flags.
Definition cfn_hal_i2s.h:48
@ CFN_HAL_I2S_EVENT_NONE
Definition cfn_hal_i2s.h:49
@ CFN_HAL_I2S_EVENT_TX_COMPLETE
Definition cfn_hal_i2s.h:50
@ CFN_HAL_I2S_EVENT_RX_READY
Definition cfn_hal_i2s.h:51
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_i2s_stop(cfn_hal_i2s_t *driver)
Stops the I2S audio operation and DMA transfers.
Definition cfn_hal_i2s.h:462
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_i2s_config_validate(const cfn_hal_i2s_t *driver, const cfn_hal_i2s_config_t *config)
Validates the I2S configuration.
Definition cfn_hal_i2s.h:185
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_i2s_receive_dma(cfn_hal_i2s_t *driver, uint16_t *data, size_t size)
Starts non-blocking audio reception via DMA.
Definition cfn_hal_i2s.h:426
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_i2s_event_enable(cfn_hal_i2s_t *driver, uint32_t event_mask)
Enables one or more I2S nominal events.
Definition cfn_hal_i2s.h:319
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_i2s_config_get(cfn_hal_i2s_t *driver, cfn_hal_i2s_config_t *config)
Gets the current I2S configuration.
Definition cfn_hal_i2s.h:265
CFN_HAL_INLINE void cfn_hal_i2s_populate(cfn_hal_i2s_t *driver, uint32_t peripheral_id, struct cfn_hal_clock_s *clock, void *dependency, const cfn_hal_i2s_api_t *api, const cfn_hal_i2s_phy_t *phy, const cfn_hal_i2s_config_t *config, cfn_hal_i2s_callback_t callback, void *user_arg)
Definition cfn_hal_i2s.h:165
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_i2s_deinit(cfn_hal_i2s_t *driver)
Deinitializes the I2S driver.
Definition cfn_hal_i2s.h:227
struct cfn_hal_i2s_s cfn_hal_i2s_t
Definition cfn_hal_i2s.h:133
cfn_hal_i2s_config_standard_t
I2S communication standard.
Definition cfn_hal_i2s.h:84
@ CFN_HAL_I2S_CONFIG_STANDARD_PCM_LONG
Definition cfn_hal_i2s.h:89
@ CFN_HAL_I2S_CONFIG_STANDARD_PCM_SHORT
Definition cfn_hal_i2s.h:88
@ CFN_HAL_I2S_CONFIG_STANDARD_MAX
Definition cfn_hal_i2s.h:91
@ CFN_HAL_I2S_CONFIG_STANDARD_MSB
Definition cfn_hal_i2s.h:86
@ CFN_HAL_I2S_CONFIG_STANDARD_PHILIPS
Definition cfn_hal_i2s.h:85
@ CFN_HAL_I2S_CONFIG_STANDARD_LSB
Definition cfn_hal_i2s.h:87
cfn_hal_i2s_config_mode_t
I2S operational mode.
Definition cfn_hal_i2s.h:71
@ CFN_HAL_I2S_CONFIG_MODE_SLAVE_TX
Definition cfn_hal_i2s.h:74
@ CFN_HAL_I2S_CONFIG_MODE_MASTER_RX
Definition cfn_hal_i2s.h:73
@ CFN_HAL_I2S_CONFIG_MODE_SLAVE_RX
Definition cfn_hal_i2s.h:75
@ CFN_HAL_I2S_CONFIG_MODE_MAX
Definition cfn_hal_i2s.h:77
@ CFN_HAL_I2S_CONFIG_MODE_MASTER_TX
Definition cfn_hal_i2s.h:72
cfn_hal_error_code_t cfn_hal_i2s_construct(cfn_hal_i2s_t *driver, const cfn_hal_i2s_config_t *config, const cfn_hal_i2s_phy_t *phy, struct cfn_hal_clock_s *clock, void *dependency, cfn_hal_i2s_callback_t callback, void *user_arg)
Definition cfn_hal_i2s_port.c:70
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_i2s_pause(cfn_hal_i2s_t *driver)
Pauses the ongoing I2S audio stream.
Definition cfn_hal_i2s.h:438
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_i2s_power_state_set(cfn_hal_i2s_t *driver, cfn_hal_power_state_t state)
Sets the I2S power state.
Definition cfn_hal_i2s.h:304
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_i2s_error_get(cfn_hal_i2s_t *driver, uint32_t *error_mask)
Retrieves the current I2S exception error status.
Definition cfn_hal_i2s.h:394
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_i2s_init(cfn_hal_i2s_t *driver)
Initializes the I2S driver.
Definition cfn_hal_i2s.h:207
cfn_hal_i2s_error_t
I2S exception error flags.
Definition cfn_hal_i2s.h:58
@ CFN_HAL_I2S_ERROR_GENERAL
Definition cfn_hal_i2s.h:62
@ CFN_HAL_I2S_ERROR_OVERRUN
Definition cfn_hal_i2s.h:60
@ CFN_HAL_I2S_ERROR_SYNC
Definition cfn_hal_i2s.h:61
@ CFN_HAL_I2S_ERROR_NONE
Definition cfn_hal_i2s.h:59
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_i2s_callback_register(cfn_hal_i2s_t *driver, const cfn_hal_i2s_callback_t callback, void *user_arg)
Registers a callback for I2S events and errors.
Definition cfn_hal_i2s.h:282
cfn_hal_error_code_t cfn_hal_i2s_destruct(cfn_hal_i2s_t *driver)
Definition cfn_hal_i2s_port.c:86
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
#define CFN_HAL_PERIPHERAL_TYPE_I2S
Definition cfn_hal_types.h:135
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
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
I2S Virtual Method Table (VMT).
Definition cfn_hal_i2s.h:149
cfn_hal_error_code_t(* receive_dma)(cfn_hal_i2s_t *driver, uint16_t *data, size_t size)
Definition cfn_hal_i2s.h:154
cfn_hal_api_base_t base
Definition cfn_hal_i2s.h:150
cfn_hal_error_code_t(* transmit_dma)(cfn_hal_i2s_t *driver, const uint16_t *data, size_t size)
Definition cfn_hal_i2s.h:153
cfn_hal_error_code_t(* stop)(cfn_hal_i2s_t *driver)
Definition cfn_hal_i2s.h:157
cfn_hal_error_code_t(* resume)(cfn_hal_i2s_t *driver)
Definition cfn_hal_i2s.h:156
cfn_hal_error_code_t(* pause)(cfn_hal_i2s_t *driver)
Definition cfn_hal_i2s.h:155
I2S configuration structure.
Definition cfn_hal_i2s.h:111
void * custom
Definition cfn_hal_i2s.h:116
uint32_t sample_rate
Definition cfn_hal_i2s.h:112
cfn_hal_i2s_config_standard_t standard
Definition cfn_hal_i2s.h:114
cfn_hal_i2s_config_mode_t mode
Definition cfn_hal_i2s.h:113
cfn_hal_i2s_config_dataformat_t data_format
Definition cfn_hal_i2s.h:115
I2S hardware physical mapping.
Definition cfn_hal_i2s.h:123
cfn_hal_gpio_pin_handle_t * mck
Definition cfn_hal_i2s.h:129
void * instance
Definition cfn_hal_i2s.h:124
cfn_hal_gpio_pin_handle_t * sd
Definition cfn_hal_i2s.h:127
cfn_hal_gpio_pin_handle_t * ck
Definition cfn_hal_i2s.h:125
cfn_hal_gpio_pin_handle_t * ext_sd
Definition cfn_hal_i2s.h:128
cfn_hal_gpio_pin_handle_t * ws
Definition cfn_hal_i2s.h:126
void * user_arg
Definition cfn_hal_i2s.h:130