蓝牙心脏率测量特性苹果公司的心脏率监测例如和字节顺序(Apple's heart rate

2019-07-17 14:01发布

对心脏率测量特性:

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和我上面编辑。

Answer 1:

我是不是正确的阅读这个文件?

恕我直言,你正在阅读这一点是错误的。

C1至C4应理解为条件1至条件4及表中为org.bluetooth.characteristic.heart_rate_measurement,如果标志字节的最低位为0,则C1被满足,否则,C2是。

你可以认为它运行时配置union类型在C程序设计语言(,这是确定的flag 。小心,因为情况得到了由C3和C4复杂,这并不总是如此)。

// Note: this struct is only for you to better understand a simplified case.
// You should still stick to the profile documentations to implement.

typedef struct {
    uint8_t flag;
    union {
        uint8_t bpm1;
        uint16_t bpm2;
    }bpm;
} MEASUREMENT_CHAR; 

那如何位检查工作?

if ((reportData[0] & 0x01) == 0)有效地检查与位AND运算符的比特。 去寻找一个C / C ++编程介绍书,如果有任何疑问。

第一个字节是永远的标志,在这种情况下。 标志的值动态地决定应该如何字节的其余部分应与进行处理。 C3和C4都是可选的,并且如果在标志中的对应位被设定零可以省略。 C1和C2是互斥的。

目前在蓝牙标准中没有字节顺序歧义,因为它已经得到很好的解决的是小端应使用所有的时间。 你应该总是假设这些uint16_t领域转移为小端。 苹果的预防措施就是安抚代码的可移植性最多,因为他们也不能保证在未来的产品中使用的架构的存储方式。



Answer 2:

我看看怎么回事。 这不是测试的字节顺序。 相反,它是在测试的字段是8位或16位,而在16位的情况下,它会从一点字节序转换为主机顺序。 但我看到的转换前和转换后是相同的号码。 所以我猜这个系统是小端开始用,所以我不知道有什么意义做。



文章来源: Apple's heart rate monitoring example and byte order of bluetooth heart rate measurement characteristics