2

Qt とその DBus 機能を備えた BlueZ v5.5 のペアリング エージェントを実装しようとしています。

私は、PairingAgentAdaptor と呼ばれる qdbusxml2cpp ツールによって生成されたアダプター クラスと、アダプター クラスのインスタンス化のパラメーターとして与える実装されたメソッド (PairingAgent) を持つクラスを持っています。

オブジェクトを新しいエージェントとして登録することができ、BlueZ デーモンは私のエージェントが登録されていると言います。携帯電話をコンピューターとペアリングしようとすると、BlueZ デーモンは次のように言います。

何が間違っているのかわかりません。ヒントを教えてください。

敬具マイケル


コード:

main.cpp

// built using Qt 4.8.2

#include <QCoreApplication>
#include <bluedevil/bluedevil.h> // schaal's port to BlueZ 5

#define AGENT_PATH "/pairing/agent"

[...]

int main(int argc, char *argv[]) {
    QCoreApplication app(argc, argv);

    PairingAgent pairingAgent;
    PairingAgentAdaptor pairingAgentAdaptor(&pairingAgent);

    bool registerSuccess = QDBusConnection::systemBus().registerObject(QString(AGENT_PATH), &pairingAgentAdaptor);

    if (registerSuccess) {
        cout << "Registered as " << AGENT_PATH << endl;
    } else {
        QDBusConnection::systemBus().unregisterObject(QString(AGENT_PATH), QDBusConnection::UnregisterTree);

        registerSuccess = QDBusConnection::systemBus().registerObject(QString(AGENT_PATH), &pairingAgentAdaptor);

        if (registerSuccess) {
            cout << "Registered as " << AGENT_PATH << " (round 2)" << endl;
        } else {
            cerr << "Registering of " << AGENT_PATH << " failed." << endl;
            exit(1);
        }
    }

    Manager* const manager = Manager::self();
    manager->registerAgent(QString(AGENT_PATH), Manager::DisplayOnly);

    return app.exec();
}

pairingagentadaptor.h

[...]

/*
 * Adaptor class for interface org.bluez.Agent1
 */
class PairingAgentAdaptor: public QDBusAbstractAdaptor {
    Q_OBJECT
    Q_CLASSINFO("D-Bus Interface", "org.bluez.Agent1")
    Q_CLASSINFO("D-Bus Introspection", ""
"  <interface name=\"org.bluez.Agent1\">\n"
"    <method name=\"Release\"/>\n"
"    <method name=\"RequestPinCode\">\n"
"      <arg direction=\"in\" type=\"o\"/>\n"
"      <arg direction=\"out\" type=\"s\"/>\n"
"    </method>\n"
"    <method name=\"DisplayPinCode\">\n"
"      <arg direction=\"in\" type=\"o\"/>\n"
"      <arg direction=\"in\" type=\"s\"/>\n"
"    </method>\n"
"    <method name=\"RequestPasskey\">\n"
"      <arg direction=\"in\" type=\"o\"/>\n"
"      <arg direction=\"out\" type=\"u\"/>\n"
"    </method>\n"
"    <method name=\"DisplayPasskey\">\n"
"      <arg direction=\"in\" type=\"o\"/>\n"
"      <arg direction=\"in\" type=\"u\"/>\n"
"    </method>\n"
"    <method name=\"RequestConfirmation\">\n"
"      <arg direction=\"in\" type=\"o\"/>\n"
"      <arg direction=\"in\" type=\"u\"/>\n"
"    </method>\n"
"    <method name=\"RequestAuthorization\">\n"
"      <arg direction=\"in\" type=\"o\"/>\n"
"      <arg direction=\"in\" type=\"u\"/>\n"
"    </method>\n"
"    <method name=\"AuthorizeService\">\n"
"      <arg direction=\"in\" type=\"o\"/>\n"
"      <arg direction=\"in\" type=\"s\"/>\n"
"    </method>\n"
"    <method name=\"Cancel\"/>\n"
"  </interface>\n"
        "")
public:
    PairingAgentAdaptor(QObject *parent);
    virtual ~PairingAgentAdaptor();

public: // PROPERTIES
public Q_SLOTS: // METHODS
    void AuthorizeService(const QDBusObjectPath &in0, const QString &in1);
    void Cancel();
    void DisplayPasskey(const QDBusObjectPath &in0, uint in1);
    void DisplayPinCode(const QDBusObjectPath &in0, const QString &in1);
    void Release();
    void RequestAuthorization(const QDBusObjectPath &in0, uint in1);
    void RequestConfirmation(const QDBusObjectPath &in0, uint in1);
    uint RequestPasskey(const QDBusObjectPath &in0);
    QString RequestPinCode(const QDBusObjectPath &in0);
Q_SIGNALS: // SIGNALS
};
4

1 に答える 1