问题描述我有一个 BLE 设备。我想和它交流。
我的Android应用程序代码:
device.connectGatt(context, false, ...)
如果设备处于配对模式,我可以连接到它。但是,如果我想使用相同的代码连接到已配对的设备,则会收到错误消息。
完全相同的用例在我的 Linux PC 上运行良好,设备处于配对和非配对模式。 (我用过Python 关贸总协定模块 for it)
我已经转储了蓝牙流量,并且在连接过程中发现了一些差异。
Linux/未配对
- 发送:LE 创建连接
- Rcvd:命令状态(LE 创建连接)
- Rcvd:LE Meta(LE 连接完成)
- 发送:LE 读取远程功能
- Rcvd:LE Meta(LE 通道选择算法)
- Rcvd:命令状态(LE 读取远程功能)
- Rcvd:LE Meta(LE 读取远程功能完整)
- 发送:LE 开始加密
安卓/配对
- 发送:LE 创建连接
- Rcvd:命令状态(LE 创建连接)
- Rcvd:LE Meta(LE 增强连接完成)
- 发送:LE 读取对等可解析地址
- Rcvd:命令完成(LE 读取对等可解析地址)
- 发送:LE 读取远程功能
- Rcvd:命令状态(LE 读取远程功能)
- Rcvd:LE Meta(LE 读取远程功能完整)
- 发送:读取远程版本信息
- Rcvd:命令状态(读取远程版本信息)
- Rcvd:读取远程版本信息完成
- 发送:LE 开始加密
安卓/未配对
- 发送:LE 创建连接
- Rcvd:命令状态(LE 创建连接)
- Rcvd:LE Meta(LE 增强连接完成)
- 发送:LE 读取对等可解析地址
- Rcvd:命令完成(LE 读取对等可解析地址)
- 发送:LE 读取远程功能
- Rcvd:命令状态(LE 读取远程功能)
- Rcvd:LE 元(LE 读取远程功能完成)
所以我决定比较一下内容
LE Meta(LE 读取远程功能完整)
所有 3 次尝试的数据包:
Linux/未配对:支持的 LE 功能:0x0000000000004105、LE 加密、扩展拒绝指示、LE 2M PHY、通道选择算法 #2
安卓/配对:支持的 LE 功能:0x0000000000000005、LE 加密、扩展拒绝指示
安卓/未配对:支持的 LE 功能:0x00000000000000ef、LE 加密、连接参数请求过程、扩展拒绝指示、从机启动的功能交换、数据包长度扩展、LL 隐私、扩展扫描仪过滤策略
有谁知道我该如何解决这个问题?
“连接建立失败”是指主机发出CONNECT_IND以响应ADV_IND后,从机似乎没有响应主机发出的任何数据包。发生这种情况的原因可能是某些硬件或固件故障、信号质量差,或者外围设备使用白名单来忽略来自不需要的设备的连接。没有其他原因导致此错误发生。
如果外围设备正在使用白名单,请确保它正确处理可解析的地址。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)