如何解码葡萄糖测量特性(蓝牙)的响应

How to decode response from Glucose Measurement Characteristic (Bluetooth)

我有一个 react-native 应用程序,我正在尝试从 Accu-Chek Guide 设备获取葡萄糖测量值。

我对 BLE 的了解有限,这个 Whosebug 问题对我理解蓝牙和检索葡萄糖测量有很大帮助。

所以,我在我的代码中做了什么:

1、连接BLE外设
2、监控特性Glucose Feature & Record Access Control Point
3、发送0x0101 (Report stored records | All records)Record Access Control Point
4、解码响应

到目前为止我有 1-3 个工作,但我不知道如何解码葡萄糖特征的响应:

Glucose Measurement

的通知响应

[27, 4, 0, 195, 164, 7, 7, 14, 11, 6, 5, 90, 2, 119, 194, 176, 195, 184, 0, 0]


通知 Record Access Control Point

[6, 0, 1, 1]

我假设这是蓝牙 SIG 采用的连续血糖监测服务 (CGMS) 配置文件,其规范可从以下网址获得:

https://www.bluetooth.com/specifications/gatt/

查看 XML 的 Glucose Measurement 特征,提供有关数据结构的更多详细信息。

https://www.bluetooth.com/wp-content/uploads/Sitecore-Media-Library/Gatt/Xml/Characteristics/org.bluetooth.characteristic.glucose_measurement.xml

解压数据需要做一些工作。

例如,第一个字节存储名为 flags 的第一个字段的信息。但是,您需要查看这些不同标志的前 5 位。

下一个字段是“序列号”,它是一个 uint16,因此需要两个字节。这里值得注意的是,蓝牙通常使用 little endian.

接下来是 Base Time 字段,它引用 https://www.bluetooth.com/wp-content/uploads/Sitecore-Media-Library/Gatt/Xml/Characteristics/org.bluetooth.characteristic.date_time.xml,它将占用接下来的 7 个字节。

因为特征中的 9 个字段中的某些字段占用超过 1 个字节,这就是为什么您看到这 9 个字段占用 20 个字节的原因。