iOS 会保证完整交付 BLE 特征值吗? [关闭]

Posted

技术标签:

【中文标题】iOS 会保证完整交付 BLE 特征值吗? [关闭]【英文标题】:Will iOS guarantee complete delivery of a BLE characteristic value? [closed] 【发布时间】:2018-04-13 21:23:08 【问题描述】:

当我问 ios BLE 特性的最大值长度是多少时,它通常会给我一个超过 20 个字节的数字。通常它在 150 或 200 左右。这意味着 iOS 已经可以将长特征值分解成数据包大小的块并一一发送。但是 iOS 能保证完整交付吗?我问是因为我听说如果发生任何错误,某些 BLE SoC 设备会在特征传输过程中完全断开连接。是什么控制了这种行为? iOS 可以从断开的连接中恢复还是不尝试?

【问题讨论】:

规范是怎么说的?什么具体不清楚或 iOS 如何偏离规范? 【参考方案1】:

如果连接在完成之前终止,则 GATT 事务将被取消。

如果断开连接,iOS 不会自动重新连接到从设备;您将需要重新连接并尝试再次执行 GATT 操作。

请注意,GATT 写入是原子的,这意味着要么写入完整的值,要么什么都不写入。

【讨论】:

但是为什么会因为丢包这样的错误而断开连接呢?或者这只是对 BLE 工作原理的误解? BLE 的链路层以不会有任何丢包的方式构建。一个数据包被反复发送,直到远程设备确认该数据包。之后,发送队列中的下一个数据包。但如果远程设备在监督超时内没有确认,则认为连接丢失。此外,在堆栈中较高的 ATT/GATT 层,如果在请求后 30 秒内未收到响应,则允许断开连接。但在你的情况下,它似乎是一些有问题的设备。

以上是关于iOS 会保证完整交付 BLE 特征值吗? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 中监听多个连接的 BLE 设备的特征值变化

如何从 Swift 中的 BLE 外设特征写入回调中提取数据?

如何在 iOS 应用程序中快速写入 BLE 特征

iOS BLE 蓝牙 8.1 及更低版本 BLE 订阅特征通知无响应

来自 2 个 BLE 设备的 ios 通知

ios BLE读取蓝牙地址