5

蓝牙核心规范 V4.0 卷3 G 部分第 4.9.3 节规定,对于具有响应的特征值的写入,使用属性协议写入请求程序。

Bluetooth Core Spec V4.0 Vol 3 Part F 第 3.3.2 节描述,

一旦客户端向服务器发送请求,在收到响应 PDU 之前,该客户端不得向同一服务器发送其他请求。

我想使用 CoreBluetooth 在 iOS 应用程序中写入多个响应值。我必须自己管理这个规范吗?或者我可以简单地使用- writeValue:forCharacteristic:type一次写入所有值,iOS 管理每个请求仅在前一个请求处理后发送?

我以某种方式猜测 iOS 会管理它,因为根据蓝牙核心规范 V4.0 Vol 3 Part F 第 3.4.5.2 节写入响应不包含指向书面特征的链接。但是,该- peripheral:didWriteValueForCharacteristic:error方法表明 iOS 以某种方式跟踪响应链接到的特征。

有人可以确认或否认这一点吗?

4

2 回答 2

2

我认为在与 CB 打交道时,您无需过多担心 ATT/GATT。原因是许多使用 CB 的人无法访问蓝牙核心 4.0 规范,他们也不希望阅读它们。

CB 知道如何关联特征的原因是协议规定每个命令和响应都是配对的。当您发送命令时,您将收到响应。

因此,您可以多次使用 writeValue,CB 会为您正确排队调用,即它会在下一次写入之前等待 ATT 层的响应。并且委托回调保证与执行写入的顺序相同。

于 2012-07-25T18:59:48.487 回答
1

我能够编写“带有响应的多个请求”,即

[自外设] writeValue:valueToWrite forCharacteristic:dataPointCharacteristic type:CBCharacteristicWriteWithResponse];

集中在一起——实际上我发送了其中的 14 个——并且他们都在延迟后返回了回复。但是 - 写入响应不包含写入特征的数据 - 即 - 只有特征内的值在响应中无效。

似乎接近注释“根据蓝牙核心规范 V4.0 第 3 部分 F 部分第 3.4.5.2 节,写入响应不包含指向书面特征的链接”,但有一个区别是只有 [characteristc 值]不正确 - 但 ios 在内部处理了排序。因此,使用写响应(即 BLE 确认)来连接排序逻辑以处理接下来要执行的一系列步骤似乎并不可行。

所以 - 要点是 - 如果您要求 BLE 向外围设备“writeWithReponse”消息“Do Task #1”,则来自外围设备的 BLE 响应是“OK!”。响应并没有告诉您外围设备收到消息“执行任务 #1”,而是类似于 -是的,我明白了您的意思。我懒得重复你发给我的确切命令:)

于 2014-09-04T15:59:10.443 回答