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

news/2024/11/20 0:27:45/

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

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

1. 引言

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

2. 主要功能

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

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

序号规格参数
1蓝牙版本BT4.2
2蓝牙profileA2DP,AVRCP,HFP
3支持解码格式SBC,FastStream,aptX,aptX-LL,aptx-HD
4工作距离Class 2,空旷地域30英尺或10米
5一拖二功能能同时给两台耳机提供音乐,数据包交替发给两台耳机,但是APTX-HD、APTX-LL、APTX解码时不能支持两路,此时自动使用Faststream或SBC解码
6USB音频和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)键连接
13aux-in音乐发射器使用aux-in线连接手机或者其他媒体播放器,可以通过发射器把音频传输到耳机,音箱或者其他接收端。aux-in优先级低于USB
14USB音乐发射器使用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输入源,或是增加蓝牙接收功能以支持蓝牙收发一体。


http://www.ppmy.cn/news/836870.html

相关文章

蓝牙通用外观设置

蓝牙通用外观设置 在开发蓝牙设备时,需要设置蓝牙设备的外观,在代码中,通常这个关键字为appearance需要设置一个值,对于非通用设备,这个值一般为:0,对于是通用设备那么他是存在外观图标的&#…

ventura 双系统win之间切换蓝牙设备自动连接教程

ventura 双系统win之间切换蓝牙设备自动连接教程 见论坛有小伙伴在咨询ventura跟win双系统切换蓝牙鼠标无法自动连接上的问题,现在说说具体怎么设置才能实现双系统互换自动连接的教程,之前论坛上已经有大神发过类似的,并非原创,ve…

Android 9 原生设置关于蓝牙设置(五)

蓝牙配对及A2DP连接 参考:蓝牙配置流程 当点击设置界面的某个蓝牙设备时会调用DeviceListPreferenceFragment里面: 最终调用BluetoothDevicePreference.onClicked(),主要代码如下: 上面的逻辑里会根据不同的情况执行不同的…

手机蓝牙控制开关

先讲一下整体思路哈!手机肯定不能直接控制台灯的,需要一个中间物来协调,在这里我用的是51单片机(如果大家不知道也没关系,下面我还会说的)。接下来就是具体怎么控制的,其实原理挺简单的。1.手机…

算法-快速排序

go快速排序 时间复杂度:O(n) 空间复杂度:O(Nlog2n) 不稳定,较复杂 过程: 1、设置一个基点,通常为最左边或最右边,下面设置为最左边,设置设置两个指针分别指向数组两端 2、先移动右边指针,如果小于基点的值,则停止移动,并且把值覆盖到最左边的指针的值 3、覆盖之后,把最左边的指…

蓝牙广播时间设置

1CONN_INTERVAL (连接间隔) 就是两个连接事件之间的时间间隔,连接间隔以1.25为单位,连接间隔的值为6(7.5ms)~3200(4s).不同的应用可能要求不同的时间间隔。长的时间间隔的优势是显著地节省功耗,因为设备可以在连接事件…

【蓝牙模块】多主多从蓝牙模块介绍

蓝牙模块测试:多主多从模块测试步骤 FR8016HA_Module 透传模块介绍蓝牙模块测试:多主多从测试*有需要的可以联系:13631472459*模块图片 FR8016HA_Module 透传模块介绍 FR8016HA_Module模块是一款工业 级射频无线产品,支持蓝牙5.0…

Android 9 原生设置关于蓝牙设置(三)

开启关闭蓝牙 参考:https://www.jianshu.com/p/a150d55e29ca 开启过程 参考“Setting关于蓝牙的界面”,开启和关闭蓝牙的switchbar的监听状态是BluetoothEnable类,当打开switchbar时: LocalBluetoothAdapter.setBluetoothEnab…