Bluetooth Low Energy Glucose GATT 配置文件测量解析值
Bluetooth Low Energy Glucose GATT profile measurement parsing value
我想用Java/Android解析GATT特性org.bluetooth.characteristic.glucose_measurement (0x2A18)。此处有更多详细信息:https://www.bluetooth.com/specifications/gatt/viewer?attributeXmlFile=org.bluetooth.characteristic.glucose_measurement.xml
到目前为止一切正常,从
开始
byte[] values = characteristic.getValue();
然后根据上面的描述我解析了值:
boolean timeOffsetPresent = (values[0] & 0x01) > 0;
boolean typeAndLocationPresent = (values[0] & 0x02) > 0;
String concentrationUnit = (values[0] & 0x04) > 0 ? "mol/L" : "kg/L";
boolean sensorStatusAnnunciationPresent = (values[0] & 0x08) > 0;
boolean contextInfoFollows = (values[0] & 0x10) > 0;
long seqNum = (long) (values[1] & 255);
seqNum |= (long) (values[2] & 255) << 8;
int glucose = values[10] & 255;
glucose |= (values[11] & 255) << 8;
int year = values[3] & 255;
year |= (values[4] & 255) << 8;
byte month = values[5];
byte day = values[6];
byte hour = values[7];
byte min = values[8];
byte sec = values[9];
所有值都是正确的,除了葡萄糖值。我收到了 concentrationUnit=kg/L 所以值是根据文档中的 "Glucose Concentration - units of kg/L" 发送的。不幸的是,测试值为
System.out.println("glucose: "+glucose); // equals 28336
28336 完全错误,因为该值应该是 110 mg/dl。
这里有什么问题以及我该如何解决这个问题有什么建议吗?奇怪的是所有其他值都是正确的。
您链接的文档指出浓度是 SFLOAT
,应该是 "IEEE-11073 16-bit SFLOAT"。
This SO post 告诉你如何解码这样的东西。
我想用Java/Android解析GATT特性org.bluetooth.characteristic.glucose_measurement (0x2A18)。此处有更多详细信息:https://www.bluetooth.com/specifications/gatt/viewer?attributeXmlFile=org.bluetooth.characteristic.glucose_measurement.xml
到目前为止一切正常,从
开始byte[] values = characteristic.getValue();
然后根据上面的描述我解析了值:
boolean timeOffsetPresent = (values[0] & 0x01) > 0;
boolean typeAndLocationPresent = (values[0] & 0x02) > 0;
String concentrationUnit = (values[0] & 0x04) > 0 ? "mol/L" : "kg/L";
boolean sensorStatusAnnunciationPresent = (values[0] & 0x08) > 0;
boolean contextInfoFollows = (values[0] & 0x10) > 0;
long seqNum = (long) (values[1] & 255);
seqNum |= (long) (values[2] & 255) << 8;
int glucose = values[10] & 255;
glucose |= (values[11] & 255) << 8;
int year = values[3] & 255;
year |= (values[4] & 255) << 8;
byte month = values[5];
byte day = values[6];
byte hour = values[7];
byte min = values[8];
byte sec = values[9];
所有值都是正确的,除了葡萄糖值。我收到了 concentrationUnit=kg/L 所以值是根据文档中的 "Glucose Concentration - units of kg/L" 发送的。不幸的是,测试值为
System.out.println("glucose: "+glucose); // equals 28336
28336 完全错误,因为该值应该是 110 mg/dl。
这里有什么问题以及我该如何解决这个问题有什么建议吗?奇怪的是所有其他值都是正确的。
您链接的文档指出浓度是 SFLOAT
,应该是 "IEEE-11073 16-bit SFLOAT"。
This SO post 告诉你如何解码这样的东西。