2 * Accelerometer class to access the device accelerometer
4 * @author Rikhard Kuutti <rikhard.kuutti@fudeco.com>
5 * @author Kai Rasilainen <kai.rasilainen@fudeco.com>
6 * @author Jukka Kurttila <jktla@suomi24.fi>
7 * @copyright (c) 2010 Speed Freak team
8 * @license http://opensource.org/licenses/gpl-license.php GNU Public License
11 //#define FROM_FILE //Use this flag to read acceleration data from file, set also filename using fileReader->setFileName
12 #include "accelerometer.h"
14 #include <QDBusConnection>
15 #include <QDBusInterface>
16 #include <QDBusPendingReply>
18 #define kFilteringFactor 0.2
19 #define kIterations 100
22 * Default constructor for Accelerometer class
25 Accelerometer::Accelerometer()
28 calibrateDialog = NULL;
29 //fileReader = new filereader();
30 //fileReader->setFileName("45.txt");
34 * Default destructor for Accelerometer class
37 Accelerometer::~Accelerometer()
40 delete calibrateDialog;
49 void Accelerometer::initValues()
51 previousAccelerationX = 0;
52 previousAccelerationY = 0;
53 previousAccelerationZ = 0;
61 * Calibrate. Purpose of this function is to calibrate
62 * accelerometer when stationary.
65 void Accelerometer::calibrate(void)
67 unsigned int iteration = 0;
68 qreal sampleX, sampleY, sampleZ;
70 calibrateDialog = new CalibrateDialog();
71 calibrateDialog->show();
72 calibrateDialog->resetProgressValue();
73 calibrateDialog->setMaxValue( kIterations + 1 );
76 unsigned int numberOfIterations = 50;
78 calibrateDialog->setProgressValue(iteration);
80 fileReader->ReadLine(sampleX,sampleY,sampleZ);
81 //getAcceleration(sampleX, sampleY, sampleZ);
83 calibrationX += sampleX; // Accumulate Samples
84 calibrationY += sampleY; // for all axes.
85 calibrationZ += sampleZ;
89 } while(iteration < numberOfIterations); // kIterations times
91 calibrationX = calibrationX/numberOfIterations; // division by kIterations
92 calibrationY = calibrationY/numberOfIterations;
93 calibrationZ = calibrationZ/numberOfIterations;
97 calibrateDialog->setProgressValue(iteration);
99 getAcceleration(sampleX, sampleY, sampleZ);
101 calibrationX += sampleX; // Accumulate Samples
102 calibrationY += sampleY; // for all axes.
103 calibrationZ += sampleZ;
107 } while(iteration != kIterations); // kIterations times
109 calibrationX = calibrationX/kIterations; // division by kIterations
110 calibrationY = calibrationY/kIterations;
111 calibrationZ = calibrationZ/kIterations;
113 calibrateDialog->close();
117 * Smooths Accelerometer data by applying a low pass filter to data
119 * @param x accelerometer's x-axis input
120 * @param y accelerometer's y-axis input
121 * @param z accelerometer's z-axis input
123 void Accelerometer::smoothData(qreal &x, qreal &y, qreal &z)
125 x = (previousAccelerationX * (1 - kFilteringFactor)) + (x * kFilteringFactor);
126 y = (previousAccelerationY * (1 - kFilteringFactor)) + (y * kFilteringFactor);
127 z = (previousAccelerationZ * (1 - kFilteringFactor)) + (z * kFilteringFactor);
129 previousAccelerationX = x;
130 previousAccelerationY = y;
131 previousAccelerationZ = z;
135 * Gets the raw acceleration data from accelerometer
137 * @param x accelerometer's x-axis input
138 * @param y accelerometer's y-axis input
139 * @param z accelerometer's z-axis input
141 void Accelerometer::getAcceleration(qreal &x, qreal &y, qreal &z)
144 fileReader->ReadLine(x,y,z);
146 QDBusConnection connection(QDBusConnection::systemBus());
147 if (connection.isConnected()) {
148 QDBusInterface interface("com.nokia.mce", "/com/nokia/icd", QString(), connection);
149 QDBusPendingReply<QString, QString, QString, int, int, int> reply;
150 reply = interface.asyncCall("get_device_orientation");
151 reply.waitForFinished();
152 x = static_cast<qreal>(reply.argumentAt<3>()) / 1000;
153 y = static_cast<qreal>(reply.argumentAt<4>()) / 1000;
154 z = static_cast<qreal>(reply.argumentAt<5>()) / 1000;
160 * Get the x calibration component
162 * @return calibrationX x calibration component
164 qreal Accelerometer::getCalibrationX()
170 * Get the y calibration component
172 * @return calibrationY y calibration component
174 qreal Accelerometer::getCalibrationY()
180 * Get the z calibration component
182 * @return calibrationZ z calibration component
184 qreal Accelerometer::getCalibrationZ()