diff options
22 files changed, 133 insertions, 47 deletions
diff --git a/.qmake.conf b/.qmake.conf index a2a0d418..aefa1e70 100644 --- a/.qmake.conf +++ b/.qmake.conf @@ -1,3 +1,3 @@ load(qt_build_config) -MODULE_VERSION = 5.7.1 +MODULE_VERSION = 5.8.0 diff --git a/configure.json b/configure.json new file mode 100644 index 00000000..a08cf03d --- /dev/null +++ b/configure.json @@ -0,0 +1,5 @@ +{ + "subconfigs": [ + "src/sensors" + ] +} diff --git a/examples/sensors/grue/import/main.cpp b/examples/sensors/grue/import/main.cpp index dc2372e2..f321acff 100644 --- a/examples/sensors/grue/import/main.cpp +++ b/examples/sensors/grue/import/main.cpp @@ -54,7 +54,7 @@ QT_BEGIN_NAMESPACE class GrueSensorQmlImport : public QQmlExtensionPlugin { Q_OBJECT - Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface" FILE "import.json") + Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid FILE "import.json") public: virtual void registerTypes(const char *uri) { diff --git a/examples/sensors/sensor_explorer/import/main.cpp b/examples/sensors/sensor_explorer/import/main.cpp index 03f83a33..ef50f5af 100644 --- a/examples/sensors/sensor_explorer/import/main.cpp +++ b/examples/sensors/sensor_explorer/import/main.cpp @@ -48,7 +48,7 @@ QT_BEGIN_NAMESPACE class SensorExplorerDeclarativeModule : public QQmlExtensionPlugin { Q_OBJECT - Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface" FILE "import.json") + Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid FILE "import.json") public: virtual void registerTypes(const char *uri) { diff --git a/src/imports/sensors/sensors.cpp b/src/imports/sensors/sensors.cpp index c6f61c22..d1f5bb48 100644 --- a/src/imports/sensors/sensors.cpp +++ b/src/imports/sensors/sensors.cpp @@ -93,7 +93,7 @@ static QObject *global_object_50(QQmlEngine *, QJSEngine *) class QtSensorsDeclarativeModule : public QQmlExtensionPlugin { Q_OBJECT - Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface" FILE "plugin.json") + Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid FILE "plugin.json") public: QtSensorsDeclarativeModule(QObject *parent = 0) : QQmlExtensionPlugin(parent) { initResources(); } virtual void registerTypes(const char *uri) diff --git a/src/plugins/sensors/ios/ios.pro b/src/plugins/sensors/ios/ios.pro index 17ff0095..91ec3ae0 100644 --- a/src/plugins/sensors/ios/ios.pro +++ b/src/plugins/sensors/ios/ios.pro @@ -3,22 +3,46 @@ QT = core sensors OTHER_FILES = plugin.json -HEADERS += iosaccelerometer.h \ - iosmotionmanager.h \ - iosgyroscope.h \ - iosmagnetometer.h \ - ioscompass.h \ - iosproximitysensor.h - -OBJECTIVE_SOURCES += main.mm \ - iosaccelerometer.mm \ - iosmotionmanager.mm \ - iosgyroscope.mm \ - iosmagnetometer.mm \ - ioscompass.mm \ - iosproximitysensor.mm - -LIBS += -framework UIKit -framework CoreMotion -framework CoreLocation +OBJECTIVE_SOURCES += main.mm +LIBS += -framework Foundation + +uikit { + ios { + HEADERS += \ + ioscompass.h + OBJECTIVE_SOURCES += \ + ioscompass.mm + + DEFINES += HAVE_COMPASS + LIBS += -framework CoreLocation + } + + !tvos { + HEADERS += \ + iosaccelerometer.h \ + iosgyroscope.h \ + iosmagnetometer.h \ + iosmotionmanager.h + OBJECTIVE_SOURCES += \ + iosaccelerometer.mm \ + iosgyroscope.mm \ + iosmagnetometer.mm \ + iosmotionmanager.mm + + DEFINES += HAVE_COREMOTION + LIBS += -framework CoreMotion + } + + !watchos { + HEADERS += \ + iosproximitysensor.h + OBJECTIVE_SOURCES += \ + iosproximitysensor.mm + + DEFINES += HAVE_UIDEVICE + LIBS += -framework UIKit + } +} PLUGIN_TYPE = sensors PLUGIN_CLASS_NAME = IOSSensorPlugin diff --git a/src/plugins/sensors/ios/iosaccelerometer.h b/src/plugins/sensors/ios/iosaccelerometer.h index 620015f2..14b6cc03 100644 --- a/src/plugins/sensors/ios/iosaccelerometer.h +++ b/src/plugins/sensors/ios/iosaccelerometer.h @@ -40,11 +40,11 @@ #ifndef IOSACCELEROMETER_H #define IOSACCELEROMETER_H -#include <CoreMotion/CMMotionManager.h> - #include <qsensorbackend.h> #include <qaccelerometer.h> +@class CMMotionManager; + QT_BEGIN_NAMESPACE class IOSAccelerometer : public QSensorBackend diff --git a/src/plugins/sensors/ios/iosaccelerometer.mm b/src/plugins/sensors/ios/iosaccelerometer.mm index 2d2e27ae..d2d6e9fb 100644 --- a/src/plugins/sensors/ios/iosaccelerometer.mm +++ b/src/plugins/sensors/ios/iosaccelerometer.mm @@ -37,11 +37,11 @@ ** ****************************************************************************/ -#include <UIKit/UIAccelerometer.h> - #include "iosaccelerometer.h" #include "iosmotionmanager.h" +#import <CoreMotion/CoreMotion.h> + char const * const IOSAccelerometer::id("ios.accelerometer"); QT_BEGIN_NAMESPACE diff --git a/src/plugins/sensors/ios/iosgyroscope.h b/src/plugins/sensors/ios/iosgyroscope.h index d8ff04a1..3969bb1a 100644 --- a/src/plugins/sensors/ios/iosgyroscope.h +++ b/src/plugins/sensors/ios/iosgyroscope.h @@ -40,11 +40,11 @@ #ifndef IOSGYROSCOPE_H #define IOSGYROSCOPE_H -#include <CoreMotion/CMMotionManager.h> - #include <qsensorbackend.h> #include <qgyroscope.h> +@class CMMotionManager; + QT_BEGIN_NAMESPACE class IOSGyroscope : public QSensorBackend diff --git a/src/plugins/sensors/ios/iosgyroscope.mm b/src/plugins/sensors/ios/iosgyroscope.mm index 19e65e57..0cd37aea 100644 --- a/src/plugins/sensors/ios/iosgyroscope.mm +++ b/src/plugins/sensors/ios/iosgyroscope.mm @@ -40,6 +40,8 @@ #include "iosmotionmanager.h" #include "iosgyroscope.h" +#import <CoreMotion/CoreMotion.h> + char const * const IOSGyroscope::id("ios.gyroscope"); QT_BEGIN_NAMESPACE diff --git a/src/plugins/sensors/ios/iosmagnetometer.h b/src/plugins/sensors/ios/iosmagnetometer.h index 00d921e8..f4ab34a5 100644 --- a/src/plugins/sensors/ios/iosmagnetometer.h +++ b/src/plugins/sensors/ios/iosmagnetometer.h @@ -40,11 +40,11 @@ #ifndef IOSMAGNETOMETER_H #define IOSMAGNETOMETER_H -#include <CoreMotion/CMMotionManager.h> - #include <qsensorbackend.h> #include <qmagnetometer.h> +@class CMMotionManager; + QT_BEGIN_NAMESPACE class IOSMagnetometer : public QSensorBackend diff --git a/src/plugins/sensors/ios/iosmagnetometer.mm b/src/plugins/sensors/ios/iosmagnetometer.mm index 98bef2dd..bfbe6e6d 100644 --- a/src/plugins/sensors/ios/iosmagnetometer.mm +++ b/src/plugins/sensors/ios/iosmagnetometer.mm @@ -40,6 +40,8 @@ #include "iosmotionmanager.h" #include "iosmagnetometer.h" +#import <CoreMotion/CoreMotion.h> + QT_BEGIN_NAMESPACE char const * const IOSMagnetometer::id("ios.magnetometer"); diff --git a/src/plugins/sensors/ios/iosmotionmanager.h b/src/plugins/sensors/ios/iosmotionmanager.h index 6e0cbd62..7c2a1b27 100644 --- a/src/plugins/sensors/ios/iosmotionmanager.h +++ b/src/plugins/sensors/ios/iosmotionmanager.h @@ -40,8 +40,9 @@ #ifndef IOSMOTIONMANAGER_H #define IOSMOTIONMANAGER_H -#import <UIKit/UIKit.h> -#import <CoreMotion/CoreMotion.h> +#import <Foundation/Foundation.h> + +@class CMMotionManager; @interface QIOSMotionManager : NSObject { } diff --git a/src/plugins/sensors/ios/iosmotionmanager.mm b/src/plugins/sensors/ios/iosmotionmanager.mm index 7db56a21..90741089 100644 --- a/src/plugins/sensors/ios/iosmotionmanager.mm +++ b/src/plugins/sensors/ios/iosmotionmanager.mm @@ -39,6 +39,8 @@ #include "iosmotionmanager.h" +#import <CoreMotion/CoreMotion.h> + static CMMotionManager *sharedManager = nil; @implementation QIOSMotionManager diff --git a/src/plugins/sensors/ios/iosproximitysensor.h b/src/plugins/sensors/ios/iosproximitysensor.h index 99f9564e..4cff4fce 100644 --- a/src/plugins/sensors/ios/iosproximitysensor.h +++ b/src/plugins/sensors/ios/iosproximitysensor.h @@ -43,10 +43,10 @@ #include <qsensorbackend.h> #include <qproximitysensor.h> -QT_BEGIN_NAMESPACE - @class ProximitySensorCallback; +QT_BEGIN_NAMESPACE + class IOSProximitySensor : public QSensorBackend { public: diff --git a/src/plugins/sensors/ios/main.mm b/src/plugins/sensors/ios/main.mm index 40f84e9a..a4766c37 100644 --- a/src/plugins/sensors/ios/main.mm +++ b/src/plugins/sensors/ios/main.mm @@ -48,6 +48,11 @@ #include "ioscompass.h" #include "iosproximitysensor.h" +#import <CoreLocation/CoreLocation.h> +#ifdef HAVE_COREMOTION +#import <CoreMotion/CoreMotion.h> +#endif + class IOSSensorPlugin : public QObject, public QSensorPluginInterface, public QSensorBackendFactory { Q_OBJECT @@ -56,30 +61,41 @@ class IOSSensorPlugin : public QObject, public QSensorPluginInterface, public QS public: void registerSensors() { +#ifdef HAVE_COREMOTION QSensorManager::registerBackend(QAccelerometer::type, IOSAccelerometer::id, this); if ([QIOSMotionManager sharedManager].gyroAvailable) QSensorManager::registerBackend(QGyroscope::type, IOSGyroscope::id, this); if ([QIOSMotionManager sharedManager].magnetometerAvailable) QSensorManager::registerBackend(QMagnetometer::type, IOSMagnetometer::id, this); +#endif +#ifdef HAVE_COMPASS if ([CLLocationManager headingAvailable]) QSensorManager::registerBackend(QCompass::type, IOSCompass::id, this); +#endif +#ifdef HAVE_UIDEVICE if (IOSProximitySensor::available()) QSensorManager::registerBackend(QProximitySensor::type, IOSProximitySensor::id, this); +#endif } QSensorBackend *createBackend(QSensor *sensor) { +#ifdef HAVE_COREMOTION if (sensor->identifier() == IOSAccelerometer::id) return new IOSAccelerometer(sensor); if (sensor->identifier() == IOSGyroscope::id) return new IOSGyroscope(sensor); if (sensor->identifier() == IOSMagnetometer::id) return new IOSMagnetometer(sensor); +#endif +#ifdef HAVE_COMPASS if (sensor->identifier() == IOSCompass::id) return new IOSCompass(sensor); +#endif +#ifdef HAVE_UIDEVICE if (sensor->identifier() == IOSProximitySensor::id) return new IOSProximitySensor(sensor); - +#endif return 0; } }; diff --git a/src/plugins/sensors/sensorfw/sensorfw.pro b/src/plugins/sensors/sensorfw/sensorfw.pro index b30b3624..63a66117 100644 --- a/src/plugins/sensors/sensorfw/sensorfw.pro +++ b/src/plugins/sensors/sensorfw/sensorfw.pro @@ -1,11 +1,9 @@ TARGET = qtsensors_sensorfw -QT = core sensors network dbus +QT = core sensors-private network dbus include(sensorfw.pri) - -CONFIG += link_pkgconfig -PKGCONFIG += sensord-qt5 +QMAKE_USE += sensorfw CONFIGFILES.files = Sensors.conf CONFIGFILES.path = /etc/xdg/QtProject/ diff --git a/src/plugins/sensors/sensorfw/sensorfwsensorbase.cpp b/src/plugins/sensors/sensorfw/sensorfwsensorbase.cpp index 17027778..27a07ad6 100644 --- a/src/plugins/sensors/sensorfw/sensorfwsensorbase.cpp +++ b/src/plugins/sensors/sensorfw/sensorfwsensorbase.cpp @@ -59,7 +59,8 @@ SensorfwSensorBase::SensorfwSensorBase(QSensor *sensor) m_efficientBufferSize(1), m_maxBufferSize(1), m_available(false), - running(false) + running(false), + m_attemptRestart(false) { watcher = new QDBusServiceWatcher("com.nokia.SensorService",QDBusConnection::systemBus(), @@ -131,8 +132,12 @@ void SensorfwSensorBase::start() if (returnCode == 0) { running = true; return; + } else if (returnCode == QDBusError::ServiceUnknown) { + m_attemptRestart = true; + qWarning() << "m_sensorInterface did not start, DBus service unknown. Waiting for service registration and retrying."; + } else { + qWarning() << "m_sensorInterface did not start, error code:" << returnCode; } - qWarning() << "m_sensorInterface did not start, error code:" << returnCode; } sensorStopped(); } @@ -142,6 +147,7 @@ void SensorfwSensorBase::stop() if (m_sensorInterface) m_sensorInterface->stop(); running = false; + m_attemptRestart = false; } void SensorfwSensorBase::setRanges(qreal correctionFactor) @@ -219,7 +225,7 @@ void SensorfwSensorBase::connectToSensord() m_remoteSensorManager = 0; return; } - if (running) { + if (running || m_attemptRestart) { stop(); reinitIsNeeded = true; start(); diff --git a/src/plugins/sensors/sensorfw/sensorfwsensorbase.h b/src/plugins/sensors/sensorfw/sensorfwsensorbase.h index df8ca844..3e5e0538 100644 --- a/src/plugins/sensors/sensorfw/sensorfwsensorbase.h +++ b/src/plugins/sensors/sensorfw/sensorfwsensorbase.h @@ -113,6 +113,7 @@ private: QDBusServiceWatcher *watcher; bool m_available; bool running; + bool m_attemptRestart; private slots: void connectToSensord(); void sensordUnregistered(); diff --git a/src/plugins/sensors/sensors.pro b/src/plugins/sensors/sensors.pro index 5a860fdc..76989335 100644 --- a/src/plugins/sensors/sensors.pro +++ b/src/plugins/sensors/sensors.pro @@ -1,14 +1,15 @@ TEMPLATE = subdirs +QT_FOR_CONFIG += sensors-private android { isEmpty(SENSORS_PLUGINS): SENSORS_PLUGINS = android generic } -sensorfw { +qtConfig(sensorfw) { isEmpty(SENSORS_PLUGINS): SENSORS_PLUGINS = sensorfw generic } -ios { +darwin { isEmpty(SENSORS_PLUGINS): SENSORS_PLUGINS = ios generic } @@ -31,5 +32,5 @@ isEmpty(SENSORS_PLUGINS)|contains(SENSORS_PLUGINS, linux):linux:SUBDIRS += linux isEmpty(SENSORS_PLUGINS)|contains(SENSORS_PLUGINS, iio-sensor-proxy):linux:qtHaveModule(dbus):SUBDIRS += iio-sensor-proxy isEmpty(SENSORS_PLUGINS)|contains(SENSORS_PLUGINS, android):android:SUBDIRS += android isEmpty(SENSORS_PLUGINS)|contains(SENSORS_PLUGINS, sensorfw):sensorfw:SUBDIRS += sensorfw -isEmpty(SENSORS_PLUGINS)|contains(SENSORS_PLUGINS, ios):ios:SUBDIRS += ios +isEmpty(SENSORS_PLUGINS)|contains(SENSORS_PLUGINS, ios):darwin:SUBDIRS += ios isEmpty(SENSORS_PLUGINS)|contains(SENSORS_PLUGINS, winrt):winrt:SUBDIRS += winrt diff --git a/src/sensors/configure.json b/src/sensors/configure.json new file mode 100644 index 00000000..633de2a1 --- /dev/null +++ b/src/sensors/configure.json @@ -0,0 +1,32 @@ +{ + "module": "sensors", + + "libraries": { + "sensorfw": { + "label": "sensorfw", + "sources": [ + { "type": "pkgConfig", "args": "sensord-qt5" } + ] + } + }, + + "features": { + "sensorfw": { + "label": "sensorfw", + "condition": "libs.sensorfw", + "output": [ "privateFeature" ] + } + }, + + "report": [ + ], + + "summary": [ + { + "section": "Qt Sensors", + "entries": [ + "sensorfw" + ] + } + ] +} diff --git a/src/sensors/doc/src/sensorfwbackend.qdoc b/src/sensors/doc/src/sensorfwbackend.qdoc index 0ff31f80..c3189bbc 100644 --- a/src/sensors/doc/src/sensorfwbackend.qdoc +++ b/src/sensors/doc/src/sensorfwbackend.qdoc @@ -33,9 +33,5 @@ The Sensorfw sensor backend requires the Sensorfw and sensor daemon. Sensorfw was originally used in MeeGo, and is available on : https://github.com/mer-packages/sensorfw - - To compile the sensorfw backend, you need sensorfw installed and run qmake - with CONFIG+=sensorfw - */ |