diff options
Diffstat (limited to 'src/sensors/qaccelerometer.cpp')
-rw-r--r-- | src/sensors/qaccelerometer.cpp | 116 |
1 files changed, 114 insertions, 2 deletions
diff --git a/src/sensors/qaccelerometer.cpp b/src/sensors/qaccelerometer.cpp index 02fc7825b7..ed019f34a4 100644 --- a/src/sensors/qaccelerometer.cpp +++ b/src/sensors/qaccelerometer.cpp @@ -162,13 +162,37 @@ 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 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}. + \value Combined Both the acceleration caused by gravity and the acceleration caused by the + user moving the device is reported combined. + + \sa QAccelerometer::accelerationMode + \since 1.3 +*/ + +/*! \class QAccelerometer \ingroup sensors_type \inmodule QtSensors \brief The QAccelerometer class is a convenience wrapper around QSensor. - The only behavioural difference is that this class sets the type properly. + The only behavioural difference is that this class sets the type properly and that it supports + changing the acceleration mode. This class also features a reading() function that returns a QAccelerometerReading instead of a QSensorReading. @@ -179,11 +203,23 @@ char const * const QAccelerometer::type("QAccelerometer"); */ /*! + \internal + */ +QAccelerometerPrivate *QAccelerometer::d_func() const +{ + return static_cast<QAccelerometerPrivate*>(QSensor::d_func()); +} + +/*! \fn QAccelerometer::QAccelerometer(QObject *parent) Construct the sensor as a child of \a parent. \since 1.0 */ +QAccelerometer::QAccelerometer(QObject *parent) + : QSensor(QAccelerometer::type, new QAccelerometerPrivate(this), parent) +{ +} /*! \fn QAccelerometer::~QAccelerometer() @@ -191,6 +227,76 @@ char const * const QAccelerometer::type("QAccelerometer"); Destroy the sensor. Stops the sensor if it has not already been stopped. \since 1.0 */ +QAccelerometer::~QAccelerometer() +{ +} + +/*! + \property QAccelerometer::accelerationMode + \brief The acceleration mode controls how acceleration values are reported. + + 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. + + \since 1.3 +*/ +QAccelerometer::AccelerationMode QAccelerometer::accelerationMode() const +{ + Q_D(const QAccelerometer); + return d->accelerationMode; +} + +/*! + Sets the acceleration mode to \a accelerationMode. + \since 1.3 +*/ +void QAccelerometer::setAccelerationMode(QAccelerometer::AccelerationMode accelerationMode) +{ + Q_D(QAccelerometer); + if (d->accelerationMode != accelerationMode) { + d->accelerationMode = accelerationMode; + emit accelerationModeChanged(d->accelerationMode); + } +} + +/*! + Convenience method to set the acceleration mode to QAccelerometer::User. + \since 1.3 +*/ +void QAccelerometer::setUserAcceleration() +{ + setAccelerationMode(QAccelerometer::User); +} + +/*! + Convenience method to set the acceleration mode to QAccelerometer::Gravity. + \since 1.3 +*/ +void QAccelerometer::setGravityAcceleration() +{ + setAccelerationMode(QAccelerometer::Gravity); +} + +/*! + Convenience method to set the acceleration mode to QAccelerometer::Combined. + \since 1.3 +*/ +void QAccelerometer::setCombinedAcceleration() +{ + setAccelerationMode(QAccelerometer::Combined); +} /*! \fn QAccelerometer::reading() const @@ -201,6 +307,12 @@ char const * const QAccelerometer::type("QAccelerometer"); \since 1.0 */ +/*! + \fn QAccelerometer::accelerationModeChanged(AccelerationMode accelerationMode) + + Emitted when the acceleration mode was changed. + \since 1.3 +*/ + #include "moc_qaccelerometer.cpp" QTM_END_NAMESPACE - |