diff options
author | Thomas McGuire <thomas.mcguire.qnx@kdab.com> | 2013-01-08 11:55:10 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-01-23 18:32:14 +0100 |
commit | acd094c6d795a597d3b899633e207d65f79ea746 (patch) | |
tree | 5794fe09472804158a97be1f6d62fbaabb1be54e /src/sensors/qaccelerometer.cpp | |
parent | a001511d8629c05de807f9927c3fa75f5d59a768 (diff) | |
download | qtsensors-acd094c6d795a597d3b899633e207d65f79ea746.tar.gz |
QAccelerometer: Add AccelerationMode property
Add a new property to be able to toggle effects of gravity on or off.
Implement the Blackberry backend side of this as well.
QTBUG-25842
Change-Id: I15c4cae72373f48b0153b83c6aa3d27b66538c87
Reviewed-by: Lorn Potter <lorn.potter@jollamobile.com>
Reviewed-by: Sérgio Martins <sergio.martins.qnx@kdab.com>
Diffstat (limited to 'src/sensors/qaccelerometer.cpp')
-rw-r--r-- | src/sensors/qaccelerometer.cpp | 78 |
1 files changed, 76 insertions, 2 deletions
diff --git a/src/sensors/qaccelerometer.cpp b/src/sensors/qaccelerometer.cpp index 4aeedf4..9b9bd34 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 |