2012-01-17 1 views
0

を説明することができます。は、誰もが、私は簡単な</p> <p>に、私たちはこれを使用し、どのように他のCファイルのこのコマンドの呼び出しは自動的に機能することができます方法を知りたいのdbus-送るコマンドについて知りたい、このコマンドをここで

ここでは、Bluetoothペアリングとペアリングに使用される1つの例を示します。 /org/bluez/1536/hci0 BD_ADDR_XXは、Bluetoothアドレスです:XX_XX_XX_XX_XX_XX

ここで私が知っている--system --print-応答オプションおよび他のすべてのオプションについてはどのようにその作品

dbus-send --system --print-reply --dest=org.bluez $BT_ADAPTER org.bluez.Adapter.RemoveDevice objpath:$BT_ADAPTER/dev_$BD_ADDR_XX 

はここBT_ADAPTERのようなブルー​​のアダプタである私を教えてください私が知っているソースファイルはありません。

だから誰も私はこのコマンド呼び出しをし、Cソースファイルから関数を使用することができます説明することができます。

答えて

2

あなたはdbus文書をチェックアウトする必要があります。

http://www.freedesktop.org/wiki/IntroductionToDBus

あなたは正確に何をしたいですか? dbusサービスまたはクライアントの作成?

Pythonがはるかに優れた選択肢になるので、Cで記述する必要があります。 http://dbus.freedesktop.org/doc/dbus-python/doc/tutorial.html

============================

まず、dbusのサービスのdbus-デーモンに接続し、頼みますサービスアドレス(あなたの場合はorg.bluez)のために。 次に、異なるインタフェースを異なるオブジェクトパスに登録します。各インタフェースには、ユーザが使用するいくつかのメソッド呼び出し/シグナルが含まれています。あなたのケースでは

  • DBUSデーモン・プロセス(DBUS-デーモン--system)が開始されます。

  • のbluezデーモンプロセスが開始さ

  • のbluezデーモンプロセス/ ORG /のbluez/{プロセスPID}/{Bluetoothコントローラ名}でいくつかのインターフェースを登録する( "org.bluez" サービスアドレスにDBUSデーモンを尋ねます

  • dbus-sendコマンドを呼び出すと、コマンドラインツールはdbus-daemonに接続し、サービスアドレス(-dest)、オブジェクトパス(/ org/bluez/1536/hci0)、インタフェース名、呼び出すメソッド( org.bluez.Adapter.RemoveDevice)とパラメータ。

  • DBUS-デーモンは、それはのbluezする再送

============================

Dbusデーモンはサービスアドレスまたはメソッド呼び出しを取得しません。 サービスのアドレスとメソッド呼び出しの名前をあなたやクライアントのプロセスに伝えます。

DBusデーモンは、ターゲット・サービス・プロセスを送信します。データ・パケットには、obj-path、インタフェース/メソッド名およびパラメータが独自の形式(UNIXローカル・ソケット・ファイルを使用)で格納されます。

ターゲットサービスプロセスは、パケットをアンパックし、オブジェクトパス、インターフェイスなどを取得し、何をすべきかを決定します。これは自動的には行われません。あなたはそれを扱うための独自のコード(メソッドディスパッチなど)を書くか、dbus-glib/gdbusのようなライブラリを使用する必要があります。

============================

私はのbluez-4.98のソースコードをチェックします。メソッドディスパッチにgdbusを使用します。

たとえば、 "CreateDevice"とします。 SRC/adapter.cで

、CreateDeviceメソッドの呼び出しが最終的にcreate_device関数を呼び出すことを意味し、このような構造体

static GDBusMethodTable adapter_methods[] = { 
{ "GetProperties", "", "a{sv}",get_properties  }, 
{ "SetProperty", "sv", "", set_property, 
        G_DBUS_METHOD_FLAG_ASYNC}, 
{ "RequestSession", "", "", request_session, 
        G_DBUS_METHOD_FLAG_ASYNC}, 
{ "ReleaseSession", "", "", release_session  }, 
{ "StartDiscovery", "", "", adapter_start_discovery }, 
{ "StopDiscovery", "", "", adapter_stop_discovery, 
        G_DBUS_METHOD_FLAG_ASYNC}, 
{ "ListDevices", "", "ao", list_devices, 
        G_DBUS_METHOD_FLAG_DEPRECATED}, 
{ "CreateDevice", "s", "o", create_device, 
        G_DBUS_METHOD_FLAG_ASYNC}, 
{ "CreatePairedDevice", "sos", "o", create_paired_device, 
        G_DBUS_METHOD_FLAG_ASYNC}, 
{ "CancelDeviceCreation","s", "", cancel_device_creation, 
        G_DBUS_METHOD_FLAG_ASYNC}, 
{ "RemoveDevice", "o", "", remove_device, 
        G_DBUS_METHOD_FLAG_ASYNC}, 
{ "FindDevice",  "s", "o", find_device  }, 
{ "RegisterAgent", "os", "", register_agent  }, 
{ "UnregisterAgent", "o", "", unregister_agent }, 
{ } 
}; 

があります。

そして、あなたはそのすべてのメソッドと信号とのインタフェースADAPTER_INTERFACE( "org.bluez.Adapter")を登録行2418

if (!g_dbus_register_interface(conn, path, ADAPTER_INTERFACE, 
       adapter_methods, adapter_signals, NULL, 
       adapter, adapter_free)) { 
    error("Adapter interface init failed on path %s", path); 
    adapter_free(adapter); 
    return NULL; 
} 

次に、基礎となるすべてのdbusイベントモニタとメソッドディスパッチは、gdbus(src/main.cのinit dbus接続とイベント処理後)で処理されます。いくつかのクライアントがorg.bluez.Adapter.CreateDeviceを呼び出すと、それは最終的に私がgdbusに慣れていないよ、あなたは深く掘るしたい場合は、私が提案する1468

static DBusMessage *create_device(DBusConnection *conn, 
       DBusMessage *msg, void *data) 
{ 
struct btd_adapter *adapter = data; 
struct btd_device *device; 
const gchar *address; 
DBusMessage *reply; 
int err; 

if (dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &address, 
        DBUS_TYPE_INVALID) == FALSE) 
    return btd_error_invalid_args(msg); 

if (check_address(address) < 0) 
    return btd_error_invalid_args(msg); 

if (!adapter->up) 
    return btd_error_not_ready(msg); 

if (adapter_find_device(adapter, address)) 
    return btd_error_already_exists(msg); 

DBG("%s", address); 
...... 

のsrc/adapter.cラインで関数create_deviceに入りますその後http://developer.gnome.org/gio/stable/gdbus-convenience.html

============================

:あなたは公式サイトをチェックしますあなたは単にbluezソースコードの 'test'ディレクトリをチェックアウトする必要があります。

pythonとCの両方の例があります。

また、bluez dbusインターフェイスが3.XXから4.XXに多く変更されているため、正しいバージョンをチェックしてください。

+0

私はその呼び出しオブジェクトのパスと宛先のオプションについて知りたい。上記の例で知りたいのは、org.bluez.Adapter.RemoveDeviceの呼び出し方法ですか? – user1089679

+0

@ I2y3n2 - Are der – user1089679

+0

まず、dbusサービスがdbus-daemonに接続し、アドレス(あなたの場合はorg.bluez)を要求します。 – l2y3n2

関連する問題

 関連する問題