找回密码
 立即注册

使用微信账号登录

只需一步,快速开始

CSR867x 之Broadcast功能开发

2020-5-17 10:20| 发布者: csdn| 查看: 1818| 评论: 0|来自: CSDN

摘要: 因为最近手头有两个项目都是做Broadcast项目,所以就写一下CSR867x的Broadcast开发过程。 首先,Broadcast功能从ADK4.2开始加入,不过4.2平台上的Broadcast有很多BUG,例如切换模式会自动重启,播放一段时间后会

因为最近手头有两个项目都是做Broadcast项目,所以就写一下CSR867x的Broadcast开发过程。

首先,Broadcast功能从ADK4.2开始加入,不过4.2平台上的Broadcast有很多BUG,例如切换模式会自动重启,播放一段时间后会卡死等问题,后来在ADK4.3上就修改了以上的BUG,不过仍有很多地方不是很理想。另外都是有官方文档可以参考的,可以在ADK的文档内找到,参考文档名字:ADK Audio Sink Application BroadcastUser Guide 80-CF407-1

然后是开始在默认sink工程上做Broadcast的开发(基本的步骤我就不累赘了):

1.需要添加Broadcaster和Receiver的Kalimba项目;

2.在sink工程属性里把Peer device support 项切换到Broadcast audio(default True wireless),另外也

要打开BLE和GATT属性(用来给Broadcast首次连接);

3.然后在mak文件里打开CSB的加载;

4.跑程序进去后,使用配置工具配置3个事件:BA Switch to Broadcaster、BA Switch to Receiver、BA Start Association。

5.设备A 触发BA Switch to Broadcaster,设备B触发BA Switch to Receiver,然后设备A再触发BA Start Association。

6.等待连接成功,会有配对成功提示音。

到此,Broadcast的配对就完成了,手机和设备A连接后,就可以开始播放歌曲,然后设备B会自动切换到BA的source。

开发过程遇到的一些问题:

1.第一个首先要讲的就是延时问题,因为客户太关心这个了。在播放歌曲的时候延时应该是很小的,因为人耳听不出来,公司也没设备测量,估计是200ms以内。不过在播放前,会有500多ms的同步延时,即主设备会延后500ms于从设备出声音,这个是通过测试对比TX,RX的输出脚测量到的,同步之后就没有延时了。

2.另外Broadcast的连接不是点对点,只有在一开始连接的时候通过BLE,交换一下地址,主机不会记录任何数据,从机会记录主机的地址,如果是没有配对记录的话,会自动进入Broadcast association,有的话就会直接扫描记录地址的设备是否有数据包发出。其中有客户想加入连接成功与否的提示音,这个就需要自己看如何定义这个提示音的触发了,反正我是觉得不好加,因为第二次开机后是不会再去触发BLE连接的。

3.另外Broadcast不是很稳定,有时候切换音源或者切换歌曲会卡死,而且EQ多了从机也会断断续续。

4.在BLE广播的时候,去触发Broadcast association 也会导致Broadcast配对不成功。

暂时就只有这些知道的问题,如有错误,欢迎指正交流。

/***********20181105更新***********/

今天测试在切换Broadcaster或着Receiver模式后,自行触发Association事件,可以正常连接。另外Receiver模式本身就会在没有广播记录后自行触发Association,所以只要在Broadcaster模式下延时触发Association事件即可。另外还需要关闭Association的计时器,不然其他Receiver要连接的时候,Broadcaster还是要再触发一下。目前发现该做法,蓝牙断开好像有BUG,暂时还不是很清楚,之后会继续测试是否有其他冲突问题,再来更新。

/***********20181106更新***********/

今天查看了一下代码,Broadcast如果一直广播的话,就不能同时广播普通的BLE数据,不过还在认证测试中。

/***********20181130更新***********/

今天再来更新一下,在广播的时候是可以再连接普通的BLE数据传输的,不过需要再触发一下gapStartBonding(),而且断开后,需要再连接的话,还要再触发多一次。后面测试,可以在Broadcast连接成功后,即sinkBroadcasterHandleReceiverDisconnectInd和sinkReceiverHandleBroadcasterDisconnectInd断开之后触发一下gapStartBonding(),然后在gapStateBondableAssociatingConnectedHandleEvent函数下的ble_gap_event_disconn_ind里面再触发一下gapStartBonding()即可。不过这种做法,有时候会导致Receiver没声音,所以还是按一下触发一次gapStartBonding()比较稳妥。



来源:https://blog.csdn.net/qq_39756943/article/details/83510446
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
1

路过

雷人

握手

鲜花

鸡蛋

刚表态过的朋友 (1 人)

相关阅读

最新评论

小黑屋|手机版|我爱蓝牙网 - 52Bluetooth

GMT+8, 2024-4-29 19:42 , Processed in 0.117944 second(s), 16 queries , Gzip On, MemCached On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

返回顶部