对心脏率测量特性:
http://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.heart_rate_measurement.xml
我想确保我正确地阅读它。 这是否实际上说的5场? 强制性,C1,C2,C3,和C4? 和强制在第一字节和C4是在最后两个字节,C1和C2是8位字段,C3至C4是16位的每个。 这是一个总的8个字节。 我是不是正确的阅读这个文件?
编辑:
我获悉,强制性标志字段表示东西是0,这意味着它只是不存在。 例如,如果第一位是0,C1是下一个字段,如果为1,C2如下代替。
编辑完
在苹果的OSX心脏监测仪例如 :
- (void) updateWithHRMData:(NSData *)data
{
const uint8_t *reportData = [data bytes];
uint16_t bpm = 0;
if ((reportData[0] & 0x01) == 0)
{
/* uint8 bpm */
bpm = reportData[1];
}
else
{
/* uint16 bpm */
bpm = CFSwapInt16LittleToHost(*(uint16_t *)(&reportData[1]));
}
... // I ignore rest of the code for simplicity
}
它检查第一位为零,如果它不是,它改变了小字节序到任何主机字节顺序,通过应用CFSwapInt16LittleToHost到reportData[1]
那如何位检查工作? 我不能完全肯定字节序的。 难道说,无论是小还是大,第一个字节始终是必填字段,第二个字节是C1等? 而且,由于是reportData一个8位指针(的typedef unsigned char
),它的任一检查位0或强制性字段的位8。
如果该位是8位,该位被保留供将来使用,为什么会读吗?
如果该位是0,这是小端,无需改造? 但如果它是小尾数,第一位可以根据规范,1种手段是1“心率值格式设置为UINT16单位:每分钟心跳(BPM)”,不能说被误读?
我不明白它是如何做的检查。
编辑:我一直在说有C5,这是一个大错。 它最多只能C4和我上面编辑。