CSR8675项目实战:BlueAg蓝牙一拖二发射器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wzz4420381/article/details/81436431

为了让CSR867x的开发更容易,现与思度科技联合推出CSR867x学习板【淘宝链接:思度科技CSR开发板】

技术交流QQ群号:743434463
开发板会员QQ群号:725398389(凭订单号入群,赠PPT、项目源码、视频教程)

——————————正文分割线———————————–

1. 引言

最近刚完成一个蓝牙一拖二发射器的项目。这个项目的软件需求来自一款竞品——Bluetooth Multipoint Transmitter - Priva III

2. 主要功能

系统框图如下:
这里写图片描述

BlueAg是一款中高端的蓝牙发射器。主要规格如下:

序号 规格 参数
1 蓝牙版本 BT4.2
2 蓝牙profile A2DP,AVRCP,HFP
3 支持解码格式 SBC,FastStream,aptX,aptX-LL,aptx-HD
4 工作距离 Class 2,空旷地域30英尺或10米
5 一拖二功能 能同时给两台耳机提供音乐,数据包交替发给两台耳机,但是APTX-HD、APTX-LL、APTX解码时不能支持两路,此时自动使用Faststream或SBC解码
6 USB音频和AUX_in 只要有USB音源信号,就发送USB音源信号;没有USB音源信号,有AUX_in信号,则播放AUX_in信号;如两路音源信号都没有,则进入低功耗待机状态
7 保存配对信息 最多8个

状态指示如下:

序号 功能 LED指示 备注
1 开机 蓝灯常亮1s 开机能回连之前配对过的设备,1MIN回连不上进入搜索状态。如果开机时没有连接过任何设备,直接进入搜索状态
2 关机 红灯常亮1s 设备进入省电模式
3 待机未连接 红蓝灯交替闪烁 搜索时间5分钟,5分钟内没和耳机,音箱或者其他接收器连接上,进入待机状态
4 配对成功 蓝灯5s闪1次 默认SBC解码模式
5 非连接待机状态 蓝灯2s闪1次
6 连接待机状态(SBC) 蓝灯5s闪1次
7 连接待机状态(FastStream) 蓝灯5s闪2次
8 连接待机状态(aptX) 绿灯5s闪1次
9 连接待机状态(aptX-LL) 绿灯5s闪2次
10 连接待机状态(aptX-HD) 绿灯5s闪3次
11 清除配对列表 蓝灯常亮2s 清除配对列表后进入搜索状态
12 耳机回连 蓝灯5s闪1次 断开连接后两分钟内在有效距离内会自动回连,如不回连,则短按MFB(GPIO 0)键连接
13 aux-in音乐发射器 使用aux-in线连接手机或者其他媒体播放器,可以通过发射器把音频传输到耳机,音箱或者其他接收端。aux-in优先级低于USB
14 USB音乐发射器 使用USB连接线连接到PC或laptop上,打开发射器和耳机,并配好对;右键点击屏幕右下角的喇叭图标;选择播放设备时将此产品作为默认设备;此时产品将可作为USB无线耳机使用,可听到电脑端播放的音乐,并可作为PC端的即时通讯设备使用(Skype或QQ)
15 一拖二 1、如果发射器连接过A,B两个设备,A,B设备在正常的范围,开机能直接回连A,B这两个设备。2、如果发射器连接上A或者B设备(只连一个设备),MFB按键进入配对,可搜索连接新的设备,不会断开之前连接上的设备。3、如果发射器连接上A和B两个设备,MFB按键进入配对,断开早期连接的设备A,并进入搜索,可以连接新的设备。

3. 项目难点

3.1. 支持FastStream

FastStream是aptX的上一代音频编码格式,其已经包含在DSP工程sbc_encoder中,VM的代码中也能看到相关代码。修改source config tool的选项即可使能FastStream。

3.2. USB和AUX切源

ADK默认可支持USB或AUX源,如何实现在程序运行过程中的切源呢?在source_app_msg_handler.c的app_msg_handler中添加如下代码:

case APP_ANALOG_AUDIO_ACTIVE:
{
    APP_MSG_DEBUG(("APP_ANALOG_AUDIO_ACTIVE\n")); 

    theSource->ps_config->usb_config.usb_speaker_interface = 0;
    theSource->ps_config->usb_config.usb_mic_interface = 0;
    theSource->ps_config->features.input_source = A2dpEncoderInputDeviceAnalogue;
    theSource->audio_data.audio_a2dp_connect_params.input_device_type = theSource->ps_config->features.input_source;
    app_usb_audio_active();
}
return;

case APP_ANALOG_AUDIO_INACTIVE:
{
    APP_MSG_DEBUG(("APP_ANALOG_AUDIO_INACTIVE\n")); 

    theSource->ps_config->usb_config.usb_speaker_interface = 1;
    theSource->ps_config->usb_config.usb_mic_interface = 1;
    theSource->ps_config->features.input_source = A2dpEncoderInputDeviceUsb;
    theSource->audio_data.audio_a2dp_connect_params.input_device_type = theSource->ps_config->features.input_source;
    app_usb_audio_active();
}
return;

当需要切换到analog源时,发送APP_ANALOG_AUDIO_ACTIVE消息;当需要切换到USB源时,发送APP_ANALOG_AUDIO_INACTIVE消息。

4. 总结

此项目已经成功量产。在此项目的基础上,可以继续丰富产品的功能,如增加SPDIF输入源、I2S输入源,或是增加蓝牙接收功能以支持蓝牙收发一体。

猜你喜欢

转载自blog.csdn.net/wzz4420381/article/details/81436431