iOS 确定 CBCharacteristic 的数据长度

iOS determine data length of CBCharacteristic

有什么方法可以动态嗅探出 CBCharacteristic 的数据长度吗?

我正在改进我拥有的小工具上的特性 API,我想更改其中一个特性的字段宽度。如果我在 iOS 端进行更改,使其写入 9 个字节而不是 7 个字节的值,则具有旧 API(特征字段宽度为 7)的设备会导致以下情况当我尝试写入值时发生:

Error Domain=CBATTErrorDomain Code=13 "The value's length is invalid." UserInfo={NSLocalizedDescription=The value's length is invalid.}

我想确定的是我是否可以捕获该错误,然后以某种方式查询 CBCharacteristic 其当前字段宽度是多少。显然在某个时候,它确定 9 > 7 并导致错误冒出来。我试过阅读与特征相关的描述符,但只有一个描述符 (<CBDescriptor: 0x2830cbe40, UUID = Client Characteristic Configuration, value = 2>) 并不能告诉我太多信息。

这是外围设备而非 iOS 生成的标准 ATT 协议错误。这意味着您发送了一个值,外围设备响应该值的长度错误。特性不一定具有特定的长度。正确的长度可能取决于上下文。例如,特征可能接受 2 个字节、4 个字节或 8 个字节。如果你写 7 个字节,它可能 return 这个错误。或者第一个字节可能是命令选择器,其余字节可能是该命令需要具有特定长度的有效负载。这些设计没有简单的“这个特性的长度是多少”。

没有通用的方法可以知道远程服务需要什么。您需要通过 API 文档了解这一点。这相当于从 HTTP 服务器返回 405 Method not allowed 错误。由您决定允许使用哪些方法。一个特定的系统可能会为您提供查询它的方法,也可能不会。它不是 HTTP 规范的一部分,同样也不是 BLE 规范的一部分。