iOS BLE无葡萄糖测量通知

时间:2014-08-06 16:50:21

标签: ios objective-c bluetooth bluetooth-lowenergy

上下文: - iPhone 5c上的iOS 7.1.2 - 葡萄糖测量“外围”(BT LE) - 设备和外围设备已配对(引入代码) - 外围设备上有> = 1条记录。 - 下面描述的行为被重复了几次。外围设备只有一个记录,并且还有两个新记录。读取的结果(characteristic.value)总是相同的。

我正试图通过以下方式使用iOS设备从外设读取(接收)记录:

  1. 让葡萄糖外设尝试将其记录发送到我的iOS设备。
  2. 在iOS设备上发现并连接相关的外围设备(葡萄糖服务0x1808)。
  3. peripheral:didDiscoverServices:error:发现特征,葡萄糖测量(0x2A18),葡萄糖测量上下文(0x2A34),葡萄糖特征 (0x2A51)和记录访问控制点(0x2A52)
  4. peripheral:didDiscoverCharacteristicsForService:error:中迭代所有特征并读取这些特征的值(通过[_peripheral readValueForCharacteristic:characteristic]
  5. 致电[_peripheral setNotifyValue:YES forCharacteristic:characteristic](除“葡萄糖特征”特征外)。当“已加载所有内容”时,通过单击按钮触发此操作。
  6. 通过“记录访问控制点”请求可用记录数(由用户触发),如:

            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];
    
  7. 回调调用peripheral:didUpdateValueForCharacteristic:error:委托方法,更新后的值为06000405。我不完全理解相关规范(见下面的链接),所以我无法解释我自己的反应,但LSO(最不重要的八位组)中的5或6意味着“成功”(或至少不是错误)。
  8. 触发所有存储记录的请求(由用户触发),如:

            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];
    
  9. 使用更新后的peripheral:didUpdateValueForCharacteristic:error:来回拨电话06000105。将第二个八位字节从0x01更改为0x06会产生相同的响应(值)。这也是我无法理解/解释的。
  10. 没有更多的事情发生。既不是葡萄糖测量也不是葡萄糖测量背景
  11. 注意:在Android上,似乎还必须将客户端特性配置描述符设置为通知和/或指示,但尝试这导致异常和消息,应该使用外设上的setNotifyValue:forCharacteristic:在特征本身上设置通知。

    我的主要问题是,葡萄糖测量特征上的peripheral:didUpdateValueForCharacteristic:error:没有回调,包括记录。在请求记录后,我尝试再次针对该特征呼叫[_peripheral setNotifyValue:YES forCharacteristic:characteristic]

    有没有人知道我的错误在哪里?有没有人(在iOS上)实现了我想要实现的目标?

    另一件事是BT glucose service specification。我将非常感激,如果有人可以启发我如何解释响应(意味着记录访问控制点特征的更新值)我得到。因为我甚至不确定characteristic.value中的字节的顺序是什么(例如,当它们通过getBytes:length:的{​​{1}}方法读取时。 我想我正在按照Glucose Profile specification中描述的流程进行操作,所以我真的很茫然。

    非常感谢你!

    祝你好运, 加布里埃尔

1 个答案:

答案 0 :(得分:1)

遇到同样的问题后,我无法弄清楚如何解释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

中的预期流入