--- 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()