Android Polar Wearlink蓝牙数据包

Android Polar Wearlink蓝牙数据包,android,bluetooth,packet,Android,Bluetooth,Packet,我正在查看一个名为MyTracks的项目的代码: 现在我对方法isValid(byte[]buffer)有问题。我不明白他到底在检查什么。我们想知道数组中的第一个字节是否是包含0xFE的头。我不太明白以下几句话: boolean goodHdr = ((buffer[0] & 0xFF) == 0xFE); boolean goodChk = ((buffer[2] & 0xFF) == (0xFF - (buffer[1] & 0xFF))); return g

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

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

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

有什么想法吗?

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

第一行是检查是否接收到缓冲区以0xFE开始,因为它应该与此可穿戴极轴一起使用

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


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

伊渥克是正确的,请参阅以下博文:

“深入研究src/com/google/android/apps/mytracks/services/sensors/PolarMessageParser.java,我们发现一条有用的评论表明,尽管Polar在发布开发信息方面的立场荒谬(他们没有,这是摘要),但Wearlink数据包格式实际上相当简单

Polar Bluetooth Wearlink数据包示例

Hdr-Len-Chk-Seq-状态-心率-间隔\u 16位

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

在哪里

  • Hdr始终=254(0xFE)
  • Chk=255-Len
  • 序号范围0至15
  • 状态=上半字节可能是蓄电池电压
  • 位0是拍频检测标志。“

  • 这看起来很奇怪。someValue&0xFF始终等于someValue(0)。您应该更详细地说明,以便让每个人都理解您的答案。