蓝牙心率监视器字节解码

时间:2015-11-25 13:32:53

标签: bluetooth bluetooth-lowenergy

问题:

我无法理解BLE Heart Rate Characteristic(服务180d,特征2a37)的返回数据。

根据规范,将有6或7个字节的数据(当base64解码时),我完全理解在这种情况下如何处理它。

但有时候它不会返回6或7个字节而是8个甚至更少的4个字节,我不知道为什么会有更多/更少的字节以及添加的字节的含义是什么或者哪些字节被遗漏。< / p>

我可以跳过所有没有6或7个字节的情况,但我想完全理解这一点。

某些将base64编码转换为字节数组是正确完成的,我为它做了一个函数使用手动base64-decode结合检查它charCodeAt(index) 使用优质铅笔,纸张和大脑(不一定按此顺序)手动检查。

TL; DR:

BLE心率(180d2a37)有时不返回预期的字节数(当它应该是6或7字节时为4和8)。 究竟发生了什么以及为什么?

示例:

// Example results in byte-array's
["00010110", "01110111", "00000100", "00000010"] // unexpected 4 byte
["00010110", "01111000", "11111111", "00000001", "11111111", "00000001", "00001100", "00000001"] // unexpected 8 byte
["00010110", "01110111", "00001000", "00000010", "00001000", "00000010"] // normal 6 byte

// Example results in hex-array's (easier to read on small screens)
["0x16","0x77","0x04","0x02"] // unexpected 4 byte
["0x16","0x78","0xFF","0x01","0xFF","0x01","0x0C","0x01"] // unexpected 8 byte
["0x16","0x77","0x08","0x02","0x08","0x02"] // normal 6 byte

字节说明:

  1. 标志。如果心率是16位格式(我只有8位),则第一位(最右边)打开。
  2. 心率,如果心率是16位格式,那么这里将有2个字节
  3. 能量消耗
  4. 能量消耗
  5. rr interval
  6. rr interval

1 个答案:

答案 0 :(得分:3)

能量消耗是可选的,检查样本数据情况下标志的第3位,它不存在。存在可变数量的rr间隔。 4个字节,你只有1个,6个字节,你有2个,8个字节,你有3个你理论上可以得到10个和4个。

您应该使用标志解码字节,然后如果rr存在,则剩余字节数/ 2是您拥有的rr数。