有没有办法将iOS上的MTU值从缺省值更改为任意值?
就像在安卓系统中一样,可以做requestMTU(512)。
谢谢
发布于 2021-07-15 07:05:09
不,iOS上的MTU是自动设置的,最大值为185。这是对你问题的一个很好的回答:https://stackoverflow.com/a/42336001/10380092
注意:您可以这样获得MTU值(它将比ATT少3个字节):
connectedPeripheral.maximumWriteValueLength(for: .withoutResponse)
使用参数.withoutResponse
很重要,因为.withResponse
将始终返回512 (在写入响应时,iOS会自动选择以下方法:如果数据比MTU短,则单独写;如果数据大于MTU,则排队写)。
发布于 2021-09-27 15:25:59
这不是一个答案,但它是有趣的,而不是越来越少。这是苹果工程师对这个问题提出的请求的答复。
嗨,
是的,你所看到的问题确实是由于我怀疑的时间问题/种族状况造成的。您获得DPLE和MTU的原因几乎是同步的,因为iOS太早收到了MTU请求,而且由于它无法确定连接是否支持EDL,所以它以最小的响应响应。
在iOS 15中,这个争用条件被不同的处理,并且在链接准备就绪之前,MTU响应被推迟。从技术上讲,外围设备并没有做错什么,因为规范允许在任何时候发送MTU请求。就在iOS 14上,在不同的设备上,这个问题可能会弹出。
我不能告诉你不要在那个时候发送MTU请求,因为规范允许它。iOS 15正在以一种绕过这些问题的方式来处理这个问题。
将MTU请求延迟到PHY更新可能会降低问题发生的可能性,但不能保证它永远不会发生。这里的根本问题是HCI事件(如PHY或EDL更改)是由每个控制器本地发出的,因此无法保证仅仅因为您的外围设备报告了iPhone控制器也这样做了。不幸的是,这个时间/比赛的问题将是不同的控制器到控制器,因此从电话到电话。
所以我希望能帮上忙。我们正在开发的BLE外围设备几乎同时发送用于连接协商的所有命令。这就是导致我们无法获得数据长度扩展的原因。
https://stackoverflow.com/questions/68375433
复制相似问题