[iOS] [BLE]获取谈判MTU

时间:2017-02-01 10:46:34

标签: ios bluetooth-lowenergy mtu

我目前正在iOS中开发BLE应用。 在我的应用程序中,我需要实现一个分段协议来使用BLE发送大数据。 我的应用程序需要具有中心角色。

我的问题是我无法获得谈判MTU。我可以得到我的外围设备的maximumWriteValueLength但它比我的更大,并且无法找到我的中心对象的maximumWriteValueLength。

有人知道找到协商MTU的方法或访问我的CBCentralManager的CBCentral对象的方法吗?

3 个答案:

答案 0 :(得分:7)

iOS会在连接时自动启动MTU交换。

运行iOS<的设备10将要求MTU大小为158。 运行iOS 10的较新设备将要求MTU大小为185。

假设您所连接的设备支持这些尺寸,那就是您应该看到的。

您应该能够通过查看maximumUpdateValueLength的{​​{1}}属性来确定协商的最大有效负载大小。 (注意这将比ATT MTU少3个字节,因为这是ATT通知/指示的开销)

答案 1 :(得分:0)

我不知道您是否正在寻找这个。但就我而言,我要求外围设备发送此消息:

print("Max write value: \(peripheral.maximumWriteValueLength(for: .withResponse))")

答案 2 :(得分:-1)

我会回答有同样问题的人。

目前(2017年2月),外围角色的iPhone MTU始终为158。 所以我在简短的解决方案(仅进行一些测试)中发现的是将中央MTU与158进行比较并采用较小的MTU。 对于一个解决方案,更稳定的外设会将MTU大小写入我将在连接后读取的特定特性内。