summaryrefslogtreecommitdiffstats
path: root/src/sensors/qaccelerometer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/sensors/qaccelerometer.cpp')
-rw-r--r--src/sensors/qaccelerometer.cpp78
1 files changed, 76 insertions, 2 deletions
diff --git a/src/sensors/qaccelerometer.cpp b/src/sensors/qaccelerometer.cpp
index 4aeedf42..9b9bd346 100644
--- a/src/sensors/qaccelerometer.cpp
+++ b/src/sensors/qaccelerometer.cpp
@@ -153,6 +153,29 @@ void QAccelerometerReading::setZ(qreal z)
char const * const QAccelerometer::type("QAccelerometer");
/*!
+ \enum QAccelerometer::AccelerationMode
+
+ \brief This enum represents the acceleration mode of an acceleration sensor.
+
+ The acceleration mode controls how the sensor reports acceleration. QAccelerometer::Combined
+ is the only mode in which the values can be directly physically measured, the others are an
+ approximation.
+
+ \value Combined Both the acceleration caused by gravity and the acceleration caused by the
+ user moving the device is reported combined.
+ \value Gravity Only the acceleration caused by gravity is reported. Movements of the device
+ caused by the user have no effect other than changing the direction when the
+ device is rotated.
+ \value User Only the acceleration caused by the user moving the device is reported, the
+ effect of gravity is canceled out. A device at rest therefore should report
+ values of, or close to, zero.
+ In other APIs, this mode might be known as \e {linear acceleration}.
+
+ \sa QAccelerometer::accelerationMode
+ \since 5.1
+*/
+
+/*!
\class QAccelerometer
\ingroup sensors_type
\inmodule QtSensors
@@ -161,7 +184,11 @@ char const * const QAccelerometer::type("QAccelerometer");
The only behavioural difference is that this class sets the type properly.
- This class also features a reading() function that returns a QAccelerometerReading instead of a QSensorReading.
+ It also supports changing the acceleration mode, which controls whether the force of gravity
+ is included in the accelerometer values or not.
+
+ Furthermore, this class features a reading() function that returns a QAccelerometerReading
+ instead of a QSensorReading.
For details about how the sensor works, see \l QAccelerometerReading.
@@ -172,7 +199,7 @@ char const * const QAccelerometer::type("QAccelerometer");
Construct the sensor as a child of \a parent.
*/
QAccelerometer::QAccelerometer(QObject *parent)
- : QSensor(QAccelerometer::type, parent)
+ : QSensor(QAccelerometer::type, *new QAccelerometerPrivate, parent)
{
}
@@ -184,6 +211,45 @@ QAccelerometer::~QAccelerometer()
}
/*!
+ \property QAccelerometer::accelerationMode
+ \brief The acceleration mode controls how acceleration values are reported.
+ \since 5.1
+
+ The acceleration mode controls how the acceleration sensor reports its values.
+ The default mode is QAccelerometer::Combined, which means the acceleration caused
+ by gravity is included in the reported values.
+
+ Acceleration caused by gravity and acceleration caused by the user moving the device
+ are physically impossible to distinguish because of general relativity. Most devices use
+ sensor fusion to figure out which parts of the acceleration is caused by gravity, for example
+ by using a rotation sensor to calculate the gravity direction and assuming a fixed magnitude
+ for gravity. Therefore the result is only an approximation and may be inaccurate.
+ The QAccelerometer::Combined mode is the most accurate one, as it does not involve approximating
+ the gravity.
+
+ Not all backends and devices might support setting the acceleration mode. For those cases, the
+ default mode QAccelerometer::Combined is used, changing it has no effect.
+*/
+QAccelerometer::AccelerationMode QAccelerometer::accelerationMode() const
+{
+ Q_D(const QAccelerometer);
+ return d->accelerationMode;
+}
+
+/*!
+ Sets the acceleration mode to \a accelerationMode.
+ \since 5.1
+*/
+void QAccelerometer::setAccelerationMode(QAccelerometer::AccelerationMode accelerationMode)
+{
+ Q_D(QAccelerometer);
+ if (d->accelerationMode != accelerationMode) {
+ d->accelerationMode = accelerationMode;
+ emit accelerationModeChanged(d->accelerationMode);
+ }
+}
+
+/*!
\fn QAccelerometer::reading() const
Returns the reading class for this sensor.
@@ -191,6 +257,14 @@ QAccelerometer::~QAccelerometer()
\sa QSensor::reading()
*/
+/*!
+ \fn QAccelerometer::accelerationModeChanged(AccelerationMode accelerationMode)
+
+ Emitted when the acceleration mode was changed.
+
+ \since 5.1
+*/
+
#include "moc_qaccelerometer.cpp"
QT_END_NAMESPACE