diff options
author | Alexander Volkov <a.volkov@rusbitech.ru> | 2015-09-30 16:13:55 +0300 |
---|---|---|
committer | Lorn Potter <lorn.potter@gmail.com> | 2015-10-12 03:14:13 +0000 |
commit | 8bd96b78bdf3598549d9de4256af4df93781c528 (patch) | |
tree | cf720bfd30d42283bda23cfc7acde37e5ca410fe | |
parent | a58b60600aa3f280c01f2f741fd7b43d8adc0994 (diff) | |
download | qtsensors-8bd96b78bdf3598549d9de4256af4df93781c528.tar.gz |
Add compass support to the iio-sensor-proxy backend
Change-Id: Ife5ca9224e4a1ac0b57a25aeb59e2f23e505082b
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
6 files changed, 187 insertions, 3 deletions
diff --git a/src/plugins/sensors/iio-sensor-proxy/iio-sensor-proxy.pro b/src/plugins/sensors/iio-sensor-proxy/iio-sensor-proxy.pro index 355097a..b68d9fb 100644 --- a/src/plugins/sensors/iio-sensor-proxy/iio-sensor-proxy.pro +++ b/src/plugins/sensors/iio-sensor-proxy/iio-sensor-proxy.pro @@ -8,18 +8,23 @@ load(qt_plugin) !android:LIBS += -lrt HEADERS += iiosensorproxysensorbase.h \ iiosensorproxylightsensor.h \ - iiosensorproxyorientationsensor.h + iiosensorproxyorientationsensor.h \ + iiosensorproxycompass.h SOURCES += iiosensorproxysensorbase.cpp \ iiosensorproxylightsensor.cpp \ iiosensorproxyorientationsensor.cpp \ + iiosensorproxycompass.cpp \ main.cpp -DBUS_INTERFACES += sensor_proxy dbus_properties +DBUS_INTERFACES += sensor_proxy sensor_proxy_compass dbus_properties sensor_proxy.files = net.hadess.SensorProxy.xml sensor_proxy.header_flags = -N +sensor_proxy_compass.files = net.hadess.SensorProxy.Compass.xml +sensor_proxy_compass.header_flags = -N + dbus_properties.files = org.freedesktop.DBus.Properties.xml dbus_properties.header_flags = -N diff --git a/src/plugins/sensors/iio-sensor-proxy/iiosensorproxycompass.cpp b/src/plugins/sensors/iio-sensor-proxy/iiosensorproxycompass.cpp new file mode 100644 index 0000000..e530e0d --- /dev/null +++ b/src/plugins/sensors/iio-sensor-proxy/iiosensorproxycompass.cpp @@ -0,0 +1,94 @@ +/**************************************************************************** +** +** Copyright (C) 2015 Alexander Volkov <a.volkov@rusbitech.ru> +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the QtSensors module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL21$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "iiosensorproxycompass.h" +#include "compass_interface.h" + +#include <QtDBus/QDBusPendingReply> + +char const * const IIOSensorProxyCompass::id("iio-sensor-proxy.compass"); + +static inline QString dbusPath() { return QStringLiteral("/net/hadess/SensorProxy/Compass"); } + +IIOSensorProxyCompass::IIOSensorProxyCompass(QSensor *sensor) + : IIOSensorProxySensorBase(dbusPath(), NetHadessSensorProxyCompassInterface::staticInterfaceName(), sensor) +{ + setReading<QCompassReading>(&m_reading); + m_sensorProxyInterface = new NetHadessSensorProxyCompassInterface(serviceName(), dbusPath(), + QDBusConnection::systemBus(), this); +} + +IIOSensorProxyCompass::~IIOSensorProxyCompass() +{ +} + +void IIOSensorProxyCompass::start() +{ + if (isServiceRunning()) { + if (m_sensorProxyInterface->hasCompass()) { + QDBusPendingReply<> reply = m_sensorProxyInterface->ClaimCompass(); + reply.waitForFinished(); + if (!reply.isError()) { + double azimuth = m_sensorProxyInterface->compassHeading(); + updateAzimuth(azimuth); + return; + } + } + } + sensorStopped(); +} + +void IIOSensorProxyCompass::stop() +{ + if (isServiceRunning()) { + QDBusPendingReply<> reply = m_sensorProxyInterface->ReleaseCompass(); + reply.waitForFinished(); + } + sensorStopped(); +} + +void IIOSensorProxyCompass::updateProperties(const QVariantMap &changedProperties) +{ + if (changedProperties.contains("CompassHeading")) { + double azimuth = changedProperties.value("CompassHeading").toDouble(); + updateAzimuth(azimuth); + } +} + +void IIOSensorProxyCompass::updateAzimuth(double azimuth) +{ + m_reading.setAzimuth(azimuth); + m_reading.setTimestamp(produceTimestamp()); + newReadingAvailable(); +} diff --git a/src/plugins/sensors/iio-sensor-proxy/iiosensorproxycompass.h b/src/plugins/sensors/iio-sensor-proxy/iiosensorproxycompass.h new file mode 100644 index 0000000..3adf77b --- /dev/null +++ b/src/plugins/sensors/iio-sensor-proxy/iiosensorproxycompass.h @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2015 Alexander Volkov <a.volkov@rusbitech.ru> +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the QtSensors module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL21$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef IIOSENSORPROXY_COMPASS_H +#define IIOSENSORPROXY_COMPASS_H + +#include "iiosensorproxysensorbase.h" + +#include <qcompass.h> + +class NetHadessSensorProxyCompassInterface; + +class IIOSensorProxyCompass : public IIOSensorProxySensorBase +{ + Q_OBJECT +public: + static char const * const id; + + IIOSensorProxyCompass(QSensor *sensor); + ~IIOSensorProxyCompass(); + + void start() Q_DECL_OVERRIDE; + void stop() Q_DECL_OVERRIDE; + +protected: + void updateProperties(const QVariantMap &changedProperties) Q_DECL_OVERRIDE; + +private: + void updateAzimuth(double azimuth); + + QCompassReading m_reading; + NetHadessSensorProxyCompassInterface *m_sensorProxyInterface; +}; + +#endif // IIOSENSORPROXY_COMPASS_H diff --git a/src/plugins/sensors/iio-sensor-proxy/main.cpp b/src/plugins/sensors/iio-sensor-proxy/main.cpp index 85737b3..5776052 100644 --- a/src/plugins/sensors/iio-sensor-proxy/main.cpp +++ b/src/plugins/sensors/iio-sensor-proxy/main.cpp @@ -34,6 +34,7 @@ #include "iiosensorproxyorientationsensor.h" #include "iiosensorproxylightsensor.h" +#include "iiosensorproxycompass.h" #include <qsensorplugin.h> #include <qsensorbackend.h> @@ -54,6 +55,8 @@ public: QSensorManager::registerBackend(QOrientationSensor::type, IIOSensorProxyOrientationSensor::id, this); if (!QSensorManager::isBackendRegistered(QLightSensor::type, IIOSensorProxyLightSensor::id)) QSensorManager::registerBackend(QLightSensor::type, IIOSensorProxyLightSensor::id, this); + if (!QSensorManager::isBackendRegistered(QCompass::type, IIOSensorProxyCompass::id)) + QSensorManager::registerBackend(QCompass::type, IIOSensorProxyCompass::id, this); } QSensorBackend *createBackend(QSensor *sensor) @@ -62,6 +65,8 @@ public: return new IIOSensorProxyOrientationSensor(sensor); else if (sensor->identifier() == IIOSensorProxyLightSensor::id) return new IIOSensorProxyLightSensor(sensor); + else if (sensor->identifier() == IIOSensorProxyCompass::id) + return new IIOSensorProxyCompass(sensor); return 0; } diff --git a/src/plugins/sensors/iio-sensor-proxy/net.hadess.SensorProxy.Compass.xml b/src/plugins/sensors/iio-sensor-proxy/net.hadess.SensorProxy.Compass.xml new file mode 100644 index 0000000..bcadffd --- /dev/null +++ b/src/plugins/sensors/iio-sensor-proxy/net.hadess.SensorProxy.Compass.xml @@ -0,0 +1,14 @@ +<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" + "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd"> +<node> + <interface name="net.hadess.SensorProxy.Compass"> + <method name="ClaimCompass"> + </method> + <method name="ReleaseCompass"> + </method> + <property type="b" name="HasCompass" access="read"> + </property> + <property type="d" name="CompassHeading" access="read"> + </property> + </interface> +</node> diff --git a/src/sensors/doc/src/compatmap.qdoc b/src/sensors/doc/src/compatmap.qdoc index 19ba368..f6a99a9 100644 --- a/src/sensors/doc/src/compatmap.qdoc +++ b/src/sensors/doc/src/compatmap.qdoc @@ -104,7 +104,7 @@ <tr> <td nowrap="nowrap">Compass</td> <td bgcolor="gray"></td> - <td bgcolor="gray"></td> + <td bgcolor="green"></td> <td bgcolor="green"></td> <td bgcolor="green"></td> <td bgcolor="green"></td> |