内容:
-iPhone 5c上的iOS 7.1.2
-测量“外围”的葡萄糖(BT LE)
-设备和外围设备已配对(引入了代码)
-外围设备上有超过= 1条记录。
-重复了下述行为。外围设备只有一个记录,并且也有两个新记录。读取的结果(characteristic.value的值)始终相同。
我正在尝试通过以下方式使用iOS设备从外围设备读取(接收)记录:
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上,似乎还必须将“客户端特征配置”描述符设置为进行通知和/或指示,但是尝试其中的任何一种都会导致异常,并且会出现一条消息,提示您应使用外围设备上的
setNotifyValue:forCharacteristic:
在特征本身上设置通知。我的主要问题是,没有包括记录在内的Glucose Measurement特性的
peripheral:didUpdateValueForCharacteristic:error:
回调。我请求记录后,尝试在该特征上再次调用[_peripheral setNotifyValue:YES forCharacteristic:characteristic]
。有人看到我的错误在哪里吗?是否有人(在iOS上)实现了我要实现的目标?
另一件事是BT glucose service specification。如果有人能启发我理解如何解释响应(表示记录访问控制点特性的更新值),我将不胜感激。由于我什至不确定
characteristic.value
中的字节按什么顺序来排列(例如,当通过getBytes:length:
的NSData
方法读取它们时)。我认为我正在按照Glucose Profile specification中描述的过程进行操作,因此我真的很茫然。
提前非常感谢您!
最好的祝福,
加布里埃尔
最佳答案
遇到相同的问题,我无法解决如何解释06000105值的问题,但是我认为这是一种错误响应代码。
对我而言,解决此问题的原因是,如果操作数为null,则排除它,而仅使用操作码和操作符:
char buffer[2];
// Op Code: 0x01 report stored records
buffer[0] = 0x01;
// Operator: 0x01 All records, 0x06 last one
buffer[1] = 0x01;
NSData *data = [NSData dataWithBytes:buffer length:2];
...
然后所有记录都按预期方式流入了didUpdateValueForCharacteristic