[peripheral maximumWriteValueLengthForType:CBCharacteristicWriteWithResponse]返回什么?

时间:2016-12-22 18:41:51

标签: ios objective-c bluetooth-lowenergy

我正在运行以下代码:

[peripheral maximumWriteValueLengthForType:CBCharacteristicWriteWithResponse];

在我的情况下(iPhone 7,iOS 10.0.2),它返回512.这个号码是什么意思?

来自文档:

  

方法maximumWriteValueLengthForType:

     

可以在单个写入类型中发送到特征的最大数据量(以字节为单位)。

但是,如果我尝试发送500600 bytes,它的工作方式完全相同。目标设备接收所有数据。在这两种情况下都不会调用响应回调。

1 个答案:

答案 0 :(得分:1)

据我了解,理论上它应该返回ATT MTU大小,因为它是从中心到外围设备的请求。从外围方面来看,类似的值为central.maximumUpdateValueLength,建议避免发送特征值大于central.maximumUpdateValueLength的通知。但不幸的是,这并没有明确记录,而Apple自己的例子(BTETransfer应用程序)使用默认的ATT MTU大小为20是安全的。对于通知,我认为,如果您尝试更改超过central.maximumUpdateValueLength个字节,可能会发生错误。

但是从我在Android上的实验中,我发现从另一端 - 中心端 - 正在进行某种缓存,并且可以发送比当前ATT MTU大小更多的字节(在Android上,它可用通过onMtuChanged,似乎也可以在连接后立即协商到512。因此,我们可以假设在iOS上进行相同类型的缓存,但我不确定它可以达到多大。在Android上,我们至少有写回调来知道何时可以安全地写入更多数据。在iOS上,不确定如果我们尝试写入会发生什么,让我们说中心端的可写特性为1MB。但我今天会试试。

此外,iOS版本的行为可能会有所不同,因为自iOS 7以来central.maximumUpdateValueLength可用,但自iOS 9以来只有peripheral maximumWriteValueLengthForType