我目前正在为 iOS 开发一个 BLE 应用程序。在我的应用程序中,我需要实现一个分段协议来使用 BLE 发送大量数据。我的应用程序需要具有中心角色。
我的问题是我无法获得协商 MTU。我可以得到maximumWriteValueLength我的外围设备,但它比我的大,找不到maximumWriteValueLength我的中心对象。
有人知道找到协商 MTU 的方法或访问CBCentralmy 对象的方法CBCentralManager吗?
我目前正在为 iOS 开发一个 BLE 应用程序。在我的应用程序中,我需要实现一个分段协议来使用 BLE 发送大量数据。我的应用程序需要具有中心角色。
我的问题是我无法获得协商 MTU。我可以得到maximumWriteValueLength我的外围设备,但它比我的大,找不到maximumWriteValueLength我的中心对象。
有人知道找到协商 MTU 的方法或访问CBCentralmy 对象的方法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 大小写入特定特征中,我将在连接后读取该特征。