summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomasz Sterna <tomek@xiaoka.com>2015-03-31 13:35:29 +0200
committerTomasz Sterna <tomek@xiaoka.com>2015-03-31 13:37:04 +0200
commitc01b9da9f441d74578792ffeca2db25734b19704 (patch)
tree03201c4d40085e9f6547d227a5df29ba6206277a
parent435b5066f57ed0f0710dcc61ca927380e3916a7e (diff)
Expose Watch Info over DBus interface
-rw-r--r--app/pebbledinterface.cpp8
-rw-r--r--app/pebbledinterface.h3
-rw-r--r--daemon/manager.cpp1
-rw-r--r--daemon/manager.h3
-rw-r--r--daemon/watchconnector.cpp25
-rw-r--r--daemon/watchconnector.h5
-rw-r--r--org.pebbled.Watch.xml4
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"/>