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