qtmobility/plugins/sensors/n900/n900accelerometer.cpp
changeset 4 90517678cc4f
parent 1 2b40d63a9c3d
child 11 06b8e2af4411
equal deleted inserted replaced
1:2b40d63a9c3d 4:90517678cc4f
    38 ** $QT_END_LICENSE$
    38 ** $QT_END_LICENSE$
    39 **
    39 **
    40 ****************************************************************************/
    40 ****************************************************************************/
    41 
    41 
    42 #include "n900accelerometer.h"
    42 #include "n900accelerometer.h"
       
    43 #include <QFile>
    43 #include <QDebug>
    44 #include <QDebug>
    44 #include <time.h>
    45 #include <time.h>
       
    46 #include <stdio.h>
    45 
    47 
    46 const char *n900accelerometer::id("n900.accelerometer");
    48 const char *n900accelerometer::id("n900.accelerometer");
    47 const char *n900accelerometer::filename("/sys/class/i2c-adapter/i2c-3/3-001d/coord");
    49 const char *n900accelerometer::filename("/sys/class/i2c-adapter/i2c-3/3-001d/coord");
       
    50 const char *n900accelerometer::range("/sys/class/i2c-adapter/i2c-3/3-001d/scale");
       
    51 const char *n900accelerometer::rate("/sys/class/i2c-adapter/i2c-3/3-001d/rate");
    48 
    52 
    49 n900accelerometer::n900accelerometer(QSensor *sensor)
    53 n900accelerometer::n900accelerometer(QSensor *sensor)
    50     : n900filebasedsensor(sensor)
    54     : n900filebasedsensor(sensor)
    51 {
    55 {
    52     setReading<QAccelerometerReading>(&m_reading);
    56     setReading<QAccelerometerReading>(&m_reading);
       
    57     // Details derived from the kernel driver
       
    58     addDataRate(100, 100); // 100Hz
       
    59     addDataRate(400, 400); // 400Hz
       
    60     sensor->setDataRate(100); // default is 100Hz
       
    61     addOutputRange(-22.418, 22.418, 0.17651); // 2G
       
    62     addOutputRange(-89.672, 89.672, 0.70608); // 8G
       
    63     setDescription(QLatin1String("lis302dl"));
       
    64 }
       
    65 
       
    66 void n900accelerometer::start()
       
    67 {
       
    68     FILE *fd;
       
    69 
       
    70     if (!QFile::exists(QLatin1String(filename)))
       
    71         goto error;
       
    72 
       
    73     // Configure the range
       
    74     fd = fopen(range, "w");
       
    75     if (!fd) goto error;
       
    76     if (sensor()->outputRange() == 0)
       
    77         fprintf(fd, "normal\n");
       
    78     else
       
    79         fprintf(fd, "full\n");
       
    80     fclose(fd);
       
    81 
       
    82     // Configure the rate
       
    83     fd = fopen(rate, "w");
       
    84     if (!fd) goto error;
       
    85     fprintf(fd, "%d\n", sensor()->dataRate());
       
    86     fclose(fd);
       
    87 
       
    88     n900filebasedsensor::start();
       
    89     return;
       
    90 
       
    91 error:
       
    92     sensorStopped();
    53 }
    93 }
    54 
    94 
    55 void n900accelerometer::poll()
    95 void n900accelerometer::poll()
    56 {
    96 {
    57     // Note that this is a rather inefficient way to generate this data.
    97     // Note that this is a rather inefficient way to generate this data.