summaryrefslogtreecommitdiff
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)
downloadqtsensors-8065e461421ea17a942ea09d67aaa053a136a54e.tar.gz
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 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 <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 2d2e27a..d2d6e9f 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 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 <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 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 <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 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 <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 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 <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 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 <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 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 <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 99f9564..4cff4fc 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 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 <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 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