summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorThomas McGuire <thomas.mcguire.qnx@kdab.com>2013-01-08 11:55:10 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-01-23 18:32:14 +0100
commitacd094c6d795a597d3b899633e207d65f79ea746 (patch)
tree5794fe09472804158a97be1f6d62fbaabb1be54e /src
parenta001511d8629c05de807f9927c3fa75f5d59a768 (diff)
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')
-rw-r--r--src/imports/sensors/plugins.qmltypes76
-rw-r--r--src/imports/sensors/qmlaccelerometer.cpp21
-rw-r--r--src/imports/sensors/qmlaccelerometer.h15
-rw-r--r--src/imports/sensors/sensors.cpp35
-rw-r--r--src/imports/sensors/sensors.pro2
-rw-r--r--src/plugins/sensors/blackberry/bbaccelerometer.cpp38
-rw-r--r--src/plugins/sensors/blackberry/bbaccelerometer.h4
-rw-r--r--src/plugins/sensors/blackberry/bbsensorbackend.cpp16
-rw-r--r--src/plugins/sensors/blackberry/bbsensorbackend.h3
-rw-r--r--src/sensors/qaccelerometer.cpp78
-rw-r--r--src/sensors/qaccelerometer.h20
-rw-r--r--src/sensors/qaccelerometer_p.h13
-rw-r--r--src/sensors/qsensor.cpp5
-rw-r--r--src/sensors/qsensor.h1
14 files changed, 293 insertions, 34 deletions
diff --git a/src/imports/sensors/plugins.qmltypes b/src/imports/sensors/plugins.qmltypes
index 687a1f25..00d8c366 100644
--- a/src/imports/sensors/plugins.qmltypes
+++ b/src/imports/sensors/plugins.qmltypes
@@ -3,18 +3,32 @@ import QtQuick.tooling 1.1
// This file describes the plugin-supplied types contained in the library.
// It is used for QML tooling purposes only.
//
-// This file was auto-generated with the command 'qmlplugindump QtSensors 5.0 /home/thomas/src/qtbase/imports/'.
+// This file was auto-generated with the command 'qmlplugindump QtSensors 5.0 /home/thomas/src/qtbase/qml'.
Module {
Component {
name: "QmlAccelerometer"
prototype: "QmlSensor"
- exports: ["Accelerometer 5.0"]
+ exports: ["Accelerometer 5.0", "Accelerometer 5.1"]
+ exportMetaObjectRevisions: [0, 1]
+ Enum {
+ name: "AccelerationMode"
+ values: {
+ "Combined": 0,
+ "Gravity": 1,
+ "User": 2
+ }
+ }
+ Property { name: "accelerationMode"; revision: 1; type: "AccelerationMode" }
+ Signal {
+ name: "accelerationModeChanged"
+ Parameter { name: "accelerationMode"; type: "AccelerationMode" }
+ }
}
Component {
name: "QmlAccelerometerReading"
prototype: "QmlSensorReading"
- exports: ["AccelerometerReading 5.0"]
+ exports: ["AccelerometerReading 5.0", "AccelerometerReading 5.1"]
Property { name: "x"; type: "double"; isReadonly: true }
Property { name: "y"; type: "double"; isReadonly: true }
Property { name: "z"; type: "double"; isReadonly: true }
@@ -22,35 +36,35 @@ Module {
Component {
name: "QmlAmbientLightSensor"
prototype: "QmlSensor"
- exports: ["AmbientLightSensor 5.0"]
+ exports: ["AmbientLightSensor 5.0", "AmbientLightSensor 5.1"]
}
Component {
name: "QmlAmbientLightSensorReading"
prototype: "QmlSensorReading"
- exports: ["AmbientLightReading 5.0"]
+ exports: ["AmbientLightReading 5.0", "AmbientLightReading 5.1"]
Property { name: "lightLevel"; type: "QAmbientLightReading::LightLevel"; isReadonly: true }
}
Component {
name: "QmlCompass"
prototype: "QmlSensor"
- exports: ["Compass 5.0"]
+ exports: ["Compass 5.0", "Compass 5.1"]
}
Component {
name: "QmlCompassReading"
prototype: "QmlSensorReading"
- exports: ["CompassReading 5.0"]
+ exports: ["CompassReading 5.0", "CompassReading 5.1"]
Property { name: "azimuth"; type: "double"; isReadonly: true }
Property { name: "calibrationLevel"; type: "double"; isReadonly: true }
}
Component {
name: "QmlGyroscope"
prototype: "QmlSensor"
- exports: ["Gyroscope 5.0"]
+ exports: ["Gyroscope 5.0", "Gyroscope 5.1"]
}
Component {
name: "QmlGyroscopeReading"
prototype: "QmlSensorReading"
- exports: ["GyroscopeReading 5.0"]
+ exports: ["GyroscopeReading 5.0", "GyroscopeReading 5.1"]
Property { name: "x"; type: "double"; isReadonly: true }
Property { name: "y"; type: "double"; isReadonly: true }
Property { name: "z"; type: "double"; isReadonly: true }
@@ -58,35 +72,35 @@ Module {
Component {
name: "QmlIRProximitySensor"
prototype: "QmlSensor"
- exports: ["IRProximitySensor 5.0"]
+ exports: ["IRProximitySensor 5.0", "IRProximitySensor 5.1"]
}
Component {
name: "QmlIRProximitySensorReading"
prototype: "QmlSensorReading"
- exports: ["IRProximityReading 5.0"]
+ exports: ["IRProximityReading 5.0", "IRProximityReading 5.1"]
Property { name: "reflectance"; type: "double"; isReadonly: true }
}
Component {
name: "QmlLightSensor"
prototype: "QmlSensor"
- exports: ["LightSensor 5.0"]
+ exports: ["LightSensor 5.0", "LightSensor 5.1"]
Property { name: "fieldOfView"; type: "double"; isReadonly: true }
}
Component {
name: "QmlLightSensorReading"
prototype: "QmlSensorReading"
- exports: ["LightReading 5.0"]
+ exports: ["LightReading 5.0", "LightReading 5.1"]
Property { name: "illuminance"; type: "double"; isReadonly: true }
}
Component {
name: "QmlMagnetometer"
prototype: "QmlSensor"
- exports: ["Magnetometer 5.0"]
+ exports: ["Magnetometer 5.0", "Magnetometer 5.1"]
}
Component {
name: "QmlMagnetometerReading"
prototype: "QmlSensorReading"
- exports: ["MagnetometerReading 5.0"]
+ exports: ["MagnetometerReading 5.0", "MagnetometerReading 5.1"]
Property { name: "x"; type: "double"; isReadonly: true }
Property { name: "y"; type: "double"; isReadonly: true }
Property { name: "z"; type: "double"; isReadonly: true }
@@ -95,35 +109,35 @@ Module {
Component {
name: "QmlOrientationSensor"
prototype: "QmlSensor"
- exports: ["OrientationSensor 5.0"]
+ exports: ["OrientationSensor 5.0", "OrientationSensor 5.1"]
}
Component {
name: "QmlOrientationSensorReading"
prototype: "QmlSensorReading"
- exports: ["OrientationReading 5.0"]
+ exports: ["OrientationReading 5.0", "OrientationReading 5.1"]
Property { name: "orientation"; type: "QOrientationReading::Orientation"; isReadonly: true }
}
Component {
name: "QmlProximitySensor"
prototype: "QmlSensor"
- exports: ["ProximitySensor 5.0"]
+ exports: ["ProximitySensor 5.0", "ProximitySensor 5.1"]
}
Component {
name: "QmlProximitySensorReading"
prototype: "QmlSensorReading"
- exports: ["ProximityReading 5.0"]
+ exports: ["ProximityReading 5.0", "ProximityReading 5.1"]
Property { name: "near"; type: "bool"; isReadonly: true }
}
Component {
name: "QmlRotationSensor"
prototype: "QmlSensor"
- exports: ["RotationSensor 5.0"]
+ exports: ["RotationSensor 5.0", "RotationSensor 5.1"]
Property { name: "hasZ"; type: "bool"; isReadonly: true }
}
Component {
name: "QmlRotationSensorReading"
prototype: "QmlSensorReading"
- exports: ["RotationReading 5.0"]
+ exports: ["RotationReading 5.0", "RotationReading 5.1"]
Property { name: "x"; type: "double"; isReadonly: true }
Property { name: "y"; type: "double"; isReadonly: true }
Property { name: "z"; type: "double"; isReadonly: true }
@@ -131,7 +145,7 @@ Module {
Component {
name: "QmlSensor"
prototype: "QObject"
- exports: ["Sensor 5.0"]
+ exports: ["Sensor 5.0", "Sensor 5.1"]
Property { name: "identifier"; type: "string" }
Property { name: "type"; type: "string"; isReadonly: true }
Property { name: "connectedToBackend"; type: "bool"; isReadonly: true }
@@ -151,7 +165,7 @@ Module {
Component {
name: "QmlSensorGesture"
prototype: "QObject"
- exports: ["SensorGesture 5.0"]
+ exports: ["SensorGesture 5.0", "SensorGesture 5.1"]
Property { name: "availableGestures"; type: "QStringList"; isReadonly: true }
Property { name: "gestures"; type: "QStringList" }
Property { name: "validGestures"; type: "QStringList"; isReadonly: true }
@@ -165,7 +179,7 @@ Module {
Component {
name: "QmlSensorGlobal"
prototype: "QObject"
- exports: ["QmlSensors 5.0"]
+ exports: ["QmlSensors 5.0", "QmlSensors 5.1"]
Signal { name: "availableSensorsChanged" }
Method { name: "sensorTypes"; type: "QStringList" }
Method {
@@ -182,7 +196,7 @@ Module {
Component {
name: "QmlSensorOutputRange"
prototype: "QObject"
- exports: ["OutputRange 5.0"]
+ exports: ["OutputRange 5.0", "OutputRange 5.1"]
Property { name: "minimum"; type: "double"; isReadonly: true }
Property { name: "maximum"; type: "double"; isReadonly: true }
Property { name: "accuracy"; type: "double"; isReadonly: true }
@@ -190,26 +204,26 @@ Module {
Component {
name: "QmlSensorRange"
prototype: "QObject"
- exports: ["Range 5.0"]
+ exports: ["Range 5.0", "Range 5.1"]
Property { name: "minimum"; type: "int"; isReadonly: true }
Property { name: "maximum"; type: "int"; isReadonly: true }
}
Component {
name: "QmlSensorReading"
prototype: "QObject"
- exports: ["SensorReading 5.0"]
+ exports: ["SensorReading 5.0", "SensorReading 5.1"]
Property { name: "timestamp"; type: "qulonglong"; isReadonly: true }
}
Component {
name: "QmlTapSensor"
prototype: "QmlSensor"
- exports: ["TapSensor 5.0"]
+ exports: ["TapSensor 5.0", "TapSensor 5.1"]
Property { name: "returnDoubleTapEvents"; type: "bool" }
}
Component {
name: "QmlTapSensorReading"
prototype: "QmlSensorReading"
- exports: ["TapReading 5.0"]
+ exports: ["TapReading 5.0", "TapReading 5.1"]
Property { name: "tapDirection"; type: "QTapReading::TapDirection"; isReadonly: true }
Property { name: "doubleTap"; type: "bool"; isReadonly: true }
Signal { name: "isDoubleTapChanged" }
@@ -217,13 +231,13 @@ Module {
Component {
name: "QmlTiltSensor"
prototype: "QmlSensor"
- exports: ["TiltSensor 5.0"]
+ exports: ["TiltSensor 5.0", "TiltSensor 5.1"]
Method { name: "calibrate" }
}
Component {
name: "QmlTiltSensorReading"
prototype: "QmlSensorReading"
- exports: ["TiltReading 5.0"]
+ exports: ["TiltReading 5.0", "TiltReading 5.1"]
Property { name: "yRotation"; type: "double"; isReadonly: true }
Property { name: "xRotation"; type: "double"; isReadonly: true }
}
diff --git a/src/imports/sensors/qmlaccelerometer.cpp b/src/imports/sensors/qmlaccelerometer.cpp
index 390f8beb..6fc82eab 100644
--- a/src/imports/sensors/qmlaccelerometer.cpp
+++ b/src/imports/sensors/qmlaccelerometer.cpp
@@ -65,12 +65,33 @@ QmlAccelerometer::QmlAccelerometer(QObject *parent)
: QmlSensor(parent)
, m_sensor(new QAccelerometer(this))
{
+ connect(m_sensor, SIGNAL(accelerationModeChanged(AccelerationMode)),
+ this, SIGNAL(accelerationModeChanged(AccelerationMode)));
}
QmlAccelerometer::~QmlAccelerometer()
{
}
+/*!
+ \qmlproperty AccelerationMode Accelerometer::accelerationMode
+ \since QtSensors 5.1
+
+ This property holds the current acceleration mode.
+
+ Please see QAccelerometer::accelerationMode for information about this property.
+*/
+
+QmlAccelerometer::AccelerationMode QmlAccelerometer::accelerationMode() const
+{
+ return static_cast<QmlAccelerometer::AccelerationMode>(m_sensor->accelerationMode());
+}
+
+void QmlAccelerometer::setAccelerationMode(QmlAccelerometer::AccelerationMode accelerationMode)
+{
+ m_sensor->setAccelerationMode(static_cast<QAccelerometer::AccelerationMode>(accelerationMode));
+}
+
QmlSensorReading *QmlAccelerometer::createReading() const
{
return new QmlAccelerometerReading(m_sensor);
diff --git a/src/imports/sensors/qmlaccelerometer.h b/src/imports/sensors/qmlaccelerometer.h
index 95785ed4..b2dc671f 100644
--- a/src/imports/sensors/qmlaccelerometer.h
+++ b/src/imports/sensors/qmlaccelerometer.h
@@ -52,10 +52,25 @@ class QAccelerometer;
class QmlAccelerometer : public QmlSensor
{
Q_OBJECT
+ Q_ENUMS(AccelerationMode)
+ Q_PROPERTY(AccelerationMode accelerationMode READ accelerationMode WRITE setAccelerationMode
+ NOTIFY accelerationModeChanged REVISION 1)
public:
explicit QmlAccelerometer(QObject *parent = 0);
~QmlAccelerometer();
+ // Keep this enum in sync with QAccelerometer::AccelerationMode
+ enum AccelerationMode {
+ Combined,
+ Gravity,
+ User
+ };
+
+ AccelerationMode accelerationMode() const;
+ void setAccelerationMode(AccelerationMode accelerationMode);
+
+signals:
+ void accelerationModeChanged(AccelerationMode accelerationMode);
private:
QSensor *sensor() const Q_DECL_OVERRIDE;
diff --git a/src/imports/sensors/sensors.cpp b/src/imports/sensors/sensors.cpp
index 50ccdf93..95fc8ccc 100644
--- a/src/imports/sensors/sensors.cpp
+++ b/src/imports/sensors/sensors.cpp
@@ -125,6 +125,41 @@ public:
qmlRegisterUncreatableType<QmlTiltSensorReading >(package, major, minor, "TiltReading", QLatin1String("Cannot create TiltReading"));
qmlRegisterType <QmlSensorGesture >(package, major, minor, "SensorGesture");
+
+ // Register the 5.1 interfaces
+ major = 5;
+ minor = 1;
+ qmlRegisterSingletonType <QmlSensorGlobal >(package, major, minor, "QmlSensors", global_object_50);
+ qmlRegisterUncreatableType<QmlSensorRange >(package, major, minor, "Range", QLatin1String("Cannot create Range"));
+ qmlRegisterUncreatableType<QmlSensorOutputRange >(package, major, minor, "OutputRange", QLatin1String("Cannot create OutputRange"));
+ qmlRegisterUncreatableType<QmlSensor >(package, major, minor, "Sensor", QLatin1String("Cannot create Sensor"));
+ qmlRegisterUncreatableType<QmlSensorReading >(package, major, minor, "SensorReading", QLatin1String("Cannot create SensorReading"));
+ qmlRegisterType <QmlAccelerometer,1 >(package, major, minor, "Accelerometer");
+ qmlRegisterUncreatableType<QmlAccelerometerReading >(package, major, minor, "AccelerometerReading", QLatin1String("Cannot create AccelerometerReading"));
+ qmlRegisterType <QmlAmbientLightSensor >(package, major, minor, "AmbientLightSensor");
+ qmlRegisterUncreatableType<QmlAmbientLightSensorReading>(package, major, minor, "AmbientLightReading", QLatin1String("Cannot create AmbientLightReading"));
+ qmlRegisterType <QmlCompass >(package, major, minor, "Compass");
+ qmlRegisterUncreatableType<QmlCompassReading >(package, major, minor, "CompassReading", QLatin1String("Cannot create CompassReading"));
+ qmlRegisterType <QmlGyroscope >(package, major, minor, "Gyroscope");
+ qmlRegisterUncreatableType<QmlGyroscopeReading >(package, major, minor, "GyroscopeReading", QLatin1String("Cannot create GyroscopeReading"));
+ qmlRegisterType <QmlIRProximitySensor >(package, major, minor, "IRProximitySensor");
+ qmlRegisterUncreatableType<QmlIRProximitySensorReading >(package, major, minor, "IRProximityReading", QLatin1String("Cannot create IRProximityReading"));
+ qmlRegisterType <QmlLightSensor >(package, major, minor, "LightSensor");
+ qmlRegisterUncreatableType<QmlLightSensorReading >(package, major, minor, "LightReading", QLatin1String("Cannot create LightReading"));
+ qmlRegisterType <QmlMagnetometer >(package, major, minor, "Magnetometer");
+ qmlRegisterUncreatableType<QmlMagnetometerReading >(package, major, minor, "MagnetometerReading", QLatin1String("Cannot create MagnetometerReading"));
+ qmlRegisterType <QmlOrientationSensor >(package, major, minor, "OrientationSensor");
+ qmlRegisterUncreatableType<QmlOrientationSensorReading >(package, major, minor, "OrientationReading", QLatin1String("Cannot create OrientationReading"));
+ qmlRegisterType <QmlProximitySensor >(package, major, minor, "ProximitySensor");
+ qmlRegisterUncreatableType<QmlProximitySensorReading >(package, major, minor, "ProximityReading", QLatin1String("Cannot create ProximityReading"));
+ qmlRegisterType <QmlRotationSensor >(package, major, minor, "RotationSensor");
+ qmlRegisterUncreatableType<QmlRotationSensorReading >(package, major, minor, "RotationReading", QLatin1String("Cannot create RotationReading"));
+ qmlRegisterType <QmlTapSensor >(package, major, minor, "TapSensor");
+ qmlRegisterUncreatableType<QmlTapSensorReading >(package, major, minor, "TapReading", QLatin1String("Cannot create TapReading"));
+ qmlRegisterType <QmlTiltSensor >(package, major, minor, "TiltSensor");
+ qmlRegisterUncreatableType<QmlTiltSensorReading >(package, major, minor, "TiltReading", QLatin1String("Cannot create TiltReading"));
+
+ qmlRegisterType <QmlSensorGesture >(package, major, minor, "SensorGesture");
}
};
diff --git a/src/imports/sensors/sensors.pro b/src/imports/sensors/sensors.pro
index 210ceac1..76362014 100644
--- a/src/imports/sensors/sensors.pro
+++ b/src/imports/sensors/sensors.pro
@@ -1,7 +1,7 @@
CXX_MODULE = sensors
TARGET = declarative_sensors
TARGETPATH = QtSensors
-IMPORT_VERSION = 5.0 # Doesn't matter, as long as it's a valid version?!
+IMPORT_VERSION = 5.1 # Doesn't matter, as long as it's a valid version?!
QT += qml sensors sensors-private
diff --git a/src/plugins/sensors/blackberry/bbaccelerometer.cpp b/src/plugins/sensors/blackberry/bbaccelerometer.cpp
index dcbd7fcc..0826cf7a 100644
--- a/src/plugins/sensors/blackberry/bbaccelerometer.cpp
+++ b/src/plugins/sensors/blackberry/bbaccelerometer.cpp
@@ -44,6 +44,12 @@ BbAccelerometer::BbAccelerometer(QSensor *sensor)
: BbSensorBackend<QAccelerometerReading>(devicePath(), SENSOR_TYPE_ACCELEROMETER, sensor)
{
setDescription(QLatin1String("X, Y, and Z axes accelerations in m/s^2"));
+
+ QAccelerometer * const accelerometer = qobject_cast<QAccelerometer *>(sensor);
+ if (accelerometer) {
+ connect(accelerometer, SIGNAL(accelerationModeChanged(AccelerationMode)),
+ this, SLOT(applyAccelerationMode()));
+ }
}
bool BbAccelerometer::updateReadingFromEvent(const sensor_event_t &event, QAccelerometerReading *reading)
@@ -58,7 +64,39 @@ bool BbAccelerometer::updateReadingFromEvent(const sensor_event_t &event, QAccel
return true;
}
+void BbAccelerometer::start()
+{
+ applyAccelerationMode();
+ BbSensorBackend<QAccelerometerReading>::start();
+}
+
QString BbAccelerometer::devicePath()
{
return QLatin1String("/dev/sensor/accel");
}
+
+void BbAccelerometer::applyAccelerationMode()
+{
+ const QAccelerometer * const accelerometer = qobject_cast<QAccelerometer *>(sensor());
+ if (accelerometer) {
+ QString fileName;
+ sensor_type_e sensorType;
+ switch (accelerometer->accelerationMode()) {
+ case QAccelerometer::Gravity:
+ fileName = QLatin1String("/dev/sensor/gravity");
+ sensorType = SENSOR_TYPE_GRAVITY;
+ break;
+ case QAccelerometer::User:
+ fileName = QLatin1String("/dev/sensor/linAccel");
+ sensorType = SENSOR_TYPE_LINEAR_ACCEL;
+ break;
+ default:
+ case QAccelerometer::Combined:
+ fileName = devicePath();
+ sensorType = SENSOR_TYPE_ACCELEROMETER;
+ break;
+ }
+
+ setDevice(fileName, sensorType);
+ }
+}
diff --git a/src/plugins/sensors/blackberry/bbaccelerometer.h b/src/plugins/sensors/blackberry/bbaccelerometer.h
index aa47873c..3071c801 100644
--- a/src/plugins/sensors/blackberry/bbaccelerometer.h
+++ b/src/plugins/sensors/blackberry/bbaccelerometer.h
@@ -51,10 +51,14 @@ class BbAccelerometer : public BbSensorBackend<QAccelerometerReading>
public:
explicit BbAccelerometer(QSensor *sensor);
+ void start() Q_DECL_OVERRIDE;
static QString devicePath();
protected:
bool updateReadingFromEvent(const sensor_event_t &event, QAccelerometerReading *reading) Q_DECL_OVERRIDE;
+
+private Q_SLOTS:
+ void applyAccelerationMode();
};
#endif
diff --git a/src/plugins/sensors/blackberry/bbsensorbackend.cpp b/src/plugins/sensors/blackberry/bbsensorbackend.cpp
index fa8c89be..324929fd 100644
--- a/src/plugins/sensors/blackberry/bbsensorbackend.cpp
+++ b/src/plugins/sensors/blackberry/bbsensorbackend.cpp
@@ -107,6 +107,21 @@ sensor_type_e BbSensorBackendBase::sensorType() const
return m_sensorType;
}
+void BbSensorBackendBase::setDevice(const QString &deviceFile, sensor_type_e sensorType)
+{
+ if (deviceFile != m_deviceFile.fileName()) {
+ setPaused(true);
+ delete m_socketNotifier.take();
+ m_deviceFile.close();
+
+ m_sensorType = sensorType;
+ m_deviceFile.setFileName(deviceFile);
+ initSensorInfo();
+ if (m_started)
+ start(); // restart with new device file
+ }
+}
+
void BbSensorBackendBase::initSensorInfo()
{
if (!m_deviceFile.open(QFile::ReadOnly | QFile::Unbuffered)) {
@@ -283,6 +298,7 @@ bool BbSensorBackendBase::isFeatureSupported(QSensor::Feature feature) const
switch (feature) {
case QSensor::AlwaysOn:
case QSensor::Buffering:
+ case QSensor::AccelerationMode:
return true;
case QSensor::Reserved:
case QSensor::GeoValues:
diff --git a/src/plugins/sensors/blackberry/bbsensorbackend.h b/src/plugins/sensors/blackberry/bbsensorbackend.h
index 7e2ad0ec..cd9a0e22 100644
--- a/src/plugins/sensors/blackberry/bbsensorbackend.h
+++ b/src/plugins/sensors/blackberry/bbsensorbackend.h
@@ -75,8 +75,11 @@ public:
protected:
BbGuiHelper *guiHelper() const;
QFile& deviceFile();
+
sensor_type_e sensorType() const;
+ void setDevice(const QString &deviceFile, sensor_type_e sensorType);
+
// This is called while the device file is open during initalization and gives a subclass
// an opportunity to do additional initalization.
virtual void additionalDeviceInit();
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
diff --git a/src/sensors/qaccelerometer.h b/src/sensors/qaccelerometer.h
index 734ce97e..d230eb1f 100644
--- a/src/sensors/qaccelerometer.h
+++ b/src/sensors/qaccelerometer.h
@@ -77,16 +77,36 @@ private:
bool filter(QSensorReading *reading) { return filter(static_cast<QAccelerometerReading*>(reading)); }
};
+class QAccelerometerPrivate;
+
class Q_SENSORS_EXPORT QAccelerometer : public QSensor
{
Q_OBJECT
+ Q_ENUMS(AccelerationMode)
+ Q_PROPERTY(AccelerationMode accelerationMode READ accelerationMode WRITE setAccelerationMode
+ NOTIFY accelerationModeChanged)
public:
explicit QAccelerometer(QObject *parent = 0);
virtual ~QAccelerometer();
+
+ // Keep this enum in sync with QmlAccelerometer::AccelerationMode
+ enum AccelerationMode {
+ Combined,
+ Gravity,
+ User
+ };
+
+ AccelerationMode accelerationMode() const;
+ void setAccelerationMode(AccelerationMode accelerationMode);
+
QAccelerometerReading *reading() const { return static_cast<QAccelerometerReading*>(QSensor::reading()); }
static char const * const type;
+Q_SIGNALS:
+ void accelerationModeChanged(AccelerationMode accelerationMode);
+
private:
+ Q_DECLARE_PRIVATE(QAccelerometer)
Q_DISABLE_COPY(QAccelerometer)
};
diff --git a/src/sensors/qaccelerometer_p.h b/src/sensors/qaccelerometer_p.h
index dd60fd19..371535bf 100644
--- a/src/sensors/qaccelerometer_p.h
+++ b/src/sensors/qaccelerometer_p.h
@@ -53,6 +53,8 @@
// We mean it.
//
+#include "qsensor_p.h"
+
QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
@@ -71,6 +73,17 @@ public:
qreal z;
};
+class QAccelerometerPrivate : public QSensorPrivate
+{
+public:
+ QAccelerometerPrivate()
+ : accelerationMode(QAccelerometer::Combined)
+ {
+ }
+
+ QAccelerometer::AccelerationMode accelerationMode;
+};
+
QT_END_NAMESPACE
QT_END_HEADER
diff --git a/src/sensors/qsensor.cpp b/src/sensors/qsensor.cpp
index 81cb6530..4c3715c2 100644
--- a/src/sensors/qsensor.cpp
+++ b/src/sensors/qsensor.cpp
@@ -200,6 +200,11 @@ void QSensorPrivate::init(const QByteArray &sensorType)
\value FieldOfView The backend specifies its field of view, which can be
read from the QLightSensor::fieldOfView property.
+ The features of QAccelerometer are:
+
+ \value AccelerationMode The backend supports switching the acceleration mode
+ of the acceleromter with the QAccelerometer::accelerationMode property.
+
\omitvalue Reserved
\sa QSensor::isFeatureSupported()
diff --git a/src/sensors/qsensor.h b/src/sensors/qsensor.h
index 46d011d3..f142ca4d 100644
--- a/src/sensors/qsensor.h
+++ b/src/sensors/qsensor.h
@@ -104,6 +104,7 @@ public:
AlwaysOn,
GeoValues,
FieldOfView,
+ AccelerationMode,
Reserved = 257 // Make sure at least 2 bytes are used for the enum to avoid breaking BC later
};