【发布时间】:2015-11-25 13:32:53
【问题描述】:
问题:
我无法理解BLE Heart Rate Characteristic(服务180d,特征2a37)的返回数据。
根据规范将有 6 或 7 个字节的数据(当 base64 解码时),我完全理解在这种情况下如何处理它。
但有时它不会返回 6 或 7 个字节,而是 8 个字节,很少返回 4 个字节,我不知道为什么会有更多/更少字节以及添加字节的含义或遗漏了哪些字节。
我可以跳过所有没有 6 或 7 个字节的情况,但我想完全理解这一点。
我确定将 base64 编码转换为字节数组是正确完成的,我为它创建了一个函数并使用手动 base64-decode 组合检查它使用charCodeAt(index) 和真正手动检查它使用好的 ol' 铅笔、纸和大脑(不一定按这个顺序)。
TL;DR :
BLE 心率 (180d,2a37) 有时不会返回预期的字节数(4 和 8,而应该是 6 或 7 字节)。
究竟发生了什么,为什么?
示例:
// 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
字节说明:
- 标志。如果心率为 16 位格式(我只有 8 位),则第一位(最右边)打开。
- heartrate,如果心率是 16 位格式,这里会有 2 个字节
- 能量消耗
- 能量消耗
- rr 间隔
- rr 间隔
【问题讨论】:
-
当然,在 4 字节的情况下它可能是 [F][C1][C4][C4] 但如果是这种情况,它不应该在文档中吗?但这并不能解释 8 字节的场景……
-
系统是什么?操作系统硬件设置等。与系统交互的代码在哪里,这是最有可能导致问题的原因......
-
@lfor 我正在科尔多瓦应用程序中使用 randdusings ble 插件。该插件包含代码(src/android/*.java 或 www/*.js),可以通过谷歌搜索“cordova-plugin-bluetooth”轻松找到。
标签: bluetooth bluetooth-lowenergy