diff options
author | Liang Qi <liang.qi@qt.io> | 2016-09-17 22:55:17 +0200 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2016-09-17 22:55:17 +0200 |
commit | ecd018fe2ee4508e094f631d882ecc1360abec01 (patch) | |
tree | 9b1a8f00e0d6eca0f51768d7af4018f7af0187f8 /src | |
parent | 62ec986855e3b3c9fda54a09ca83ae5039663c9c (diff) | |
parent | 724008411c16aaf8fa25c09745e20d0d47d65721 (diff) | |
download | qtsensors-ecd018fe2ee4508e094f631d882ecc1360abec01.tar.gz |
Merge remote-tracking branch 'origin/5.6' into 5.7
Change-Id: I14345192d06a8a0ac9000feab6daea0f11b41f72
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/sensors/ios/iosaccelerometer.h | 2 | ||||
-rw-r--r-- | src/plugins/sensors/ios/iosaccelerometer.mm | 14 | ||||
-rw-r--r-- | src/plugins/sensors/ios/ioscompass.mm | 4 | ||||
-rw-r--r-- | src/plugins/sensors/ios/iosgyroscope.h | 2 | ||||
-rw-r--r-- | src/plugins/sensors/ios/iosgyroscope.mm | 14 | ||||
-rw-r--r-- | src/plugins/sensors/ios/iosmagnetometer.h | 3 | ||||
-rw-r--r-- | src/plugins/sensors/ios/iosmagnetometer.mm | 32 | ||||
-rw-r--r-- | src/plugins/sensors/ios/iosproximitysensor.h | 2 | ||||
-rw-r--r-- | src/plugins/sensors/ios/iosproximitysensor.mm | 14 |
9 files changed, 71 insertions, 16 deletions
diff --git a/src/plugins/sensors/ios/iosaccelerometer.h b/src/plugins/sensors/ios/iosaccelerometer.h index 578501f..620015f 100644 --- a/src/plugins/sensors/ios/iosaccelerometer.h +++ b/src/plugins/sensors/ios/iosaccelerometer.h @@ -62,6 +62,8 @@ private: CMMotionManager *m_motionManager; QAccelerometerReading m_reading; int m_timer; + + static int s_startCount; }; QT_END_NAMESPACE diff --git a/src/plugins/sensors/ios/iosaccelerometer.mm b/src/plugins/sensors/ios/iosaccelerometer.mm index a497d7b..2d2e27a 100644 --- a/src/plugins/sensors/ios/iosaccelerometer.mm +++ b/src/plugins/sensors/ios/iosaccelerometer.mm @@ -46,6 +46,8 @@ char const * const IOSAccelerometer::id("ios.accelerometer"); QT_BEGIN_NAMESPACE +int IOSAccelerometer::s_startCount = 0; + IOSAccelerometer::IOSAccelerometer(QSensor *sensor) : QSensorBackend(sensor) , m_motionManager([QIOSMotionManager sharedManager]) @@ -58,16 +60,24 @@ IOSAccelerometer::IOSAccelerometer(QSensor *sensor) void IOSAccelerometer::start() { + if (m_timer != 0) + return; + int hz = sensor()->dataRate(); m_timer = startTimer(1000 / (hz == 0 ? 60 : hz)); - [m_motionManager startAccelerometerUpdates]; + if (++s_startCount == 1) + [m_motionManager startAccelerometerUpdates]; } void IOSAccelerometer::stop() { - [m_motionManager stopAccelerometerUpdates]; + if (m_timer == 0) + return; + killTimer(m_timer); m_timer = 0; + if (--s_startCount == 0) + [m_motionManager stopAccelerometerUpdates]; } void IOSAccelerometer::timerEvent(QTimerEvent *) diff --git a/src/plugins/sensors/ios/ioscompass.mm b/src/plugins/sensors/ios/ioscompass.mm index 34eb0aa..7fc48d3 100644 --- a/src/plugins/sensors/ios/ioscompass.mm +++ b/src/plugins/sensors/ios/ioscompass.mm @@ -71,8 +71,8 @@ QT_BEGIN_NAMESPACE quint64 timestamp = quint64(newHeading.timestamp.timeIntervalSinceReferenceDate * 1e6); double accuracy = newHeading.headingAccuracy; // Accuracy is the maximum number of degrees the reading can be off. The QtSensors scale - // goes from 1 to 0, with 1 being the best (0 degrees off), and 0 worst (365 degrees off): - qreal calibrationLevel = (accuracy < 0) ? 0 : qMax(0., 1 - (accuracy / 365)); + // goes from 1 to 0, with 1 being the best (0 degrees off), and 0 worst (360 degrees off): + qreal calibrationLevel = (accuracy < 0) ? 0 : qMax(0., 1 - (accuracy / 360)); qreal heading = qreal(newHeading.magneticHeading); m_iosCompass->headingChanged(heading, timestamp, calibrationLevel); } diff --git a/src/plugins/sensors/ios/iosgyroscope.h b/src/plugins/sensors/ios/iosgyroscope.h index e686240..d8ff04a 100644 --- a/src/plugins/sensors/ios/iosgyroscope.h +++ b/src/plugins/sensors/ios/iosgyroscope.h @@ -62,6 +62,8 @@ private: CMMotionManager *m_motionManager; QGyroscopeReading m_reading; int m_timer; + + static int s_startCount; }; QT_END_NAMESPACE diff --git a/src/plugins/sensors/ios/iosgyroscope.mm b/src/plugins/sensors/ios/iosgyroscope.mm index fc9b616..19e65e5 100644 --- a/src/plugins/sensors/ios/iosgyroscope.mm +++ b/src/plugins/sensors/ios/iosgyroscope.mm @@ -44,6 +44,8 @@ char const * const IOSGyroscope::id("ios.gyroscope"); QT_BEGIN_NAMESPACE +int IOSGyroscope::s_startCount = 0; + IOSGyroscope::IOSGyroscope(QSensor *sensor) : QSensorBackend(sensor) , m_motionManager([QIOSMotionManager sharedManager]) @@ -56,16 +58,24 @@ IOSGyroscope::IOSGyroscope(QSensor *sensor) void IOSGyroscope::start() { + if (m_timer != 0) + return; + int hz = sensor()->dataRate(); m_timer = startTimer(1000 / (hz == 0 ? 60 : hz)); - [m_motionManager startGyroUpdates]; + if (++s_startCount == 1) + [m_motionManager startGyroUpdates]; } void IOSGyroscope::stop() { - [m_motionManager stopGyroUpdates]; + if (m_timer == 0) + return; + killTimer(m_timer); m_timer = 0; + if (--s_startCount == 0) + [m_motionManager stopGyroUpdates]; } void IOSGyroscope::timerEvent(QTimerEvent *) diff --git a/src/plugins/sensors/ios/iosmagnetometer.h b/src/plugins/sensors/ios/iosmagnetometer.h index 04cbce1..00d921e 100644 --- a/src/plugins/sensors/ios/iosmagnetometer.h +++ b/src/plugins/sensors/ios/iosmagnetometer.h @@ -66,6 +66,9 @@ private: QMagnetometerReading m_reading; int m_timer; bool m_returnGeoValues; + + static int s_magnetometerStartCount; + static int s_deviceMotionStartCount; }; QT_END_NAMESPACE diff --git a/src/plugins/sensors/ios/iosmagnetometer.mm b/src/plugins/sensors/ios/iosmagnetometer.mm index 6bbad60..98bef2d 100644 --- a/src/plugins/sensors/ios/iosmagnetometer.mm +++ b/src/plugins/sensors/ios/iosmagnetometer.mm @@ -44,6 +44,9 @@ QT_BEGIN_NAMESPACE char const * const IOSMagnetometer::id("ios.magnetometer"); +int IOSMagnetometer::s_magnetometerStartCount = 0; +int IOSMagnetometer::s_deviceMotionStartCount = 0; + IOSMagnetometer::IOSMagnetometer(QSensor *sensor) : QSensorBackend(sensor) , m_motionManager([QIOSMotionManager sharedManager]) @@ -61,24 +64,37 @@ IOSMagnetometer::IOSMagnetometer(QSensor *sensor) void IOSMagnetometer::start() { + if (m_timer != 0) + return; + int hz = sensor()->dataRate(); m_timer = startTimer(1000 / (hz == 0 ? 60 : hz)); m_returnGeoValues = static_cast<QMagnetometer *>(sensor())->returnGeoValues(); - if (m_returnGeoValues) - [m_motionManager startDeviceMotionUpdates]; - else - [m_motionManager startMagnetometerUpdates]; + if (m_returnGeoValues) { + if (++s_deviceMotionStartCount == 1) + [m_motionManager startDeviceMotionUpdates]; + } else { + if (++s_magnetometerStartCount == 1) + [m_motionManager startMagnetometerUpdates]; + } } void IOSMagnetometer::stop() { - if (m_returnGeoValues) - [m_motionManager stopDeviceMotionUpdates]; - else - [m_motionManager stopMagnetometerUpdates]; + if (m_timer == 0) + return; + killTimer(m_timer); m_timer = 0; + + if (m_returnGeoValues) { + if (--s_deviceMotionStartCount == 0) + [m_motionManager stopDeviceMotionUpdates]; + } else { + if (--s_magnetometerStartCount == 0) + [m_motionManager stopMagnetometerUpdates]; + } } void IOSMagnetometer::timerEvent(QTimerEvent *) diff --git a/src/plugins/sensors/ios/iosproximitysensor.h b/src/plugins/sensors/ios/iosproximitysensor.h index c024e02..99f9564 100644 --- a/src/plugins/sensors/ios/iosproximitysensor.h +++ b/src/plugins/sensors/ios/iosproximitysensor.h @@ -64,6 +64,8 @@ public: private: ProximitySensorCallback *m_proximitySensorCallback; QProximityReading m_reading; + + static int s_startCount; }; QT_END_NAMESPACE diff --git a/src/plugins/sensors/ios/iosproximitysensor.mm b/src/plugins/sensors/ios/iosproximitysensor.mm index 6a2465b..eae8560 100644 --- a/src/plugins/sensors/ios/iosproximitysensor.mm +++ b/src/plugins/sensors/ios/iosproximitysensor.mm @@ -45,6 +45,8 @@ char const * const IOSProximitySensor::id("ios.proximitysensor"); QT_BEGIN_NAMESPACE +int IOSProximitySensor::s_startCount = 0; + @interface ProximitySensorCallback : NSObject { IOSProximitySensor *m_iosProximitySensor; @@ -110,8 +112,12 @@ IOSProximitySensor::~IOSProximitySensor() void IOSProximitySensor::start() { + if (m_proximitySensorCallback) + return; + m_proximitySensorCallback = [[ProximitySensorCallback alloc] initWithQIOSProximitySensor:this]; - [UIDevice currentDevice].proximityMonitoringEnabled = YES; + if (++s_startCount == 1) + [UIDevice currentDevice].proximityMonitoringEnabled = YES; } void IOSProximitySensor::proximityChanged(bool close) @@ -123,9 +129,13 @@ void IOSProximitySensor::proximityChanged(bool close) void IOSProximitySensor::stop() { - [UIDevice currentDevice].proximityMonitoringEnabled = NO; + if (!m_proximitySensorCallback) + return; + [m_proximitySensorCallback release]; m_proximitySensorCallback = 0; + if (--s_startCount == 0) + [UIDevice currentDevice].proximityMonitoringEnabled = NO; } QT_END_NAMESPACE |