summaryrefslogtreecommitdiffstats
path: root/src/plugins/sensors
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/sensors')
-rw-r--r--src/plugins/sensors/ios/iosaccelerometer.h2
-rw-r--r--src/plugins/sensors/ios/iosaccelerometer.mm14
-rw-r--r--src/plugins/sensors/ios/ioscompass.mm4
-rw-r--r--src/plugins/sensors/ios/iosgyroscope.h2
-rw-r--r--src/plugins/sensors/ios/iosgyroscope.mm14
-rw-r--r--src/plugins/sensors/ios/iosmagnetometer.h3
-rw-r--r--src/plugins/sensors/ios/iosmagnetometer.mm32
-rw-r--r--src/plugins/sensors/ios/iosproximitysensor.h2
-rw-r--r--src/plugins/sensors/ios/iosproximitysensor.mm14
9 files changed, 71 insertions, 16 deletions
diff --git a/src/plugins/sensors/ios/iosaccelerometer.h b/src/plugins/sensors/ios/iosaccelerometer.h
index 578501fa..620015f2 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 a497d7b4..2d2e27ae 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 34eb0aa7..7fc48d36 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 e686240a..d8ff04a1 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 fc9b6166..19e65e57 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 04cbce14..00d921e8 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 6bbad60b..98bef2dd 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 c024e021..99f9564e 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 6a2465bf..eae85608 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