经典蓝牙相关接口说明
📎 原始文档:https://www.kdocs.cn/l/cimvjkvOqXae 经典蓝牙相关接口说明
一、经典蓝牙相关接口说明
经典蓝牙的具体流程和接口可以参考文档:蓝牙应用详细设计说明书.pdf 杰理蓝牙用户手册.pdf
1. 常用包括a2dp/hfp/avctp等标准协议。 - A2DP协议:A2DP(Advanced Audio Distribution Profile)是蓝牙协议栈中用于音频传输的一个标准化协议。它允许音源设备(Source,简称SRC)通过蓝牙将高质量的立体声音频流传输至接收设备(Sink,简称SNK)。例如,手机作为音源可以将音乐流发送至蓝牙耳机或车载音响等接收设备,实现无线播放。
- HFP协议:蓝牙免提协议(HFP,Hands-Free Profile)是用于支持免提通话的标准协议,广泛应用于车载蓝牙系统、蓝牙耳机等设备。HFP 提供了拨号、接听电话、挂断电话以及语音拨号等功能,同时支持同步手机电量、信号等状态信息。
2. 经典蓝牙协议控制函数接口和指令:
协议指令控制函数,用于控制经典蓝牙的音乐播放控制,通话接听控制等。
u32 user_send_cmd_prepare(USER_CMD_TYPE cmd, u16 param_len, u8 *param)
协议控制指令:用于区分是某一条实际功能的控制指令,如音乐播放的上一首,通话的接听等,指令全部在avctp_user.h文件中,具体可以实际看代码。
3、各协议参考示例
控制协议指令使用demo,也可以参考蓝牙应用详细设计说明书.pdf 文档说明使用
1. A2DP协议:
音频上一曲:

音频下一首:

音频暂停播放:
2. HFP协议:
通话接听:用于控制接听电话

通话挂断:用于控制挂断电话

通话拒接:用于控制挂断电话

回拨电话:(该指令为直接回拨手机最近通话号码)

拨号功能:(该指令为传递号码进行拨打电话号码)

三方通话:(三方通话功能)
手机三方通话功能是指在使用手机通话时,可以在不中断当前通话的情况下,主叫第三方,从而实现三方同时通话。这项功能需要手机支持三方通话功能,并且通常需要在手机上启动呼叫等待与保持功能。(具体可以百度查询)
蓝牙部分可以使用过HFP协议用于控制三方通话的接听控制,如下:
下面是控制三方通话挂断当前去接听另外一个的示例:其他指令发送接口相同。
user_send_cmd_prepare(USER_CTRL_HFP_THREE_WAY_ANSWER1, 0, NULL);
控制语音助手:用于控制手机的语音助手功能
3. AVCTP控制协议:
连接和断开a2dp:

链接和断开SCO链路:

断开连接:断开所有蓝牙连接

音量调节:用于跟手机同步音量

二、蓝牙相关功能开关
经典蓝牙开关: 宏定义表明为是否使能经典蓝牙
关闭和打开经典蓝牙接口
经典蓝牙回连功能
经典蓝牙各协议开关: 根据实际需求来决定开启与否

蓝牙发射器开关: 一般是带有本地播放的会使用这个功能。

经典蓝牙sniff 功能开关: 此功能是蓝牙是否能进入sniff 功能,关闭则不进如sniff 低功耗,功耗会增大。

一键连接功能: 此功能是用于手机通过同一个mac 地址通过ble 桥接edr功能,专业名词CTKD

经典蓝牙后台功能:

经典蓝牙音量同步功能: 是设备与手机的音量同步更新调节功能

三、一键连接功能
1、一键连接的介绍
蓝牙CTKD是蓝牙4.2版本引入的一种交叉传输密钥派生的安全机制,全称 Cross-transport key derivation,主要用在蓝牙双模设备上,它可以跨越BLE和BT的边界,通过将BLE配对生成的LTK转化成BT配对的LinkKey,从而直接实现BT的配对,当然也可以通过BT配对生成的LinnkKey转化成BLE的LTK来实现BLE的配对,目前我们主要研究和使用前者。通过CTKD可以通过一次配对将BT和BLE两个链路都配对上,从而提升蓝牙双模设备的配对体验。
2、一键连接的应用
主要应用在蓝牙双模设备上,如蓝牙耳机、蓝牙手表上,通过手机APP连接BLE,并通过BLE的配对转化生成BT的配对密钥,从而实现一次配对完成BT和BLE的配对,提升双模产品的配对体验。
3、一键连接的要求
可百度查最新资料 一种更优雅的蓝牙配对技术 - Cross-transport key derivation (CTKD)-CSDN博客
设备要求:BT和BLE的MAC地址必须保持一致
手机系统要求:
IOS系统:版本要求在 IOS13以上。
安卓系统:版本要求Android 11以上。
4、固件代码配置
使能CTKD一键连接功能,保证BT 和BLE使用相同mac地址。
ble广播中需要将广播类型改为双模类型,标志位要设置为0x0A
加密方式配置
5、一键连接回连流程
一键连接ios和安卓走的是两种不同的方式,因此回连方式也不尽相同。
1. ios的一键连接回连
ios的ble是由手机回连的,然后手机回连ble后,固件会判断是否为苹果系统,然后启动固件端的edr的回连。
2. 安卓的一键连接回连 安卓端的一键连接回连,由于ble不配对,因此手机不会主动回连ble,需要app那边扫描ble并连接。edr的回连方式也有两种:1.固件端回连;2.手机端回连。
1.固件端回连。如果采取这一种方式,可以在客户连上ble时,发一个自定义指令下来,让固件调用bredr_conn_last_dev去回连上一个设备。但因为有部分手机会主动回连edr,因此固件的回连和手机的主动回连可能会相撞,此点需要注意,因此更推荐第二种回连方式。
2.手机端回连。即手机app主动发起edr的连接,此方式效果更佳,公版宜动健康目前也是采用此方式。
6、APP端一键连接
一键连接app端是否需要修改
安卓app资料链接:一、前言 — 杰理健康开发文档(Android) 1.9.0 documentation (zh-jieli.com)
ios app 资料链接: 1. 前言 — 杰理健康开发文档(iOS) v1.8.0 文档 (zh-jieli.com)

安卓和ios app如果使用自定义蓝牙连接是需要根据上述文档添加对应的流程。如果使用杰理蓝牙连接库,请更新到最新版即会包含此功能。
7、一键连接经典问题处理
1. 安卓无法连接edr
有以下几种情况:
1. app端配对了ble,这个时候会走ctkd流程,部分手机不支持,导致无法连接edr。可以看看log中是否有这个打印,如果有这个打印,那说明安卓是发起了ble配对而不是edr配对。首先要保证4中的广播包修改是否为0x0A,然后检查app端是否有按照6中的修改。
2. 开了TCFG_USER_BLE_CTRL_BREDR_EN宏,或者自己平时加了处理,导致edr关闭。ble连接的过程中,没打开edr,导致edr连不上。可在下图位置添加打印,看看是否有跑到此处,打开edr。 
四、蓝牙发射emitter相关应用
蓝牙发射器功能是经典蓝牙作为主机,链接其他的耳机和音箱实现控制音箱a2dp音乐和hfp通话的功能,具体使用根据实际需求,发射器对天线的信号要求比较高,需要确保天线部分的信号良好。
- 发射器的参考文档 发射器接口设计说明文档.pdf
本文档主要介绍发射的相关函数功能接口,如搜索,链接,播放控制,通话功能实现等
五、蓝牙认证
本文档为保密信息,未经授权,请勿转发或告知第三方。非常感谢!
This electronic documentation and any attachments are confidential and may be legally privileged or otherwise protected from disclosure. If you are not the intended recipient, please do not disclose the contents to anyone。
Thank you for your cooperation!
解析权归杰理所有!
The analysis right belongs to JieLi Technology Co., Ltd.