我目前正在为 iOS 开发一个 BLE 应用程序。在我的应用程序中,我需要实现一个分段协议来使用 BLE 发送大量数据。我的应用程序需要具有中心角色。
我的问题是我无法获得协商 MTU。我可以得到maximumWriteValueLength
我的外围设备,但它比我的大,找不到maximumWriteValueLength
我的中心对象。
有人知道找到协商 MTU 的方法或访问CBCentral
my 对象的方法CBCentralManager
吗?
我目前正在为 iOS 开发一个 BLE 应用程序。在我的应用程序中,我需要实现一个分段协议来使用 BLE 发送大量数据。我的应用程序需要具有中心角色。
我的问题是我无法获得协商 MTU。我可以得到maximumWriteValueLength
我的外围设备,但它比我的大,找不到maximumWriteValueLength
我的中心对象。
有人知道找到协商 MTU 的方法或访问CBCentral
my 对象的方法CBCentralManager
吗?
iOS 会在连接后自动启动 MTU 交换。
运行 iOS < 10 的设备将请求 MTU 大小为 158。运行 iOS 10 的较新设备将请求 MTU 大小为 185。
假设您连接的设备支持这些尺寸,这就是您应该看到的。
您应该能够通过查看maximumUpdateValueLength
. CBCentral
(注意这将比 ATT MTU 少 3 个字节,因为这是 ATT 通知/指示的开销)
我不知道你是否正在寻找这个。但就我而言,我要求外围设备发送此消息:
print("Max write value: \(peripheral.maximumWriteValueLength(for: .withResponse))")
我会回答有同样问题的人。
现在(2017 年 2 月)iPhone 在外围角色中的 MTU 始终为 158。所以我在简短的解决方案中发现(只是为了进行一些测试)是将中央 MTU 与 158 进行比较并取较小的那个。对于解决方案,更稳定的外围设备会将 MTU 大小写入特定特征中,我将在连接后读取该特征。