在OS X 10.11 El Capitan上,蓝牙低功耗的延迟问题

4
我一直在开发一个Mac OS X应用程序,通过蓝牙低功耗(Bluetooth Low Energy)向硬件设备发送连续命令。在Yosemite上,该应用程序运行良好,命令传输的往返延迟时间为7-12毫秒。命令以最小2秒和最大0.2秒的稳定间隔发送到自定义BLE服务。
现在,我已经有几个月没有开发了(该应用程序尚未上线),然后升级到了El Capitan,现在同样的应用程序延迟时间为500-1500毫秒,这使得整个过程完全无法使用。我认为升级到El Capitan是原因,但我无法确定。
我检查了以下内容:
  • 我在多台运行El Capitan的MacBook Pro上进行了测试,延迟总是那么糟糕。
  • 无论发送到哪个服务(例如设备信息服务),命令的延迟都很高,并且每个消息发送时都会有很大的变化。
  • 无论我是使用我们自己的应用程序,第三方应用程序“LightBlue”发送十六进制字符串,还是苹果自己的“Bluetooth Explorer”开发者工具(可以在开发人员资源中下载),都没有影响。
请问有谁能提示我可能导致这种情况的原因,或者只是告诉我在他们的环境中一切正常吗?
要重现此问题,请连接到任何蓝牙低功耗设备,并向其发送数据的十六进制字符串。您需要以某种方式记录它或打开LED等,以查看是否存在显着的延迟。
非常感谢您的帮助!
2个回答

4
看起来El Capitan使用的连接参数与Yosemite下不同。
在OS X中,CoreBluetooth决定了给定设备使用的连接参数,而不管客户端应用程序。不幸的是,计算参数所依赖的规则有些不透明,并且取决于设备(暴露的服务,DIS,AD)。在El Capitan中可能有一些规则发生了变化。
一些你应该开始寻找的方向:
- Apple蓝牙配件设计指南详细介绍了苹果中心接受的连接参数规则, - 延迟问题也可能是由于高slaveLatency连接参数造成的。它有助于节省外围设备的电池寿命,但使中央到外围设备的延迟有些不可预测。您可以减少设备接受的Slave Latency, - Sniffer日志或外围设备端调试肯定会有助于理解Yosemite和El Capitan之间实际更改的参数。

谢谢你的提示和分析。我会查看文档,以便下次做好更充分的准备 :) - Julian Vogels

2
最终,苹果DTS帮助我解决了问题。他们提示我固件中“首选连接参数”设置不正确。
在早期版本的Yosemite上,这些值没有影响(与iOS相同),但自从某个OS更新以来,在Yosemite和El Capitan上读取了这些值。不设置参数解决了问题。
在我的情况下,默认情况下设置了这些值:
连接间隔:最小7.5毫秒,最大50毫秒
从机延迟:0毫秒
连接监督超时:10000
这些值导致了高延迟。以下是我必须在Cypress PSoC Creator 3.3中取消勾选的设置的屏幕截图(我正在使用PSoC 4 BLE)。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接