ich würde gerne einen Agenten für BlueZ (Version 5.5) schreiben.
Zur Verbindung mit BlueZ benutze ich libbluedevil in Version 2 (git-Version von schaal).
Eine Verbindung zu BlueZ bekomme ich hin und ich kann mich auch als Agent bekannt machen, indem ich vom Manager die Methode registerAgent aufrufe und meinen Adaptor als Parameter übergebe. Die Debugausgabe des BlueZ-Daemons zeigt auch an, dass ein neuer Agent registriert worden ist. Leider wird nun aber bei einem Pairingvorgang keine der Methoden des Adaptors aufgerufen. Zuerst dachte ich, dass ich vielleicht das verkehrte bzw. ein unvollständiges D-Bus-Interface für den Agenten hatte, weshalb ich bei der BlueZ-Truppe direkt nachfragte. Diese versicherten mir jedoch, dass das Interface das richtige sei und dass es an meinem Qt-Code läge. Hier komme ich nun allerdings nicht weiter, weil ich meinen Fehler nicht sehe. Ich hoffe ihr könnt mir helfen.
Da es sich um recht viele Dateien handelt,packe ich mal das Projekt in den Anhang und schreibe hier nur meine main.cpp rein.
Gruß
Michael
main.ccp
Code: Alles auswählen
// built using Qt 4.8.2
#include <QCoreApplication>
#include <bluedevil/bluedevil.h> // schaal's port to BlueZ 5
#include <iostream>
#include "paths.h"
#include "pairingagent.h"
#include "pairingagentadaptor.h"
using namespace std;
using namespace BlueDevil;
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);
//pairingAgentAdaptor.AuthorizeService(QDBusObjectPath("/Test/Path"), "TestInput");
return app.exec();
}