0

デバイスのRSSIと較正された送信電力を考慮して、BLEデバイスの推定範囲を取得しようとしています。Android BLE iBeaconアドバタイズパケットが予想よりも大きい

較正されたtxPowerは、おそらく、周辺機器のiBeacon広告パケットの最後のバイトとして放出されます。これらのパケットは、私が見つけたドキュメントによれば、長さが30バイトでなければなりません。

ただし、返されるパケットのbyte[]の長さは62バイトです。このため、広告データのフォーマットは不明である。

なぜこれが起こっている可能性があり、62バイトのパケットの形式を解読する方法がありますか?

答えて

0

BLEデバイスをスキャンすると、Android APIは、生の通知先PDUだけでなくスキャン応答PDUも返します。後者は、スキャニングAPIによって返されるバイト配列で前者の最後に付けられます。

バイト配列がビーコンフィールドにアクセスする場合は、最後から負のオフセットを確実に使用することはできません。最初から正のオフセットを使用するほうが信頼性は高くなりますが、気になるものであるメーカーの広告宣伝PDUの前に異常なPDUが挿入されていても、これが失敗する可能性があります。

信頼性を100%にするには、すべてのPDUを解析し、製造元の広告を探し、その中のバイトを調べる必要があります。 Android Beacon Libraryを書くとき、私はこれを難しい方法で学びました。それはオープンソースなので、自分のスキャンをロールしたい場合でも、それがどのように動作するかを確認することは良い考えです。

+0

これは奇妙です。ペリフェラルの校正されたtxPowerを取得する簡単な方法はありますか?較正された定数は、広告から本当に必要なものです。 – Orbit

+0

広告のバイトから定数を取得する必要があります。 PDUを解析するより簡単な解決策は、静的なiBeaconプレフィックスのバイトパターンを検索し、そこからのオフセットに基づいて較正定数を見つけることです。このアプローチの欠点は、(チャンスによって)バイトシーケンスが広告内の別の場所に表示され、そのテクニックが失敗することです。 – davidgyoung

関連する問題