上下文: - iPhone 5c 上的 iOS 7.1.2 - 葡萄糖测量“外围”(BT LE) - 设备和外围设备已配对(引入代码) - 外围设备上/其中有 >= 1 条记录。 - 下面描述的行为被复制了好几次。外设只有一个记录,同时又做了两个新记录。读取的结果(characteristic.value's)始终相同。
我正在尝试通过以下方式使用 iOS 设备从外围设备读取(接收)记录:
- 让葡萄糖外围设备尝试将其记录发送到我的 iOS 设备。
- 在 iOS 设备上发现并连接到相关外围设备(葡萄糖服务 0x1808)。
- 在
peripheral:didDiscoverServices:error:
中发现特征,它们是葡萄糖测量 (0x2A18)、葡萄糖测量上下文 (0x2A34)、< em>葡萄糖特征 (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:
委托(delegate)方法,更新值是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:
Glucose Measurement 特征,包括记录。在请求记录后,我尝试再次调用 [_peripheral setNotifyValue:YES forCharacteristic:characteristic]
调用该特性。
有人看到我的错误在哪里吗?有没有人(在 iOS 上)实现了我想要实现的目标?
另一件事是 BT glucose service specification .如果有人能启发我如何解释我得到的响应(意味着 Record Access Control Point 特性的更新值),我将不胜感激。因为我什至不确定 characteristic.value
中字节的顺序(例如,当它们通过 NSData< 的
)。
我想我正在按照 Glucose Profile specification 中描述的过程进行操作所以我真的很茫然。getBytes:length:
方法读取时
非常感谢您!
最好的问候, 加布里埃尔
最佳答案
遇到同样的问题,我无法弄清楚如何解释 06000105 值,但我认为这是某种错误响应代码。
对我来说解决问题的方法是排除操作数(如果它为空),并且只使用操作码和运算符:
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
关于iOS BLE 无葡萄糖测量通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25165857/