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. |