1

QtでDBusとbluetoothを使い始めました。DBus を介してメソッドを呼び出すだけで応答を取得するスクリプトを開発したいと考えています。コードの一部は次のとおりです(実際には主要部分です):

QString hostname("00:07:80:60:CE:22");
QDBusConnection bus = QDBusConnection::sessionBus();
QDBusInterface interface("org.bluez", "/", "Manager", bus, 0);

qDebug()<<"is valid: "<<interface.isValid()<<interface.lastError();

interface.lastError() は次のエラーを返します:

QDBusError("org.freedesktop.DBus.Error.ServiceUnknown", "名前 org.bluez はどの .service ファイルからも提供されませんでした")

bluez と dbus をインストールしました。コマンドからBluetoothデバイスを検索できます。

コマンド sudo bluetoothd -d -n も試してみましたが、これを取得しました: D-Bus setup failed: Name already in use bluetoothd[21952]: Unable to get on D-Bus

何が問題になるか知っている人はいますか?

4

1 に答える 1

0

表示されるエラー ( name already in use) は、Bluetooth デーモンがシステムで既に実行されていることを意味します。sudo service bluetooth stopBluetoothデーモンを終了するのはかなり残忍な方法だと思いますが、実行することで停止できます。デーモンを終了すると、BlueZ D-Bus 実装も終了するため、使用できなくなります。

Qt の bluetooth/dbus 実装を扱ったことはありませんが、コードにはいくつかの問題があります。

まず第一に、BlueZ インターフェイスはセッションバスではなくシステムバスを介して公開されるため、最初に変更する必要があります。

"Manager"第二に、あなたが渡すパラメータの機能は何ですか? 呼び出された DBus インターフェイスにフックしようとしている場合"Manager"は、何もありません。2013年にこの質問をしたように、あったかどうかはわかりません.D-Feetと呼ばれるプログラムを使用してBlueZが実装するDBusインターフェースを見ることができます。DBus を使用した BlueZ の仕組みを理解するのに役立ったので、ぜひ試してみてください。私はお勧めしsudo apt-get install d-feetます。"/"パスで公開されている唯一のインターフェイスはorg.freedesktop.DBus.Introspectableorg.freedesktop.DBus.Objectmanagerです。ここでも、D-Feet を使用すると、抽象的なインターフェイスとパスを視覚的に表現できるため、これを簡単に確認して実験できます。

万が一、後でGATTに関してトラブルが発生した場合は、実験的フラグで実行bluetoothdします。-Eこれにより、BlueZ GATT 機能が有効になります。(ちょっと頭を上げて)。

于 2016-01-06T10:00:13.330 に答える