Polar Wearlink蓝牙包

时间:2012-09-28 13:38:42

标签: android bluetooth packet

我正在查看名为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;    

任何想法?

3 个答案:

答案 0 :(得分: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 Bluetooth Wearlink数据包示例

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

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

,其中

  • Hdr始终= 254(0xFE),
  • Chk = 255 - Len
  • Seq范围0到15
  • 状态=高半字节可能是电池电压
  • 位0是节拍检测标志。"

答案 1 :(得分:0)

& 0xff只是将带符号的字节转换为unsigned int以进行比较

答案 2 :(得分:0)

第一行是检查接收缓冲区是否以0xFE开头,因为它应该是这个Polar Wearable。

第二行是检查长度字节是否正确,因为它的规格值是255,写入的值是大小字节..

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