summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJake Petroules <jake.petroules@qt.io>2016-09-30 18:33:12 -0700
committerJake Petroules <jake.petroules@qt.io>2016-10-05 23:17:53 +0000
commit8065e461421ea17a942ea09d67aaa053a136a54e (patch)
treec9ac30308a2e7686d584b7337ee41485f50b5363
parentdf3374bd4bb8af1494f6a35b1102f15cfe9633e0 (diff)
Port the iOS sensors plugin to the other UIKit platformsv5.8.0-beta1
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 <mike.krus@kdab.com> Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
-rw-r--r--src/plugins/sensors/ios/ios.pro56
-rw-r--r--src/plugins/sensors/ios/iosaccelerometer.h4
-rw-r--r--src/plugins/sensors/ios/iosaccelerometer.mm4
-rw-r--r--src/plugins/sensors/ios/iosgyroscope.h4
-rw-r--r--src/plugins/sensors/ios/iosgyroscope.mm2
-rw-r--r--src/plugins/sensors/ios/iosmagnetometer.h4
-rw-r--r--src/plugins/sensors/ios/iosmagnetometer.mm2
-rw-r--r--src/plugins/sensors/ios/iosmotionmanager.h5
-rw-r--r--src/plugins/sensors/ios/iosmotionmanager.mm2
-rw-r--r--src/plugins/sensors/ios/iosproximitysensor.h4
-rw-r--r--src/plugins/sensors/ios/main.mm18
-rw-r--r--src/plugins/sensors/sensors.pro4
12 files changed, 78 insertions, 31 deletions
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/sensors.pro b/src/plugins/sensors/sensors.pro
index 5a860fdc..af2fae10 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