2017-12-01 11 views
0

近くのBluetooth低エネルギーデバイスをスキャンするアンドロイドアプリ(カスタム)を実行していますが、一部のデバイスが仕様規定より長い広告パケットを表示しています。スキャンデバイスは、Android 6.0を実行しているNexus 5です。仕様を超えるBluetooth広告パケットを受信して​​います

私は、私はScanRecordのバイト配列が実際に広告を出してデータ(MACアドレスは含まれていない)とスキャン応答で構成されていることを知っているバイト配列

を取得するためにScanResultオブジェクトresult.getScanRecord().getBytes();に次の行を使用しています

私は配列の合計62バイトのためにそれぞれ31バイトが必要です。これは私が受け取る配列全体のサイズですが、宣伝されたデータが配列の応答部分に入るように見えます。形式は仕様に従います.GAPの最初のバイトは長さ、次のバイトはGAPタイプ、次の長さ-1バイトはデータです。

しかし、この形式では、問題のデバイスには応答部分にまたがるデータフィールドがあります。ここでは別のライン上の各GAPと六角の配列の例です:

02 01 06 (flags) 
0D FF DF 00 57 30 46 30 30 33 43 45 56 5A (manufacturer specific data) 
11 07 6D 69 73 66 69 74 A6 34 4A 7D 7F 95 01(<-expected end of advertise) 00 DA 3D (UUID, 128-bit) 
07 09 46 6F 73 73 69 6C (device name) 
03 03 12 18 (UUID, 16-bit) 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (leftover bytes) 

私は本当にスキャン応答データを気にしないが、私はBLEデバイスは、広告パケットを送ることができる方法についての混乱しています4.2仕様であれば31バイトより大きい(私はBluetooth 5がより大きなパケットを許可することを知っているが、メーカーは4.2を使用していると言っている)。私は、デバイスの名前が必要なときに表示されるのを見ることもできますが、応答の部分に表示されます。

これはなぜここにあるのですか?ありがとう。

答えて

0

これらのデバイスは、単に仕様に従わない(パケットの境界を越えないようにする必要がある)可能性があります。だからあなたのデバイスは、広告データとスキャン応答データとして

01 00 DA 3D 07 09 46 6F 73 73 69 6C 03 03 12 18 

として

02 01 06 0D FF DF 00 57 30 46 30 30 33 43 45 56 5A 11 07 6D 69 73 66 69 74 A6 34 4A 7D 7F 95 

を送信することがあります。これが正しい場合は、たとえばHCIログで確認できます。そのような場合は、そのBLEデバイスの製造元に苦情を言います。

+0

どこにあるのかわかりますが、応答の最初の部分には実際には存在しないGAPタイプがあり、次のGAPの長さは広告された最大サイズよりはるかに大きくなりますパケット。 HCIログはスキャニングデバイス上になければなりません。私はおそらくそれを見てみるべきです – ShrimpDaddy2k

関連する問題