qtmobility/plugins/sensors/n900/n900accelerometer.cpp
changeset 4 90517678cc4f
parent 1 2b40d63a9c3d
child 11 06b8e2af4411
--- a/qtmobility/plugins/sensors/n900/n900accelerometer.cpp	Fri Apr 16 15:51:22 2010 +0300
+++ b/qtmobility/plugins/sensors/n900/n900accelerometer.cpp	Mon May 03 13:18:40 2010 +0300
@@ -40,16 +40,56 @@
 ****************************************************************************/
 
 #include "n900accelerometer.h"
+#include <QFile>
 #include <QDebug>
 #include <time.h>
+#include <stdio.h>
 
 const char *n900accelerometer::id("n900.accelerometer");
 const char *n900accelerometer::filename("/sys/class/i2c-adapter/i2c-3/3-001d/coord");
+const char *n900accelerometer::range("/sys/class/i2c-adapter/i2c-3/3-001d/scale");
+const char *n900accelerometer::rate("/sys/class/i2c-adapter/i2c-3/3-001d/rate");
 
 n900accelerometer::n900accelerometer(QSensor *sensor)
     : n900filebasedsensor(sensor)
 {
     setReading<QAccelerometerReading>(&m_reading);
+    // Details derived from the kernel driver
+    addDataRate(100, 100); // 100Hz
+    addDataRate(400, 400); // 400Hz
+    sensor->setDataRate(100); // default is 100Hz
+    addOutputRange(-22.418, 22.418, 0.17651); // 2G
+    addOutputRange(-89.672, 89.672, 0.70608); // 8G
+    setDescription(QLatin1String("lis302dl"));
+}
+
+void n900accelerometer::start()
+{
+    FILE *fd;
+
+    if (!QFile::exists(QLatin1String(filename)))
+        goto error;
+
+    // Configure the range
+    fd = fopen(range, "w");
+    if (!fd) goto error;
+    if (sensor()->outputRange() == 0)
+        fprintf(fd, "normal\n");
+    else
+        fprintf(fd, "full\n");
+    fclose(fd);
+
+    // Configure the rate
+    fd = fopen(rate, "w");
+    if (!fd) goto error;
+    fprintf(fd, "%d\n", sensor()->dataRate());
+    fclose(fd);
+
+    n900filebasedsensor::start();
+    return;
+
+error:
+    sensorStopped();
 }
 
 void n900accelerometer::poll()