From 8065e461421ea17a942ea09d67aaa053a136a54e Mon Sep 17 00:00:00 2001 From: Jake Petroules Date: Fri, 30 Sep 2016 18:33:12 -0700 Subject: Port the iOS sensors plugin to the other UIKit platforms MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit watchOS supports accelerometer, gyroscope, and magnetometer. tvOS supports only the proximity sensor. No sensors are available on macOS yet, but the plugin is still built there because many of the underlying APIs are available cross platform and so some macOS sensors can appear here in the future. Change-Id: I1668d81f09c745e60c1906be621a74f969841566 Reviewed-by: Mike Krus Reviewed-by: Tor Arne Vestbø --- src/plugins/sensors/ios/ios.pro | 56 ++++++++++++++++++++-------- src/plugins/sensors/ios/iosaccelerometer.h | 4 +- src/plugins/sensors/ios/iosaccelerometer.mm | 4 +- src/plugins/sensors/ios/iosgyroscope.h | 4 +- src/plugins/sensors/ios/iosgyroscope.mm | 2 + src/plugins/sensors/ios/iosmagnetometer.h | 4 +- src/plugins/sensors/ios/iosmagnetometer.mm | 2 + src/plugins/sensors/ios/iosmotionmanager.h | 5 ++- src/plugins/sensors/ios/iosmotionmanager.mm | 2 + src/plugins/sensors/ios/iosproximitysensor.h | 4 +- src/plugins/sensors/ios/main.mm | 18 ++++++++- src/plugins/sensors/sensors.pro | 4 +- 12 files changed, 78 insertions(+), 31 deletions(-) diff --git a/src/plugins/sensors/ios/ios.pro b/src/plugins/sensors/ios/ios.pro index 17ff009..91ec3ae 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 620015f..14b6cc0 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 - #include #include +@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 2d2e27a..d2d6e9f 100644 --- a/src/plugins/sensors/ios/iosaccelerometer.mm +++ b/src/plugins/sensors/ios/iosaccelerometer.mm @@ -37,11 +37,11 @@ ** ****************************************************************************/ -#include - #include "iosaccelerometer.h" #include "iosmotionmanager.h" +#import + 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 d8ff04a..3969bb1 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 - #include #include +@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 19e65e5..0cd37ae 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 + 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 00d921e..f4ab34a 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 - #include #include +@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 98bef2d..bfbe6e6 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 + 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 6e0cbd6..7c2a1b2 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 -#import +#import + +@class CMMotionManager; @interface QIOSMotionManager : NSObject { } diff --git a/src/plugins/sensors/ios/iosmotionmanager.mm b/src/plugins/sensors/ios/iosmotionmanager.mm index 7db56a2..9074108 100644 --- a/src/plugins/sensors/ios/iosmotionmanager.mm +++ b/src/plugins/sensors/ios/iosmotionmanager.mm @@ -39,6 +39,8 @@ #include "iosmotionmanager.h" +#import + static CMMotionManager *sharedManager = nil; @implementation QIOSMotionManager diff --git a/src/plugins/sensors/ios/iosproximitysensor.h b/src/plugins/sensors/ios/iosproximitysensor.h index 99f9564..4cff4fc 100644 --- a/src/plugins/sensors/ios/iosproximitysensor.h +++ b/src/plugins/sensors/ios/iosproximitysensor.h @@ -43,10 +43,10 @@ #include #include -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 40f84e9..a4766c3 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 +#ifdef HAVE_COREMOTION +#import +#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/sensors.pro b/src/plugins/sensors/sensors.pro index 5a860fd..af2fae1 100644 --- a/src/plugins/sensors/sensors.pro +++ b/src/plugins/sensors/sensors.pro @@ -8,7 +8,7 @@ sensorfw { isEmpty(SENSORS_PLUGINS): SENSORS_PLUGINS = sensorfw generic } -ios { +darwin { isEmpty(SENSORS_PLUGINS): SENSORS_PLUGINS = ios generic } @@ -31,5 +31,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 -- cgit v1.2.1