summaryrefslogtreecommitdiffstats
path: root/src/plugins/sensors/eandroid/eandroidmagnetometer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/sensors/eandroid/eandroidmagnetometer.cpp')
-rw-r--r--src/plugins/sensors/eandroid/eandroidmagnetometer.cpp39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/plugins/sensors/eandroid/eandroidmagnetometer.cpp b/src/plugins/sensors/eandroid/eandroidmagnetometer.cpp
new file mode 100644
index 0000000..8747d45
--- /dev/null
+++ b/src/plugins/sensors/eandroid/eandroidmagnetometer.cpp
@@ -0,0 +1,39 @@
+#include "eandroidmagnetometer.h"
+
+EAndroidMagnetometer::EAndroidMagnetometer(int type, QSensor *sensor)
+ : EAndroidBaseSensor(type, sensor)
+{
+ setReading<QMagnetometerReading>(&m_reading);
+}
+
+EAndroidMagnetometer::~EAndroidMagnetometer()
+{
+}
+
+void EAndroidMagnetometer::processEvent(sensors_event_t &event)
+{
+ m_reading.setTimestamp(event.timestamp / 1000);
+ // convect micro-Tesla to tesla
+ m_reading.setX(event.magnetic.x / 1e6);
+ m_reading.setY(event.magnetic.y / 1e6);
+ m_reading.setZ(event.magnetic.z / 1e6);
+
+ switch (event.magnetic.status) {
+ case SENSOR_STATUS_UNRELIABLE:
+ m_reading.setCalibrationLevel(0.0);
+ break;
+ case SENSOR_STATUS_ACCURACY_LOW:
+ m_reading.setCalibrationLevel(0.3);
+ break;
+ case SENSOR_STATUS_ACCURACY_MEDIUM:
+ m_reading.setCalibrationLevel(0.6);
+ break;
+ case SENSOR_STATUS_ACCURACY_HIGH:
+ m_reading.setCalibrationLevel(1.0);
+ break;
+ default:
+ break;
+ }
+
+ newReadingAvailable();
+}