Zephyr API Documentation  2.7.0-rc2
A Scalable Open Source RTOS
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
14#ifndef ZEPHYR_INCLUDE_AUDIO_CODEC_H_
15#define ZEPHYR_INCLUDE_AUDIO_CODEC_H_
16
25#include <drivers/i2s.h>
26
27#ifdef __cplusplus
28extern "C" {
29#endif
30
34typedef enum {
44
48typedef enum {
54
58typedef enum {
59 AUDIO_DAI_TYPE_I2S, /* I2S Interface */
60 AUDIO_DAI_TYPE_INVALID, /* Other interfaces can be added here */
62
66typedef enum {
70
74typedef enum {
86
91typedef union {
92 struct i2s_config i2s; /* I2S configuration */
93 /* Other DAI types go here */
95
100 uint32_t mclk_freq; /* MCLK input frequency in Hz */
101 audio_dai_type_t dai_type; /* Digital interface type */
102 audio_dai_cfg_t dai_cfg; /* DAI configuration info */
103};
104
108typedef union {
109 int vol; /* Volume level in 0.5dB resolution */
110 bool mute; /* mute if true, unmute if false */
112
118struct audio_codec_api {
119 int (*configure)(const struct device *dev,
120 struct audio_codec_cfg *cfg);
121 void (*start_output)(const struct device *dev);
122 void (*stop_output)(const struct device *dev);
123 int (*set_property)(const struct device *dev,
124 audio_property_t property,
125 audio_channel_t channel,
127 int (*apply_properties)(const struct device *dev);
128};
144static inline int audio_codec_configure(const struct device *dev,
145 struct audio_codec_cfg *cfg)
146{
147 const struct audio_codec_api *api =
148 (const struct audio_codec_api *)dev->api;
149
150 return api->configure(dev, cfg);
151}
152
162static inline void audio_codec_start_output(const struct device *dev)
163{
164 const struct audio_codec_api *api =
165 (const struct audio_codec_api *)dev->api;
166
167 api->start_output(dev);
168}
169
179static inline void audio_codec_stop_output(const struct device *dev)
180{
181 const struct audio_codec_api *api =
182 (const struct audio_codec_api *)dev->api;
183
184 api->stop_output(dev);
185}
186
199static inline int audio_codec_set_property(const struct device *dev,
200 audio_property_t property,
201 audio_channel_t channel,
203{
204 const struct audio_codec_api *api =
205 (const struct audio_codec_api *)dev->api;
206
207 return api->set_property(dev, property, channel, val);
208}
209
221static inline int audio_codec_apply_properties(const struct device *dev)
222{
223 const struct audio_codec_api *api =
224 (const struct audio_codec_api *)dev->api;
225
226 return api->apply_properties(dev);
227}
228
229#ifdef __cplusplus
230}
231#endif
232
237#endif /* ZEPHYR_INCLUDE_AUDIO_CODEC_H_ */
void
Definition: eswifi_shell.c:15
static int audio_codec_configure(const struct device *dev, struct audio_codec_cfg *cfg)
Configure the audio codec.
Definition: codec.h:144
audio_dai_type_t
Definition: codec.h:58
static void audio_codec_start_output(const struct device *dev)
Set codec to start output audio playback.
Definition: codec.h:162
audio_pcm_width_t
Definition: codec.h:48
audio_property_t
Definition: codec.h:66
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:199
static void audio_codec_stop_output(const struct device *dev)
Set codec to stop output audio playback.
Definition: codec.h:179
audio_pcm_rate_t
Definition: codec.h:34
audio_channel_t
Definition: codec.h:74
static int audio_codec_apply_properties(const struct device *dev)
Atomically apply any cached properties.
Definition: codec.h:221
@ AUDIO_DAI_TYPE_I2S
Definition: codec.h:59
@ AUDIO_DAI_TYPE_INVALID
Definition: codec.h:60
@ AUDIO_PCM_WIDTH_16_BITS
Definition: codec.h:49
@ AUDIO_PCM_WIDTH_32_BITS
Definition: codec.h:52
@ AUDIO_PCM_WIDTH_20_BITS
Definition: codec.h:50
@ AUDIO_PCM_WIDTH_24_BITS
Definition: codec.h:51
@ AUDIO_PROPERTY_OUTPUT_VOLUME
Definition: codec.h:67
@ AUDIO_PROPERTY_OUTPUT_MUTE
Definition: codec.h:68
@ AUDIO_PCM_RATE_32K
Definition: codec.h:38
@ AUDIO_PCM_RATE_192K
Definition: codec.h:42
@ AUDIO_PCM_RATE_8K
Definition: codec.h:35
@ AUDIO_PCM_RATE_48K
Definition: codec.h:40
@ AUDIO_PCM_RATE_44P1K
Definition: codec.h:39
@ AUDIO_PCM_RATE_96K
Definition: codec.h:41
@ AUDIO_PCM_RATE_16K
Definition: codec.h:36
@ AUDIO_PCM_RATE_24K
Definition: codec.h:37
@ AUDIO_CHANNEL_FRONT_LEFT
Definition: codec.h:75
@ AUDIO_CHANNEL_FRONT_RIGHT
Definition: codec.h:76
@ AUDIO_CHANNEL_ALL
Definition: codec.h:84
@ AUDIO_CHANNEL_REAR_RIGHT
Definition: codec.h:80
@ AUDIO_CHANNEL_REAR_LEFT
Definition: codec.h:79
@ AUDIO_CHANNEL_LFE
Definition: codec.h:77
@ AUDIO_CHANNEL_SIDE_RIGHT
Definition: codec.h:83
@ AUDIO_CHANNEL_FRONT_CENTER
Definition: codec.h:78
@ AUDIO_CHANNEL_SIDE_LEFT
Definition: codec.h:82
@ AUDIO_CHANNEL_REAR_CENTER
Definition: codec.h:81
Public APIs for the I2S (Inter-IC Sound) bus drivers.
__UINT32_TYPE__ uint32_t
Definition: stdint.h:60
Definition: codec.h:99
audio_dai_type_t dai_type
Definition: codec.h:101
uint32_t mclk_freq
Definition: codec.h:100
audio_dai_cfg_t dai_cfg
Definition: codec.h:102
Runtime device structure (in ROM) per driver instance.
Definition: device.h:367
const void * api
Definition: device.h:373
Interface configuration options.
Definition: i2s.h:301
Definition: codec.h:91
Definition: codec.h:108
bool mute
Definition: codec.h:110
int vol
Definition: codec.h:109