CSR8670项目实战:BlueAgBatC蓝牙发射器&BLE遥控器

为了方便大家学习,现与我爱蓝牙网联合推出【QCC300x/CSR867x/QCC30xx/QCC51xx开发板】

⭐⭐⭐⭐⭐【本项目为客户项目,欢迎商务合作】⭐⭐⭐⭐⭐
技术交流QQ群号:1033022961
开发板会员QQ群号:725398389(凭订单号入群,赠独家学习资料)
——————————正文分割线———————————–

1. 引言

最近刚完成一位朋友的委托,内容是开发一款可连接BLE遥控器的蓝牙发射器。
CSR8670项目实战:BlueAgBatC蓝牙发射器&BLE遥控器
熟悉CSR8670 ADK的朋友一定知道,官方的source例程中并没有包含BLE功能,而sink例程中包含大量BLE相关的功能实现。如何在source例程中加入BLE功能,是一个比较有挑战的开发任务。经过一段时间的摸索,实现了在发射模式连接BLE遥控器并获取电量信息等功能。

2. 主要功能

  • 蓝牙免提通话 AGHFP
  • 蓝牙音乐发射 A2DP Source
  • 耳机配对键和BLE遥控器配对键
  • 可连接一个BLE遥控器,开机自动回连
  • BLE遥控器的按键可切换AGHFP和A2DP

系统框图如下:
CSR8670项目实战:BlueAgBatC蓝牙发射器&BLE遥控器
CSR8670工作在发射模式,分别有两个配对键,一是耳机配对键,二是BLE遥控器配对键。

3. 项目难点

项目的主要难点有两个,一是将sink例程中与BLE相关的代码合入source例程;二是开机后自动回连BLE遥控器。

难点一:与BLE相关的代码,主要集中在sink_ble_xxx.c/.h和sink_gatt_xxx.c/.h等文件,以及gatt相关的库文件。将这些文件添加到工程中后,可能会提示很多与attributes相关的错误,这里面需要充分理解attributes。attributes的用途是存储所有与已配对设备相关联的信息,以sink_attributes为例:
CSR8670项目实战:BlueAgBatC蓝牙发射器&BLE遥控器
当sink与某个蓝牙设备配对后,会存储蓝牙连接信息到PSKEY中。sink和source的蓝牙角色定义不同,attributes差异很大。需要sink的sink_attributes替换成source的attributes,同时把与gatt相关的属性添加到attributes中。

难点二:自动回连动作受到BLE连接加密方式的影响。BLE连接有加密和非加密连接这两种方式,当使用加密连接时,BLE遥控器的连接信息会存储在单独attributes中,并加入一个BLE whitelist。在开机时,会自动尝试连接此whitelist中的最高优先级的设备。当使用非加密连接时,BLE遥控器的信息不会储存,每次开机时需自动进入BLE扫描模式,找到BLE遥控器并连接。

4. 总结和展望

  • 受益于CSR8670软件架构的健壮性,此项目中提到的方法可以应用在其他BLE client协议,或者是让source工作在BLE server以提供BLE服务。
  • 考虑未来QCC30xx/51xx可能会提供source例程,此方法也可以应用在下一代芯片平台。