Я пытаюсь получить показания с устройства, использующего профиль Bluetooth Health Device Profile (в частности, Nonin Onyx II 9560BT).Используя это руководство , я смог сделать это, используя python поверх dbus.Сейчас я пытаюсь перенести его на C ++, и, поскольку я уже использую QT в приложении, я использую привязки QT DBus.
До сих пор я получил следующую короткую программу, основанную на этом API , чтобы проверить его:
#include <QtCore/QCoreApplication>
#include <QtCore/QDebug>
#include <QtCore/QStringList>
#include <QtDBus/QtDBus>
int main(int argc, char **argv)
{
QCoreApplication app(argc, argv);
if (!QDBusConnection::sessionBus().isConnected()) {
fprintf(stderr, "Cannot connect to the D-Bus session bus.\n"
"To start it, run:\n"
"\teval `dbus-launch --auto-syntax`\n");
return 1;
}
QDBusInterface iface("org.bluez","/org/bluez","org.bluez.HealthManager",QDBusConnection::systemBus(),0);
QVariantMap map;
map.insert("DataType",ushort(1004));//same result with simply 1004
map.insert("Role","Sink");
map.insert("Description","HDP Test Manager"); //Optional
//map.insert("ChannelType","Reliable");//Optional, same result with or without
//QList<QVariant> argumentList;
//argumentList.append(map);
QDBusPendingReply<> r = iface.call("CreateApplication",map);
qDebug() << r.reply();
qDebug() << r.error();
return 0;
}
Насколько я могу судить, объект dict«CreateApplication» соответствует a {sv}, который в QT соответствует QVariantMap.Тем не менее, я получаю эту ошибку:
QDBusMessage(type=Error, service="", error name="org.bluez.Error.InvalidArguments", error message="Invalid arguments in method call", signature="", contents=([]) )
Вопрос: Что я делаю не так?Исходя из руководств на freedesktop.org, документации по qt и могущественного Google, это насколько я понял.
Спасибо за любую помощь / помощь всем!
/ Keyz182