蓝牙低能量葡萄糖GATT轮廓测量解析值

时间:2017-08-08 12:54:38

标签: java android bluetooth bluetooth-lowenergy gatt

我想用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];

除葡萄糖值外,所有值均正确。我收到浓度单位= kg / L,因此该值是根据&#34;葡萄糖浓度 - 单位kg / L&#34;来自文档。不幸的是,测试值是

System.out.println("glucose: "+glucose); // equals 28336

28336完全错误,因为该值应为110 mg / dl。

这里有什么错误的建议以及如何解决这个问题?奇怪的是,所有其他值都是正确的。

1 个答案:

答案 0 :(得分:2)

您链接的文档指出浓度为SFLOAT,该值应为&#34; IEEE-11073 16位SFLOAT&#34;。 This SO post告诉你如何解码这样的事情。