【问题标题】:iOS BLE no Glucose Measurement notificationsiOS BLE 无血糖测量通知
【发布时间】:2014-09-29 17:04:39
【问题描述】:

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

我正在尝试通过以下方式使用 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. 没有任何事情发生。 葡萄糖测量葡萄糖测量上下文都没有。

注意:在 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 中的字节以什么顺序出现(例如,当它们通过NSDatagetBytes:length: 方法读取时)。 我想我正在遵循Glucose Profile specification 中描述的过程,所以我真的很茫然。

非常感谢您!

最好的问候, 加布里埃尔

【问题讨论】:

    标签: ios objective-c bluetooth bluetooth-lowenergy


    【解决方案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中的所有记录都按预期流入

    【讨论】:

    • 由于我们最终将项目外包,我自己无法解决问题。直到现在,您发布了您的解决方案,我不知道它是什么,外部人员为使其工作而做了什么。我刚刚检查了代码,操作数也被排除在外。因此,这显然是解决方案 - 同样证明了 BLE 葡萄糖规范文档不好或规范执行不力。 ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-17
    • 1970-01-01
    • 2014-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多