3

我正在查看一个名为 MyTracks 的项目的代码:

http://code.google.com/r/jrgert-polar-bluetooth/source/browse/MyTracks/src/com/google/android/apps/mytracks/services/sensors/PolarMessageParser.java?r=ebc01faf49550bc9801633ff38bb3b8ddd6f5698

现在我的方法有问题isValid(byte[] buffer)。我不明白他到底在这里检查什么。我们想知道数组中的第一个字节是否是包含 0xFE 的标头。我不太明白以下几行:

 boolean goodHdr = ((buffer[0] & 0xFF) == 0xFE);
 boolean goodChk = ((buffer[2] & 0xFF) == (0xFF - (buffer[1] & 0xFF)));
 return goodHdr && goodChk;    

有任何想法吗?

4

3 回答 3

1

Ewoks 是正确的,参考这篇博文:

http://ww.telent.net/2012/5/3/listening_to_a_polar_bluetooth_hrm_in_linux

“深入研究 src/com/google/android/apps/mytracks/services/sensors/PolarMessageParser.java 我们发现一个有用的评论表明,尽管 Polar 对提供开发信息持荒谬的立场(他们没有,是总结) Wearlink 数据包格式其实很简单。

Polar 蓝牙 Wearlink 数据包示例

Hdr - Len - Chk - Seq - 状态 - HeartRate - RRInterval_16 位

FE - 08 - F7 - 06 - F1 - 48 - 03 64

在哪里

  • HDR 始终 = 254 (0xFE),
  • Chk = 255 - Len
  • 序列范围 0 到 15
  • 状态 = 上半字节可能是电池电压
  • 位 0 是节拍检测标志。”
于 2015-04-09T13:54:46.097 回答
0

第一行是检查接收缓冲区是否以 0xFE 开头,因为它应该与此 Polar 可穿戴设备一样。

第二行是检查长度字节是否正确,因为它的规范值是 255-value writen is size byte..

这一起是对消息正确性的超级简单验证(更复杂的实现将包括 CRC 或其他验证方法)。干杯

于 2013-10-29T13:01:37.373 回答
0

&0xff 只是将有符号字节转换为无符号整数以进行比较

于 2012-12-08T09:48:00.033 回答