内容:
-iPhone 5c上的iOS 7.1.2
-测量“外围”的葡萄糖(BT LE)
-设备和外围设备已配对(引入了代码)
-外围设备上有超过= 1条记录。
-重复了下述行为。外围设备只有一个记录,并且也有两个新记录。读取的结果(characteristic.value的值)始终相同。

我正在尝试通过以下方式使用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上,似乎还必须将“客户端特征配置”描述符设置为进行通知和/或指示,但是尝试其中的任何一种都会导致异常,并且会出现一条消息,提示您应使用外围设备上的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

    08-16 13:19