蓝牙连接问题
📎 原始文档:https://www.kdocs.cn/l/cdwhVk7bEprD 蓝牙连接问题
蓝牙连接问题
本文档主要介绍了sdk中有关一键连接,以及edr和ble连接,回连的策略和流程。客户可在文档下留言,会动态对文档进行改动。
- TCFG_USER_BLE_CTRL_BREDR_EN宏的作用
开启该宏,主要有以下功能:1.开机默认关闭edr;2.若开启蓝牙后一段时间内未连接,则自动关闭;3.连接ble时,唤醒edr,可搭配一键连接使用,此时唤醒edr,可实现同时连上ble和edr。
下面介绍以下,各功能实现流程: - 开机默认关闭edr
sdk流程中,是在BLE_ST_INIT_OK这个状态回调中调用bt_close_bredr进行关闭edr的操作。 - 开启蓝牙后一段时间内未连接,则自动关闭
通过定义BT_BREDR_INTI_TIMEOUT_MS这个宏来开启,自动关闭的定时器。该宏的含义就是自动关闭的时间,默认是60s,可自行修改。 - 连接ble时,唤醒edr
sdk流程中,是在BLE_ST_CONNECT这个状态回调中调用bt_init_bredr进行开启edr的操作 - TCFG_BLE_BRIDGE_EDR_ENALBE宏的作用
开启该宏,即是开启一键连接功能,开启该功能后,需要注意两个点,这些sdk中是默认开启的,有时客户可能会改动到: - 广播包中ble的标志位要设置为0x0A,将ble的类型设为双模
这个修改对安卓的一键连接至关重要!!!
2.配对参数要修改
修改ble的加密参数。
sdk中的回连流程
回连接口使用
回连一般使用该接口,会记忆上一个设备的mac地址,并回连设置界面蓝牙开关回连流程

开机时自动回连流程

一键连接回连流程 一键连接ios和安卓走的是两种不同的方式,因此回连方式也不尽相同。
ios的一键连接回连
ios的ble是由手机回连的,然后手机回连ble后,固件会判断是否为苹果系统,然后启动固件端的edr的回连。- 安卓的一键连接回连 安卓端的一键连接回连,由于ble不配对,因此手机不会主动回连ble,需要app那边扫描ble并连接。edr的回连方式也有两种:1.固件端回连;2.手机端回连。
1.固件端回连。如果采取这一种方式,可以在客户连上ble时,发一个自定义指令下来,让固件调用bredr_conn_last_dev去回连上一个设备。但因为有部分手机会主动回连edr,因此固件的回连和手机的主动回连可能会相撞,此点需要注意,因此更推荐第二种回连方式。
2.手机端回连。即手机app主动发起edr的连接,此方式效果更佳,公版宜动健康目前也是采用此方式。
- 安卓的一键连接回连 安卓端的一键连接回连,由于ble不配对,因此手机不会主动回连ble,需要app那边扫描ble并连接。edr的回连方式也有两种:1.固件端回连;2.手机端回连。
一键连接相关问题
一键连接app端是否需要修改 安卓app资料链接:一、前言 — 杰理健康开发文档(Android) 1.9.0 documentation (zh-jieli.com)
ios app 资料链接: 1. 前言 — 杰理健康开发文档(iOS) v1.8.0 文档 (zh-jieli.com)

答:需要的,安卓和ios app如果使用自定义蓝牙连接是需要根据上述文档添加对应的流程。如果使用杰理蓝牙连接库,请更新到最新版即会包含此功能。
- 安卓无法连接edr 答:有以下几种情况:
- app端配对了ble,这个时候会走ctkd流程,部分手机不支持,导致无法连接edr。可以看看log中是否有这个打印,如果有这个打印,那说明安卓是发起了ble配对而不是edr配对。首先要保证2.1中的广播包修改是否为0x0A,然后检查app端是否有按照5.1中的修改。

- 开了TCFG_USER_BLE_CTRL_BREDR_EN宏,或者自己平时加了处理,导致edr关闭。ble连接的过程中,没打开edr,导致edr连不上。可在下图位置添加打印,看看是否有跑到此处,打开edr。
