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

イウォークは正しいです。このブログ投稿を参照してください。

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パケット形式は実際には非常に単純です。

PolarBluetoothWearlinkパケットの例

Hdr-Len-Chk-Seq-ステータス-心拍数-RRInterval_16ビット

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

どこ

  • Hdrは常に=254(0xFE)、
  • Chk=255-レン
  • シーケンス範囲0〜15
  • ステータス=上部ニブルはバッテリー電圧である可能性があります
  • ビット0はビート検出フラグです。」
于 2015-04-09T13:54:46.097 に答える
0

&0xffは、比較を行うために、符号付きバイトを符号なし整数に変換するだけです。

于 2012-12-08T09:48:00.033 に答える
0

最初の行は、このPolarウェアラブルの場合と同様に、バッファが0xFEで開始されていることを確認しています。

2行目は、仕様による値が255であるため、長さバイトも正しいかどうかをチェックしています。書き込まれる値はサイズバイトです。

これは一緒になって、メッセージが正しいことの非常に単純な検証です(より複雑な実装には、CRCまたは他の検証方法が含まれます)。乾杯

于 2013-10-29T13:01:37.373 に答える