1. OTP小音箱应用流程

AD16N 的OTP应用模式有Music模式、USB从机模式以及LINEIN模式。不同的模式间会有资源和按键互斥的关系。应用上面做了一个简单的模式切换管理来管理不同模式的资源和按键。

模式管理的整体管理思路是,进入该模式的时候初始化模式需要使用的资源和按键处理函数,退出该模式的时候关闭该模式需要使用的资源和释放按键处理函数。上电默认进入LINEIN模式,在检测到有USB线连接小机到电脑时,会自动切换到USB从机模式;在检测到有SD卡、U盘等设备插入时,会自动切换到Music模式

模式轮询函数:

void mbox_main(void)

1.1. 音乐解码模式

音乐解码模式涉及设备操作、文件读取、音频解码以及音频断点记忆等功能,可实现SD卡/U盘的MP3/WAV解码、快进快退、EQ、文件夹循环/单曲循环/随机播放等功能。涉及的文件目录:appsappsrcmboxmusic,涉及的应用函数如下:

1.1.1. 函数bool music_play_control(MBOX_MUSIC_CMD cmd, u32 index, DEC_STOP_WAIT mode)

此函数是应用层控制设备或文件进行相应操作的接口,根据cmd判断进行设备操作或文件操作,内部完成设备、文件和解码的流转,其中参数:

1、cmd:音乐设备或文件操作cmd,如下表;
2、index:播放指定设备或指定文件时,传入的设备号或文件号;
3、mode:解码停止方式;
    ① NO_WAIT:直接停止解码;
    ② NEED_WAIT:停止解码时,等待DAC消耗完剩余样点;
4、返回值: 成功 返回1;
    失败 返回0;

播放控制命令

含义

DEV_CMD_SEL_NEW_DEV

播放指定设备

DEV_CMD_PREV

播放上一设备

DEV_CMD_NEXT

播放下一设备

FILE_CMD_PLAY_BY_INDEX

播放指定文件

FILE_CMD_PREV

播放上一曲

FILE_CMD_NEXT

播放下一曲

表1 音乐设备或文件操作cmd

1.1.2. 函数bool mbox_simple_play_file(u8 dindex, u32 findex)

此函数是应用层播放指定设备和指定文件的接口,其中参数:

1、dindex:需要播放的设备号:
    ① SD0_INDEX:SD卡设备号;
    ② UDISK_INDEX:U盘设备号;
2、findex:需要播放的文件序号;
3、返回值:
    成功: 返回1;
    失败: 返回0;

1.1.3. 函数u32 device_mount(play_control *ppctl)

此函数是应用层挂载设备和文件系统,并进行扫盘操作的接口。该函数会去读取访问物理设备,设备和文件系统挂载成功后,会将扫盘结果保存在结构体dev_scan_info中,失败时会返回错误值并寻找下一有效设备,其中参数:

1、ppctl:音乐播放器句柄指针;
2、返回值:
    成功: 返回0;
    失败: 错误值可查看errno-base.h;

1.1.4. 函数void fs_dev_close(void)

此函数是应用层关闭文件、文件系统以及设备的接口。


1.2. 2 USB从机模式

USB从机模式可支持USB Speaker音频、USB Massstorage大容量存储器、USB HID控制等功能,涉及的文件目录:appsappsrcmboxusb_slave。

该模式下的音量与系统音量保持独立,可在apps/app/bsp/common/usb/device/descriptor.c文件中添加、修改设备描述符。


1.3. LINEIN模式

LINEIN模式可支持模拟直通模式以及数字LINEIN模式;

开发板接线时,模拟直通需将AUXL、AUXR分别接到PC4、PC5引脚;数字LINEIN模式需将AUXL、AUXR接到PA1引脚;

数字LINEIN模式下AUDIO_ADC和AUDIO_DAC需要配置相同的采样率,数字模式下可调节音量,涉及的文件目录:appsappsrcmboxlinein。

模拟直通与数字LINEIN切换如下:
  • 1)修改宏定义LINEIN_MODE为ANALOG_LINEIN_MODE,即模拟直通LINEIN;

  • 2)修改宏定义LINEIN_MODE为DIGITAL_LINEIN_MODE,即数字LINEIN;