Edit online

接口设计

5 Jul 2024
Read time: 3 minute(s)
1. aic_i2s_set_sysclk
函数原型static int aic_i2s_set_sysclk(struct snd_soc_dai *dai, int clk_id, unsigned int freq, int dir)
功能说明设置 S 模块输出的 mclk 时钟频率
参数定义dai:指向 dai 的指针 | clk_id:要设置的时钟 id | freq:设置的时钟频率 | dir: unused
返回值0:执行成功 | -EINVAL:参数非法
注意事项-
2. aic_i2s_set_bclk_ratio
函数原型static int aic_i2s_set_bclk_ratio(struct snd_soc_dai *dai, unsigned int ratio)
功能说明设置 S 模块 LRCK 与 BCLK 时钟频率的比率
参数定义dai:指向 dai 的指针 | ratio:需要设置的比率
返回值0:执行成功 | -EINVAL:参数非法
注意事项-
3. aic_i2s_set_fmt
函数原型static int aic_i2s_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
功能说明设置 S 模块的格式
参数定义dai:指向 dai 的指针 | fmt:需要设置的格式
返回值0:执行成功 | -EINVAL:参数非法
注意事项通过该函数可以设置的格式有: | 1. I2S 的主从模式 | 2. BCLK 和 LRCK 的极性 | 3. I2S 的数据格式
4. aic_i2s_set_tdm_slot
函数原型static int aic_i2s_set_tdm_slot(struct snd_soc_dai *dai,unsigned int tx_mask, unsigned int rx_mask,int slots, int slot_width)
功能说明设置 S 模块 TDM 模式下的通道个数和宽度
参数定义dai:指向 dai 的指针 | tx_mask:tx slot 的 mask | rx_mask:rx slot 的 mask | slots:设置的通道个数 | slot_width:设置的通道宽度
返回值0:执行成功 | -EINVAL:参数非法
注意事项-
5. aic_i2s_hw_params
函数原型static int aic_i2s_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params, struct snd_soc_dai *dai)
功能说明设置 S 模块硬件参数
参数定义substream:指向 playback 或 capture 的 substream | params:指向硬件参数指针 | dai:指向 dai 的指针
返回值0:执行成功 | -EINVAL:参数非法
注意事项通过该函数,可以设置采样精度,帧率,以及时钟等参数
6. aic_i2s_trigger
函数原型static int aic_i2s_trigger(struct snd_pcm_substream *substream, int cmd, struct snd_soc_dai *dai)
功能说明I2S 的触发函数
参数定义substream:指向 playback 或 capture 的 substream | cmd:触发的命令 | dai:指向 dai 的指针
返回值0:执行成功 | -EINVAL:参数非法
注意事项通过该函数,可以开始或停止音频的播放或录音

driver 层接口设计

driver 层可以同时实现 playback 和 record 两个功能,主要根据的是音频数据流的方向进行判别。
7. drv_i2s_sound_init
函数原型rt_err_t drv_i2s_sound_init(struct rt_audio_device *audio)
功能说明i2s 的初始化函数
参数定义audio:指向音频设备的指针
返回值RT_EOK:执行成功
注意事项-
8. drv_i2s_sound_buffer_info
函数原型void drv_i2s_sound_buffer_info(struct rt_audio_device *audio, struct rt_audio_buf_info *info)
功能说明获取音频的 buffer 参数
参数定义audio:指向音频设备的指针

info:用于获取 buffer 参数的指针

返回值
注意事项-
9. drv_i2s_sound_start
函数原型rt_err_t drv_i2s_sound_start(struct rt_audio_device *audio, int stream)
功能说明开始音频播放
参数定义audio:指向音频设备的指针。

stream:音频数据流方向

返回值RT_EOK:执行成功。

RT_EINVAL:参数非法

注意事项-
10. drv_i2s_sound_stop
函数原型rt_err_t drv_i2s_sound_stop(struct rt_audio_device *audio, int stream)
功能说明结束音频播放
参数定义audio:指向音频设备的指针。

stream:音频数据流方向

返回值RT_EOK:执行成功。

-RT_EINVAL:参数非法

注意事项-
11. drv_i2s_sound_pause
函数原型rt_err_t drv_i2s_sound_pause(struct rt_audio_device *audio, int enable)
功能说明暂停/恢复音频播放
参数定义audio:指向音频设备的指针。

enable:音频暂停和恢复播放使能位(0 为恢复,非 0 为暂停)

返回值RT_EOK:执行成功
注意事项-
12. drv_i2s_sound_configure
函数原型rt_err_t drv_i2s_sound_configure(struct rt_audio_device *audio, struct rt_audio_caps *caps)
功能原型音频设备配置接口,用于配置采样格式,采样率,通道数等接口
参数定义audio:指向音频设备的指针

caps:指向配置参数的指针

返回值RT_EOK:执行成功

-RT_ERROR:参数不支持

注意事项-
13. drv_i2s_sound_getcaps
函数原型rt_err_t drv_i2s_sound_getcaps(struct rt_audio_device *audio, struct rt_audio_caps *caps)
功能说明获取音频设备的参数
参数定义audio:指向音频设备的指针

caps:指向配置参数的指针

返回值RT_EOK:执行成功。

-RT_ERROR:参数不支持

注意事项-
14. drv_audio_get_i2s_sound_avail
函数原型rt_size_t drv_i2s_sound_get_playback_avail(struct rt_audio_device *audio)
功能说明获取音频缓存的数据大小
参数定义audio:指向音频设备的指针
返回值缓存数据的大小
注意事项-

hal 层接口设计

hal 层接口也是分 playback,record 两部分进行设计,下面以 playback 端的接口进行说明。

15. hal_i2s_protocol_select
函数原型int hal_i2s_protocol_select(aic_i2s_ctrl *i2s, i2s_protocol_t protocol)
功能说明设置传输协议
参数定义i2s:指向 ctrl 的指针

protocol:传输协议

返回值0:执行成功。

-EINVAL:参数不支持

注意事项-
16. hal_i2s_sample_width_select
函数原型int hal_i2s_sample_width_select(aic_i2s_ctrl *i2s, i2s_sample_width_t width)
功能说明设置采样通道的位宽
参数定义i2s:指向 ctrl 的指针

width:通道的位宽

返回值0:执行成功
注意事项-
17. hal_i2s_mclk_set
函数原型int hal_i2s_mclk_set(aic_i2s_ctrl *i2s, i2s_sample_rate_t sample_rate, uint32_t mclk_nfs)
功能说明设置 MCLK 的时钟频率
参数定义i2s:指向 ctrl 的指针

sample_rate:采样率

mclk_nfs:MCLK 的时钟频率

返回值0:执行成功

-EINVAL:参数不支持

注意事项-
18. hal_i2s_polarity_set
函数原型void hal_i2s_polarity_set(aic_i2s_ctrl *i2s, i2s_polarity_t polarity)
功能说明选择 LRCK 的左右通道极性
参数定义i2s:指向 ctrl 的指针

polarity:LRCK 的左右通道极性

返回值
注意事项-
19. hal_i2s_sclk_set
函数原型int hal_i2s_sclk_set(aic_i2s_ctrl *i2s, i2s_sample_rate_t sample_rate, uint32_t sclk_nfs)
功能说明设置 SCLK/LRCK 的比率
参数定义i2s:指向 ctrl 的指针

sample_rate:采样率

sclk_nfs:需要设置的比率

返回值0:执行成功

-EINVAL:参数不支持

注意事项-
20. hal_i2s_channel_select
函数原型void hal_i2s_channel_select(aic_i2s_ctrl *i2s, i2s_sound_channel_t channel, i2s_stream_t stream)
功能说明I2S 通道数量设置
参数定义i2s:指向 ctrl 的指针

channel:指向 t 的变量,表示要使用的通道

stream:音频数据流的方向

返回值
注意事项-
21. hal_i2s_playback_start
函数原型void hal_i2s_playback_start(aic_i2s_ctrl *i2s, i2s_format_t *format)
功能说明开始播放
参数定义i2s:指向 ctrl 的指针

format:指向 t 的指针

返回值
注意事项-
22. hal_i2s_playback_stop
函数原型void hal_i2s_playback_stop(aic_i2s_ctrl *i2s)
功能说明停止播放
参数定义i2s:指向 ctrl 的指针
返回值
注意事项-