我一直在开发Mac OS X应用程序,该应用程序通过低功耗蓝牙向硬件设备连续发送命令。在Yosemite的支持下,该应用程序运行良好,命令传输的往返延迟为7-12 ms。该命令将以最少2秒和最多0.2秒的稳定间隔发送到自定义BLE服务。

现在,最近几个月我一直没有开发(该应用程序尚未发布),然后升级到El Capitan,现在该应用程序的延迟为500-1500毫秒,这使得整个应用程序绝对无法使用。我假设是升级到El Capitan的原因,但是我不确定。

我检查了什么:


我在运行El Capitan的多个MacBook Pro上进行了测试,并且延迟总是那么糟糕。
不管将命令发送到什么服务(例如设备信息服务),这些命令都有很高的延迟,并且每发送一条消息,它的差异就很大。
不管我使用我们自己的应用程序,使用名为“ LightBlue”的第三方应用程序发送十六进制字符串,还是苹果自己的“ Bluetooth Explorer”开发人员工具(都可以在Developer Resources中下载)。


谁能暗示我这可能是什么原因,或者只是告诉我在他们的环境中一切正常?
要进行复制,请使用Mac连接到任何支持Bluetooth Low Energy的设备,然后向其发送十六进制数据串。您必须以某种方式对其进行记录或打开一个LED左右,以查看是否存在明显的延迟。

任何帮助是极大的赞赏!

最佳答案

看起来El Capitan使用的“连接参数”与优胜美地不一样。

在OS X下,CoreBluetooth决定给定设备使用什么连接参数,而不管客户端应用程序如何。不幸的是,CoreBluetooth用来计算参数的规则有些不透明,并且取决于设备(公开服务,DIS,AD)。 El Capitan中的某些规则可能已更改。

您应该开始寻找的一些指导:


Apple Bluetooth Accessory Design Guidelines详细介绍了一些有关Apple Centrals接受的连接参数的规则,
延迟问题也可能是由于slaveLatency连接参数较高。它有助于节省外围设备的电池寿命,但会使Central-> Peripheral延迟有些不可预测。您可以减少设备接受的从属延迟,
嗅探器日志或外围设备端调试无疑将有助于了解Yosemite和El Capitan之间实际更改的参数。

07-27 13:51