diff options
| author | Tomasz Sterna <tomek@xiaoka.com> | 2015-03-31 13:35:29 +0200 |
|---|---|---|
| committer | Tomasz Sterna <tomek@xiaoka.com> | 2015-03-31 13:37:04 +0200 |
| commit | c01b9da9f441d74578792ffeca2db25734b19704 (patch) | |
| tree | 03201c4d40085e9f6547d227a5df29ba6206277a | |
| parent | 435b5066f57ed0f0710dcc61ca927380e3916a7e (diff) | |
Expose Watch Info over DBus interface
| -rw-r--r-- | app/pebbledinterface.cpp | 8 | ||||
| -rw-r--r-- | app/pebbledinterface.h | 3 | ||||
| -rw-r--r-- | daemon/manager.cpp | 1 | ||||
| -rw-r--r-- | daemon/manager.h | 3 | ||||
| -rw-r--r-- | daemon/watchconnector.cpp | 25 | ||||
| -rw-r--r-- | daemon/watchconnector.h | 5 | ||||
| -rw-r--r-- | org.pebbled.Watch.xml | 4 |
7 files changed, 49 insertions, 0 deletions
diff --git a/app/pebbledinterface.cpp b/app/pebbledinterface.cpp index b30af28..9338f7f 100644 --- a/app/pebbledinterface.cpp +++ b/app/pebbledinterface.cpp @@ -20,6 +20,8 @@ PebbledInterface::PebbledInterface(QObject *parent) : this, &PebbledInterface::nameChanged); connect(watch, &OrgPebbledWatchInterface::AddressChanged, this, &PebbledInterface::addressChanged); + connect(watch, &OrgPebbledWatchInterface::InfoChanged, + this, &PebbledInterface::infoChanged); connect(watch, &OrgPebbledWatchInterface::ConnectedChanged, this, &PebbledInterface::connectedChanged); connect(watch, &OrgPebbledWatchInterface::AppUuidChanged, @@ -140,6 +142,12 @@ QString PebbledInterface::address() const return watch->address(); } +QVariantMap PebbledInterface::info() const +{ + qDebug() << Q_FUNC_INFO; + return watch->info(); +} + QString PebbledInterface::appUuid() const { qDebug() << Q_FUNC_INFO; diff --git a/app/pebbledinterface.h b/app/pebbledinterface.h index 50269ff..cba5416 100644 --- a/app/pebbledinterface.h +++ b/app/pebbledinterface.h @@ -18,6 +18,7 @@ class PebbledInterface : public QObject Q_PROPERTY(bool connected READ connected NOTIFY connectedChanged) Q_PROPERTY(QString name READ name NOTIFY nameChanged) Q_PROPERTY(QString address READ address NOTIFY addressChanged) + Q_PROPERTY(QVariantMap info READ info NOTIFY infoChanged) Q_PROPERTY(QString appUuid READ appUuid NOTIFY appUuidChanged) Q_PROPERTY(QStringList appSlots READ appSlots NOTIFY appSlotsChanged) @@ -31,6 +32,7 @@ public: bool connected() const; QString name() const; QString address() const; + QVariantMap info() const; QString appUuid() const; QStringList appSlots() const; @@ -52,6 +54,7 @@ signals: void connectedChanged(); void nameChanged(); void addressChanged(); + void infoChanged(); void appUuidChanged(); void appSlotsChanged(); void allAppsChanged(); diff --git a/daemon/manager.cpp b/daemon/manager.cpp index 9ba90be..ca3830f 100644 --- a/daemon/manager.cpp +++ b/daemon/manager.cpp @@ -70,6 +70,7 @@ Manager::Manager(Settings *settings, QObject *parent) : connect(dbus, &DBusConnector::pebbleChanged, proxy, &PebbledProxy::NameChanged); connect(dbus, &DBusConnector::pebbleChanged, proxy, &PebbledProxy::AddressChanged); connect(watch, &WatchConnector::connectedChanged, proxy, &PebbledProxy::ConnectedChanged); + connect(watch, &WatchConnector::versionsChanged, proxy, &PebbledProxy::InfoChanged); connect(bank, &BankManager::slotsChanged, proxy, &PebbledProxy::AppSlotsChanged); connect(apps, &AppManager::appsChanged, proxy, &PebbledProxy::AllAppsChanged); diff --git a/daemon/manager.h b/daemon/manager.h index 9a4ed0f..9825339 100644 --- a/daemon/manager.h +++ b/daemon/manager.h @@ -107,6 +107,7 @@ class PebbledProxy : public QObject, protected QDBusContext Q_PROPERTY(QString Name READ Name NOTIFY NameChanged) Q_PROPERTY(QString Address READ Address NOTIFY AddressChanged) + Q_PROPERTY(QVariantMap Info READ Info NOTIFY InfoChanged) Q_PROPERTY(bool Connected READ Connected NOTIFY ConnectedChanged) Q_PROPERTY(QString AppUuid READ AppUuid NOTIFY AppUuidChanged) Q_PROPERTY(QStringList AppSlots READ AppSlots NOTIFY AppSlotsChanged) @@ -121,6 +122,7 @@ public: inline QString Name() const { return pebble()["Name"].toString(); } inline QString Address() const { return pebble()["Address"].toString(); } + inline QVariantMap Info() const { return manager()->watch->versions().toMap(); } inline bool Connected() const { return manager()->watch->isConnected(); } inline QString AppUuid() const { return manager()->currentAppUuid.toString(); } @@ -147,6 +149,7 @@ public slots: signals: void NameChanged(); void AddressChanged(); + void InfoChanged(); void ConnectedChanged(); void AppUuidChanged(); void AppSlotsChanged(); diff --git a/daemon/watchconnector.cpp b/daemon/watchconnector.cpp index f992847..ec9bc20 100644 --- a/daemon/watchconnector.cpp +++ b/daemon/watchconnector.cpp @@ -28,6 +28,29 @@ QDebug operator<< (QDebug d, const WatchConnector::WatchVersions &ver) { return d; } +QVariantMap WatchConnector::SoftwareVersion::toMap() +{ + QVariantMap map; + map.insert("version", this->version); + map.insert("build", this->build.toTime_t()); + map.insert("commit", this->commit); + map.insert("hardware", this->hw_string); + map.insert("metadata", this->metadata_version); + map.insert("recovery", this->is_recovery); + return map; +} + +QVariantMap WatchConnector::WatchVersions::toMap() +{ + QVariantMap map; + map.insert("bootloader", this->bootLoaderBuild.toTime_t()); + map.insert("serial", this->serialNumber); + map.insert("address", this->address.toHex()); + map.insertMulti("firmware", this->main.toMap()); + map.insertMulti("firmware", this->safe.toMap()); + return map; +} + WatchConnector::WatchConnector(QObject *parent) : QObject(parent), l(metaObject()->className()), socket(nullptr), is_connected(false) { @@ -72,6 +95,8 @@ WatchConnector::WatchConnector(QObject *parent) : if (u.bad()) { qCWarning(l) << "short read while reading firmware version"; + } else { + emit versionsChanged(); } qCDebug(l) << "hardware information:" << _versions; diff --git a/daemon/watchconnector.h b/daemon/watchconnector.h index 400908c..7ee9bc8 100644 --- a/daemon/watchconnector.h +++ b/daemon/watchconnector.h @@ -197,6 +197,8 @@ public: HardwareRevision hw_revision; QString hw_string; quint8 metadata_version; + + QVariantMap toMap(); }; struct WatchVersions { @@ -206,6 +208,8 @@ public: QString hardwareRevision; QString serialNumber; QByteArray address; + + QVariantMap toMap(); }; typedef QMap<int, QVariant> Dict; @@ -233,6 +237,7 @@ public: signals: void nameChanged(); + void versionsChanged(); void connectedChanged(); public slots: diff --git a/org.pebbled.Watch.xml b/org.pebbled.Watch.xml index 6336d04..f125b03 100644 --- a/org.pebbled.Watch.xml +++ b/org.pebbled.Watch.xml @@ -4,12 +4,16 @@ <interface name="org.pebbled.Watch"> <property name="Name" type="s" access="read"/> <property name="Address" type="s" access="read"/> + <property name="Info" type="a{sv}" access="read"> + <annotation name="org.qtproject.QtDBus.QtTypeName" value="QVariantMap"/> + </property> <property name="Connected" type="b" access="read"/> <property name="AppUuid" type="s" access="read"/> <!-- Qt does not yet support property changed signals, so we fake them. --> <signal name="NameChanged"/> <signal name="AddressChanged"/> + <signal name="InfoChanged"/> <signal name="ConnectedChanged"/> <signal name="AppUuidChanged"/> |
