在Android和iOS中央/外围设备上实际协商蓝牙LE ATT MTU

时间:2017-03-23 08:36:12

标签: android ios bluetooth bluetooth-lowenergy mtu

在Android上我们有requestMtuonMtuChanged,这似乎暗示我们必须手动协商MTU大小,如果中央和外围设备都是基于Android的(但我可能错了并且可能是在没有我干预的情况下也会在连接时自动发生)。 requestMtu的文档仅讨论写请求(无响应写)操作,并未提及通知,并且还表示它适用于"连接"但是没有提到它是来自中心还是外围。 因此,它不清楚,连接的哪一方可以/应该使用requestMtu以及它如何影响通知大小和写入大小?

在iOS上,似乎没有requestMtu的直接替代品,我们只有central.maximumUpdateValueLength(因为iOS 7,我猜)。它的文档(与Android版相反)表示maximumUpdateValueLength仅用于通知更新,这意味着它仅在外围设备上有用,因为您从外围设备向中心发送通知。 但写作怎么样?如果我从中心到外设写入(再次没有响应)特征,我如何知道我的批量大小以确保有效写入?

考虑到混合系统(Android / iOS中央/外围设备),这一切都让人感到困惑,并且不清楚哪一方以及何时可以/应该请求/对MTU大小协商作出反应。 是否有任何文档描述ATT MTU交换选项,这些选项对应于真正的Android和iOS实现?

2 个答案:

答案 0 :(得分:1)

Asper我的理解requestMtu()应该从中心角色设备启动,因为它知道它将接收多少数据。通常,在任何客户端服务器模型中,始终是客户端告知或协商会话参数。因此,我觉得即使在BLE的情况下,同样的规则也适合。

答案 1 :(得分:0)

根据BLE标准,双方可以交换MTU。当设备充当客户端和服务器时,相同的MTU都适用。