【发布时间】:2014-09-29 17:04:39
【问题描述】:
上下文: - iPhone 5c 上的 iOS 7.1.2 - 葡萄糖测量“外围”(BT LE) - 设备和外围设备已配对(引入代码) - 外围设备上有 >= 1 条记录。 - 下面描述的行为被复制了好几次。外围设备只有一个记录,并且还制作了两个新记录。读取的结果(characteristic.value's)总是相同的。
我正在尝试通过以下方式使用 iOS 设备从外围设备读取(接收)记录:
- 让葡萄糖外围设备尝试将其记录发送到我的 iOS 设备。
- 发现并连接到 iOS 设备上的相关外围设备(葡萄糖服务 0x1808)。
- 在
peripheral:didDiscoverServices:error:中发现特征,即葡萄糖测量 (0x2A18)、葡萄糖测量上下文 (0x2A34)、葡萄糖特征 (0x2A51 ) 和 记录访问控制点 (0x2A52) - 在
peripheral:didDiscoverCharacteristicsForService:error:中迭代所有特征并读取这些特征的值(通过[_peripheral readValueForCharacteristic:characteristic]) - 致电
[_peripheral setNotifyValue:YES forCharacteristic:characteristic](除了“葡萄糖功能”特性之外的所有功能)。当“所有内容都已加载”时,这是通过单击按钮触发的。 -
通过“记录访问控制点”请求可用的记录数(由用户触发),例如:
char buffer[3]; // Op Code: 0x04 report number of stored records buffer[0] = 0x04; // Operator: 0x01 All records buffer[1] = 0x01; // Operand: 0x00 n/a buffer[2] = 0x00; NSData *data = [NSData dataWithBytes:buffer length:3]; [_peripheral writeValue:data forCharacteristic:characteristic type:CBCharacteristicWriteWithResponse]; - 回调调用
peripheral:didUpdateValueForCharacteristic:error:委托方法,更新值为06000405。我不完全理解相关规范(见下面的链接),所以我无法解释我自己的响应,但 LSO(最低有效八位字节)中的 5 或 6 将意味着“成功”(或至少不是错误)。 -
触发对所有存储记录的请求(由用户触发)如:
char buffer[3]; // Op Code: 0x01 report stored records buffer[0] = 0x01; // Operator: 0x01 All records, 0x06 last one buffer[1] = 0x01; // Tried 0x06 as well with the same result // Operand: 0x00 n/a buffer[2] = 0x00; NSData *data = [NSData dataWithBytes:buffer length:3]; [_peripheral writeValue:data forCharacteristic:characteristic type:CBCharacteristicWriteWithResponse]; - 回调调用
peripheral:didUpdateValueForCharacteristic:error:,更新值为06000105。将第二个八位字节从0x01更改为0x06给出了相同的响应(值)。我也无法理解/解释。 - 没有任何事情发生。 葡萄糖测量和葡萄糖测量上下文都没有。
注意:在 Android 上,似乎还必须将 Client Characteristic Configuration 描述符设置为 notify 和/或 indicate,但尝试任一这会导致异常和一条消息,提示应在外围设备上使用 setNotifyValue:forCharacteristic: 在特征本身上设置通知。
我的主要问题是,包括记录在内的葡萄糖测量 特征上没有对peripheral:didUpdateValueForCharacteristic:error: 的回调。在请求记录后,我尝试再次针对该特征调用 [_peripheral setNotifyValue:YES forCharacteristic:characteristic]。
有人知道我的错误在哪里吗?有没有人(在 iOS 上)实现了我想要实现的目标?
另一件事是BT glucose service specification。如果有人能告诉我如何解释我得到的响应(意味着 Record Access Control Point 特征的更新值),我将不胜感激。因为我什至不确定characteristic.value 中的字节以什么顺序出现(例如,当它们通过NSData 的getBytes:length: 方法读取时)。
我想我正在遵循Glucose Profile specification 中描述的过程,所以我真的很茫然。
非常感谢您!
最好的问候, 加布里埃尔
【问题讨论】:
标签: ios objective-c bluetooth bluetooth-lowenergy