2017-01-03 20 views
2

を使用してBLEセンサーから広告パケットを読み取る正しい方法BLEセンサーから広告パケットを読み取るためにC++コード(bluez 5.43とdbusを使用)を実装しようとしています。 bluez DBusのドキュメントに従って、近くのデバイスをスキャンするために使用できる API StartDiscovery APIがあります。しかし、近くのBLEデバイスからの広告パケットを保存/解析するためのAPIを見つけることができません。 advertising-api.txtはregisteradvertisement APIをリストアップしていますが、私の理解によれば、広告パケットを作成して外部デバイスから読み込むことはできません(または間違っていますか?)誰かが正しいBEF bluezとDBusを使用しているデバイスbluez 5.43とDBus

+0

私が理解しているように、あなたは 'StartDiscovery'を行い、' Device'オブジェクトは発見されているように見えます。これらのオブジェクトのプロパティは、おそらく広告パケットからのデータで満たされています。 – Velkan

+0

@Velkan:応答してくれてありがとう。正直言って、私はここで少し混乱しています。私は定期的にセンサの読みを広告パケットの形で送信するBLEセンサを持っています。この情報は低エネルギースキャン応答にも含まれています。ですから、必要なデータを解析するためには完全な応答が必要です。私はdbusとbluez-5.43を使ってこれを実装しようとしています。私はどんな特性も低いエネルギースキャン応答を与えるとは思わない。私が間違っているなら、私を修正してください。 – darkknight

+0

org.bluez.Device1にはServiceDataとManufacturerDataがあります。それらはadvertising-api.txtのServiceDataとManufacturerDataと同じではありませんか?たぶんそれらには読み値を含むAdvDataが含まれているのでしょうか? – Velkan

答えて

0

あなたの最後のコメントに記載されている行動は正しいものです(広告データは更新されません)。私が正しいとすれば、BLEデバイスは常時稼働しているとは限りません。低電力など

この文脈では、データが何らかの形で「キャッシュされている」というのは奇妙ではありません。私の経験から、スキャンを実行してデバイスを検出すると(接続していなくても)、デバイス情報はしばらくの間保存されます。

あなたのケースでは、広告を通してデータを渡しているため問題があります。ただし、には、デバイスに関するすべてのキャッシュデータを削除するようにbluezを強制的に設定する方法があります。: adapter-apiは、RemoveDevice(オブジェクトデバイス)メソッドを提供します。それは引数としてオブジェクトパス(例えば、 "/ org/bluez/hci0/dev_AA_BB_AA_BB_AA")をとります。

CでDBusバインディングをお探しの場合は、GLib GDBusをお勧めします(このチュートリアルの下にあるfreedesktop Webサイトのリンク:https://dbus.freedesktop.org/doc/dbus-tutorial.html)。

あなたはbluetoothctl(のbluez使用してコマンドと対話するためのツール)に精通している場合、それは口が達者GDbusを使用してのbluez男によって開発された、あなたはここにソースコードを見つけることができます(コマンドを見つけるために、下を見てリスト):のbluezが、bluetoothctlソースコードとGDBusを使用するには、より多くのstraigthforwardの方法があります

https://git.kernel.org/cgit/bluetooth/bluez.git/tree/client/main.cが開始され、あなたはのbluezで行うことが可能ですほとんど何のための例を見つけることができます=)

0

ありがとうみんなの提案。私は最終的にインテルのtinybライブラリを使用して製造元のデータを入手することができました。これにはenable_manufacturer_data_notifications APIがあり、製造元のデータが変更されたときに通知を受けることができます。

関連する問題