summaryrefslogtreecommitdiff
path: root/daemon/dbusconnector.cpp
blob: 78992f95aae3a750d2c2ecb063826f4d5ec48279 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include "dbusconnector.h"

#include <QDebug>
#include <QDBusConnection>
#include <QDBusMessage>
#include <QDBusReply>
#include <QDBusArgument>
#include <QDBusObjectPath>

DBusConnector::DBusConnector(QObject *parent) :
    QObject(parent)
{
//dbus-send --system --dest=org.bluez --print-reply / org.bluez.Manager.ListAdapters
//dbus-send --system --dest=org.bluez --print-reply $path org.bluez.Adapter.GetProperties
//dbus-send --system --dest=org.bluez --print-reply $devpath org.bluez.Device.GetProperties
//dbus-send --system --dest=org.bluez --print-reply $devpath org.bluez.Input.Connect
    QDBusConnection session = QDBusConnection::sessionBus();

    findPebble();

}

bool DBusConnector::findPebble()
{
    QDBusConnection system = QDBusConnection::systemBus();

    QDBusReply<QList<QDBusObjectPath>> ListAdaptersReply = system.call(QDBusMessage::createMethodCall("org.bluez",
                                                                                                      "/",
                                                                                                      "org.bluez.Manager",
                                                                                                      "ListAdapters"));
    if (not ListAdaptersReply.isValid()) {
        qWarning() << ListAdaptersReply.error().message();
        return false;
    }

    QList<QDBusObjectPath> adapters = ListAdaptersReply.value();

    if (adapters.isEmpty()) {
        qWarning() << "No BT adapters found";
        return false;
    }

    QDBusReply<QHash<QString,QVariant>> AdapterPropertiesReply = system.call(QDBusMessage::createMethodCall("org.bluez",
                                                                                                            adapters.at(0).path(),
                                                                                                            "org.bluez.Adapter",
                                                                                                            "GetProperties"));
    if (not AdapterPropertiesReply.isValid()) {
        qWarning() << AdapterPropertiesReply.error().message();
        return false;
    }

    QList<QDBusObjectPath> devices;
    AdapterPropertiesReply.value().value("Devices").value<QDBusArgument>() >> devices;

    QString name;
    QString address;

    foreach (QDBusObjectPath path, devices) {
        QDBusReply<QHash<QString,QVariant>> DevicePropertiesReply = system.call(QDBusMessage::createMethodCall("org.bluez",
                                                                                                               path.path(),
                                                                                                               "org.bluez.Device",
                                                                                                               "GetProperties"));
        if (not DevicePropertiesReply.isValid()) {
            qWarning() << DevicePropertiesReply.error().message();
            continue;
        }

        const QHash<QString,QVariant> &dict = DevicePropertiesReply.value();

        QString tmp = dict.value("Name").toString();
        qDebug() << "Found BT device:" << tmp;
        if (tmp.startsWith("Pebble")) {
            name = tmp;
            address = dict.value("Address").toString();
            qDebug() << "Found Pebble:" << name << address;
        }
    }

    if (name.isEmpty() or address.isEmpty()) return false;

    pebbleName = name;
    pebbleAddress = address;
    return true;
}