Zephyr API Documentation 4.3.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
codec.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2018 Intel Corporation.
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
13
14#ifndef ZEPHYR_INCLUDE_AUDIO_CODEC_H_
15#define ZEPHYR_INCLUDE_AUDIO_CODEC_H_
16
26
27#include <errno.h>
28#include <zephyr/drivers/i2s.h>
29
30#ifdef __cplusplus
31extern "C" {
32#endif
33
49
59
72
82
116
122#define AUDIO_DAI_DIR_TX BIT(0)
124#define AUDIO_DAI_DIR_RX BIT(1)
126#define AUDIO_DAI_DIR_TXRX (AUDIO_DAI_DIR_TX | AUDIO_DAI_DIR_RX)
127
145
151typedef union {
154 /* Other DAI types go here */
156
157/*
158 * DAI Route types
159 */
166
176
180typedef union {
181 int vol;
182 bool mute;
184
204
212typedef void (*audio_codec_error_callback_t)(const struct device *dev, uint32_t errors);
213
221typedef void (*audio_codec_tx_done_callback_t)(const struct device *dev, void *user_data);
222
232typedef void (*audio_codec_rx_done_callback_t)(const struct device *dev, uint8_t *buf, uint32_t len,
233 void *user_data);
234
240struct audio_codec_api {
241 int (*configure)(const struct device *dev, struct audio_codec_cfg *cfg);
242 void (*start_output)(const struct device *dev);
243 void (*stop_output)(const struct device *dev);
244 int (*set_property)(const struct device *dev, audio_property_t property,
246 int (*apply_properties)(const struct device *dev);
247 int (*clear_errors)(const struct device *dev);
248 int (*register_error_callback)(const struct device *dev, audio_codec_error_callback_t cb);
249 int (*route_input)(const struct device *dev, audio_channel_t channel, uint32_t input);
250 int (*route_output)(const struct device *dev, audio_channel_t channel, uint32_t output);
251 int (*start)(const struct device *dev, audio_dai_dir_t dir);
252 int (*stop)(const struct device *dev, audio_dai_dir_t dir);
253 int (*write)(const struct device *dev, uint8_t *data, size_t data_size);
254 int (*register_done_callback)(const struct device *dev,
255 audio_codec_tx_done_callback_t tx_cb, void *tx_cb_user_data,
256 audio_codec_rx_done_callback_t rx_cb, void *rx_cb_user_data);
257};
261
273static inline int audio_codec_configure(const struct device *dev, struct audio_codec_cfg *cfg)
274{
275 const struct audio_codec_api *api = (const struct audio_codec_api *)dev->api;
276
277 return api->configure(dev, cfg);
278}
279
287static inline void audio_codec_start_output(const struct device *dev)
288{
289 const struct audio_codec_api *api = (const struct audio_codec_api *)dev->api;
290
291 api->start_output(dev);
292}
293
301static inline void audio_codec_stop_output(const struct device *dev)
302{
303 const struct audio_codec_api *api = (const struct audio_codec_api *)dev->api;
304
305 api->stop_output(dev);
306}
307
320static inline int audio_codec_set_property(const struct device *dev, audio_property_t property,
322{
323 const struct audio_codec_api *api = (const struct audio_codec_api *)dev->api;
324
325 return api->set_property(dev, property, channel, val);
326}
327
339static inline int audio_codec_apply_properties(const struct device *dev)
340{
341 const struct audio_codec_api *api = (const struct audio_codec_api *)dev->api;
342
343 return api->apply_properties(dev);
344}
345
356static inline int audio_codec_clear_errors(const struct device *dev)
357{
358 const struct audio_codec_api *api = (const struct audio_codec_api *)dev->api;
359
360 if (api->clear_errors == NULL) {
361 return -ENOSYS;
362 }
363
364 return api->clear_errors(dev);
365}
366
381static inline int audio_codec_register_error_callback(const struct device *dev,
383{
384 const struct audio_codec_api *api = (const struct audio_codec_api *)dev->api;
385
386 if (api->register_error_callback == NULL) {
387 return -ENOSYS;
388 }
389
390 return api->register_error_callback(dev, cb);
391}
392
406static inline int audio_codec_route_input(const struct device *dev, audio_channel_t channel,
407 uint32_t input)
408{
409 const struct audio_codec_api *api = (const struct audio_codec_api *)dev->api;
410
411 if (api->route_input == NULL) {
412 return -ENOSYS;
413 }
414
415 return api->route_input(dev, channel, input);
416}
417
431static inline int audio_codec_route_output(const struct device *dev, audio_channel_t channel,
432 uint32_t output)
433{
434 const struct audio_codec_api *api = (const struct audio_codec_api *)dev->api;
435
436 if (api->route_output == NULL) {
437 return -ENOSYS;
438 }
439
440 return api->route_output(dev, channel, output);
441}
442
453static inline int audio_codec_start(const struct device *dev, audio_dai_dir_t dir)
454{
455 const struct audio_codec_api *api = (const struct audio_codec_api *)dev->api;
456
457 if (api->start == NULL) {
458 return -ENOSYS;
459 }
460
461 return api->start(dev, dir);
462}
463
474static inline int audio_codec_stop(const struct device *dev, audio_dai_dir_t dir)
475{
476 const struct audio_codec_api *api = (const struct audio_codec_api *)dev->api;
477
478 if (api->stop == NULL) {
479 return -ENOSYS;
480 }
481
482 return api->stop(dev, dir);
483}
484
499static inline int audio_codec_write(const struct device *dev, uint8_t *data, size_t data_size)
500{
501 const struct audio_codec_api *api = (const struct audio_codec_api *)dev->api;
502
503 if (api->write == NULL) {
504 return -ENOSYS;
505 }
506
507 return api->write(dev, data, data_size);
508}
509
530static inline int audio_codec_register_done_callback(const struct device *dev,
532 void *tx_cb_user_data,
534 void *rx_cb_user_data)
535{
536 const struct audio_codec_api *api = (const struct audio_codec_api *)dev->api;
537
538 if (api->register_done_callback == NULL) {
539 return -ENOSYS;
540 }
541
542 return api->register_done_callback(dev, tx_cb, tx_cb_user_data, rx_cb, rx_cb_user_data);
543}
544
545#ifdef __cplusplus
546}
547#endif
548
552
553#endif /* ZEPHYR_INCLUDE_AUDIO_CODEC_H_ */
System error numbers.
static int audio_codec_configure(const struct device *dev, struct audio_codec_cfg *cfg)
Configure the audio codec.
Definition codec.h:273
void(* audio_codec_error_callback_t)(const struct device *dev, uint32_t errors)
Callback for error interrupt.
Definition codec.h:212
audio_dai_type_t
Digital Audio Interface (DAI) type.
Definition codec.h:63
static void audio_codec_start_output(const struct device *dev)
Set codec to start output audio playback.
Definition codec.h:287
audio_pcm_width_t
PCM audio sample bit widths.
Definition codec.h:53
audio_codec_error_type
Codec error type.
Definition codec.h:188
audio_route_t
Definition codec.h:160
static int audio_codec_stop(const struct device *dev, audio_dai_dir_t dir)
Set codec to stop audio playback or capture.
Definition codec.h:474
static int audio_codec_start(const struct device *dev, audio_dai_dir_t dir)
Set codec to start audio playback or capture.
Definition codec.h:453
void(* audio_codec_tx_done_callback_t)(const struct device *dev, void *user_data)
Callback for one frame(block memory) size data transmitted.
Definition codec.h:221
audio_property_t
Codec properties that can be set by audio_codec_set_property().
Definition codec.h:76
static int audio_codec_clear_errors(const struct device *dev)
Clear any codec errors.
Definition codec.h:356
void(* audio_codec_rx_done_callback_t)(const struct device *dev, uint8_t *buf, uint32_t len, void *user_data)
Callback for coming one frame size data.
Definition codec.h:232
static int audio_codec_register_done_callback(const struct device *dev, audio_codec_tx_done_callback_t tx_cb, void *tx_cb_user_data, audio_codec_rx_done_callback_t rx_cb, void *rx_cb_user_data)
Register a callback function for codec one frame data tx/rx done.
Definition codec.h:530
static int audio_codec_set_property(const struct device *dev, audio_property_t property, audio_channel_t channel, audio_property_value_t val)
Set a codec property defined by audio_property_t.
Definition codec.h:320
static void audio_codec_stop_output(const struct device *dev)
Set codec to stop output audio playback.
Definition codec.h:301
audio_pcm_rate_t
PCM audio sample rates.
Definition codec.h:37
static int audio_codec_register_error_callback(const struct device *dev, audio_codec_error_callback_t cb)
Register a callback function for codec error.
Definition codec.h:381
static int audio_codec_route_input(const struct device *dev, audio_channel_t channel, uint32_t input)
Sets up signal routing for a given input channel.
Definition codec.h:406
audio_channel_t
Audio channel identifiers to use in audio_codec_set_property().
Definition codec.h:86
static int audio_codec_write(const struct device *dev, uint8_t *data, size_t data_size)
write one block size data for audio playback.
Definition codec.h:499
uint8_t audio_dai_dir_t
DAI Direction Bitmap.
Definition codec.h:120
static int audio_codec_route_output(const struct device *dev, audio_channel_t channel, uint32_t output)
Sets up signal routing for a given output channel.
Definition codec.h:431
static int audio_codec_apply_properties(const struct device *dev)
Atomically apply any cached properties.
Definition codec.h:339
@ AUDIO_DAI_TYPE_PCMA
PCM Interface, variant A.
Definition codec.h:67
@ AUDIO_DAI_TYPE_I2S
I2S Interface.
Definition codec.h:64
@ AUDIO_DAI_TYPE_LEFT_JUSTIFIED
I2S Interface, left justified.
Definition codec.h:65
@ AUDIO_DAI_TYPE_INVALID
Other interfaces can be added here.
Definition codec.h:70
@ AUDIO_DAI_TYPE_RIGHT_JUSTIFIED
I2S Interface, right justified.
Definition codec.h:66
@ AUDIO_DAI_TYPE_PCMB
PCM Interface, variant B.
Definition codec.h:68
@ AUDIO_DAI_TYPE_PCM
PCM Interface.
Definition codec.h:69
@ AUDIO_PCM_WIDTH_16_BITS
16-bit sample width
Definition codec.h:54
@ AUDIO_PCM_WIDTH_32_BITS
32-bit sample width
Definition codec.h:57
@ AUDIO_PCM_WIDTH_20_BITS
20-bit sample width
Definition codec.h:55
@ AUDIO_PCM_WIDTH_24_BITS
24-bit sample width
Definition codec.h:56
@ AUDIO_CODEC_ERROR_UNDERVOLTAGE
Power low voltage.
Definition codec.h:196
@ AUDIO_CODEC_ERROR_OVERVOLTAGE
Power high voltage.
Definition codec.h:199
@ AUDIO_CODEC_ERROR_OVERTEMPERATURE
Codec over-temperature.
Definition codec.h:193
@ AUDIO_CODEC_ERROR_DC
Output direct-current.
Definition codec.h:202
@ AUDIO_CODEC_ERROR_OVERCURRENT
Output over-current.
Definition codec.h:190
@ AUDIO_ROUTE_CAPTURE
Definition codec.h:164
@ AUDIO_ROUTE_BYPASS
Definition codec.h:161
@ AUDIO_ROUTE_PLAYBACK
Definition codec.h:162
@ AUDIO_ROUTE_PLAYBACK_CAPTURE
Definition codec.h:163
@ AUDIO_PROPERTY_INPUT_VOLUME
Input volume.
Definition codec.h:79
@ AUDIO_PROPERTY_OUTPUT_VOLUME
Output volume.
Definition codec.h:77
@ AUDIO_PROPERTY_INPUT_MUTE
Input mute/unmute.
Definition codec.h:80
@ AUDIO_PROPERTY_OUTPUT_MUTE
Output mute/unmute.
Definition codec.h:78
@ AUDIO_PCM_RATE_32K
32 kHz sample rate
Definition codec.h:43
@ AUDIO_PCM_RATE_192K
192 kHz sample rate
Definition codec.h:47
@ AUDIO_PCM_RATE_11P025K
11.025 kHz sample rate
Definition codec.h:39
@ AUDIO_PCM_RATE_22P05K
22.05 kHz sample rate
Definition codec.h:41
@ AUDIO_PCM_RATE_8K
8 kHz sample rate
Definition codec.h:38
@ AUDIO_PCM_RATE_48K
48 kHz sample rate
Definition codec.h:45
@ AUDIO_PCM_RATE_44P1K
44.1 kHz sample rate
Definition codec.h:44
@ AUDIO_PCM_RATE_96K
96 kHz sample rate
Definition codec.h:46
@ AUDIO_PCM_RATE_16K
16 kHz sample rate
Definition codec.h:40
@ AUDIO_PCM_RATE_24K
24 kHz sample rate
Definition codec.h:42
@ AUDIO_CHANNEL_FRONT_LEFT
Front left channel.
Definition codec.h:87
@ AUDIO_CHANNEL_FRONT_RIGHT
Front right channel.
Definition codec.h:88
@ AUDIO_CHANNEL_ALL
All channels.
Definition codec.h:98
@ AUDIO_CHANNEL_COMMON_COUNT
Number of all common channel identifiers.
Definition codec.h:103
@ AUDIO_CHANNEL_REAR_RIGHT
Rear right channel.
Definition codec.h:92
@ AUDIO_CHANNEL_PRIV_START
This and higher values are codec specific.
Definition codec.h:109
@ AUDIO_CHANNEL_REAR_LEFT
Rear left channel.
Definition codec.h:91
@ AUDIO_CHANNEL_MAX
Maximum value describing an audio codec channel identifier.
Definition codec.h:114
@ AUDIO_CHANNEL_LFE
Low frequency effect channel.
Definition codec.h:89
@ AUDIO_CHANNEL_HEADPHONE_RIGHT
Headphone right.
Definition codec.h:97
@ AUDIO_CHANNEL_SIDE_RIGHT
Side right channel.
Definition codec.h:95
@ AUDIO_CHANNEL_FRONT_CENTER
Front center channel.
Definition codec.h:90
@ AUDIO_CHANNEL_SIDE_LEFT
Side left channel.
Definition codec.h:94
@ AUDIO_CHANNEL_REAR_CENTER
Rear center channel.
Definition codec.h:93
@ AUDIO_CHANNEL_HEADPHONE_LEFT
Headphone left.
Definition codec.h:96
#define BIT(n)
Unsigned integer with bit position n set (signed in assembly language).
Definition util_macro.h:44
#define ENOSYS
Function not implemented.
Definition errno.h:82
Main header file for I2S (Inter-IC Sound) driver API.
#define NULL
Definition iar_missing_defs.h:20
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
#define INT16_MAX
Definition stdint.h:17
Codec configuration parameters.
Definition codec.h:170
audio_dai_type_t dai_type
Digital interface type.
Definition codec.h:172
uint32_t mclk_freq
MCLK input frequency in Hz.
Definition codec.h:171
audio_dai_cfg_t dai_cfg
DAI configuration info.
Definition codec.h:173
audio_route_t dai_route
Codec route type.
Definition codec.h:174
Runtime device structure (in ROM) per driver instance.
Definition device.h:513
const void * api
Address of the API structure exposed by the device instance.
Definition device.h:519
Interface configuration options.
Definition i2s.h:296
PCM configuration options.
Definition codec.h:131
audio_dai_dir_t dir
pcm direction
Definition codec.h:133
audio_pcm_width_t pcm_width
Number of bits representing one data word.
Definition codec.h:135
size_t block_size
Size of one RX/TX memory block (buffer) in bytes, it should be a multiple of 4 for some DMA limits.
Definition codec.h:141
audio_pcm_rate_t samplerate
pcm samplerate
Definition codec.h:143
uint8_t channels
Number of channels per frame.
Definition codec.h:137
Digital Audio Interface Configuration.
Definition codec.h:151
struct i2s_config i2s
I2S configuration.
Definition codec.h:152
struct pcm_config pcm
PCM configuration.
Definition codec.h:153
Codec property values.
Definition codec.h:180
bool mute
Mute if true, unmute if false.
Definition codec.h:182
int vol
Volume level (codec-specific).
Definition codec.h:181