iOS BLE 无葡萄糖测量通知

标签 ios objective-c bluetooth bluetooth-lowenergy

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

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

  1. 让葡萄糖外围设备尝试将其记录发送到我的 iOS 设备。
  2. 在 iOS 设备上发现并连接到相关外围设备(葡萄糖服务 0x1808)。
  3. peripheral:didDiscoverServices:error: 中发现特征,它们是葡萄糖测量 (0x2A18)、葡萄糖测量上下文 (0x2A34)、< em>葡萄糖特征 (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: 委托(delegate)方法,更新值是 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: Glucose Measurement 特征,包括记录。在请求记录后,我尝试再次调用 [_peripheral setNotifyValue:YES forCharacteristic:characteristic] 调用该特性。

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

另一件事是 BT glucose service specification .如果有人能启发我如何解释我得到的响应(意味着 Record Access Control Point 特性的更新值),我将不胜感激。因为我什至不确定 characteristic.value 中字节的顺序(例如,当它们通过 NSData< 的 getBytes:length: 方法读取时)。 我想我正在按照 Glucose Profile specification 中描述的过程进行操作所以我真的很茫然。

非常感谢您!

最好的问候, 加布里埃尔

最佳答案

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

相关文章:

ios - Swift:在展开可选值时发现 nil

ios - iOS 应用程序 swift 3 中的谷歌翻译 rest api 错误 403

javascript - 如何在 ios 中的 html 文件中查找 div 标记的计数?

objective-c - 编译器在调用sortedArrayUsingComparator时提示类型不匹配

iOS BLE 蓝牙 - 发送/接收十六进制数据

python-3.x - 如何在python中检查蓝牙设备的ping

ios - 在 iOS 中更改 CAKeyframeAnimation 中间动画的速度

objective-c - 以半径搜索位置(cocoa-touch)

objective-c - 是否有特定的objective-c 方法来计算整数中的位数

Android 蓝牙 LE 错误 : Failed to register callback