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