X-Git-Url: http://git.maemo.org/git/?p=speedfreak;a=blobdiff_plain;f=Client%2Faccelerometer.cpp;h=afd92ff9c23fb35b2f13445fd0ec441f37eac56c;hp=6f642f9801956ac2e63edbeb575a8e1ea98afcd8;hb=d9c3e184641af47dba6894b63f37358a3936de8e;hpb=0c54e49a827d3398115cd986293f17bd99db829a diff --git a/Client/accelerometer.cpp b/Client/accelerometer.cpp index 6f642f9..afd92ff 100644 --- a/Client/accelerometer.cpp +++ b/Client/accelerometer.cpp @@ -26,6 +26,11 @@ Accelerometer::Accelerometer() initValues(); } +/** + * Constructor for Accelerometer class that takes accelerometer sample rate as parameter + * + * @param p_SampleRate the desired sample rate of accelerometer in milliseconds + */ Accelerometer::Accelerometer(int p_SampleRate) { calculate = new Calculate(); @@ -40,14 +45,16 @@ Accelerometer::Accelerometer(int p_SampleRate) * Default destructor for Accelerometer class * */ -Accelerometer::~Accelerometer() { +Accelerometer::~Accelerometer() +{ } /** * Start measuring * */ -void Accelerometer::start() { +void Accelerometer::start() +{ initValues(); calibrate(); timer->start(sampleRate); @@ -58,7 +65,8 @@ void Accelerometer::start() { * Init class members * */ -void Accelerometer::initValues() { +void Accelerometer::initValues() +{ accelerationX=0; accelerationY=0; accelerationZ=0; @@ -87,34 +95,35 @@ void Accelerometer::initValues() { * accelerometer when stationary. * */ -void Accelerometer::calibrate(void) { +void Accelerometer::calibrate(void) +{ QFile file(kFileName); if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) return; - unsigned int iteration; - iteration = 0; + unsigned int iteration = 0; + QByteArray line; QRegExp rx("([0-9-]+) ([0-9-]+) ([0-9-]+)"); - do{ + do { // Read data, parse with regular expressions and process it line = file.readLine(); rx.indexIn(line); - int Sample_X = rx.cap(1).toInt(); - int Sample_Y = rx.cap(2).toInt(); - int Sample_Z = rx.cap(3).toInt(); + int sampleX = rx.cap(1).toInt(); + int sampleY = rx.cap(2).toInt(); + int sampleZ = rx.cap(3).toInt(); - sstatex += Sample_X; // Accumulate Samples - sstatey += Sample_Y; // for all axes. - sstatez += Sample_Z; + calibrationX += sampleX; // Accumulate Samples + calibrationY += sampleY; // for all axes. + calibrationZ += sampleZ; iteration++; - }while(iteration!=1024); // 1024 times + } while(iteration!=1024); // 1024 times - sstatex = sstatex>>10; // division by 1024 - sstatey = sstatey>>10; - sstatez = sstatez>>10; + calibrationX = calibrationX>>10; // division by 1024 + calibrationY = calibrationY>>10; + calibrationZ = calibrationZ>>10; file.close(); } @@ -123,74 +132,97 @@ void Accelerometer::calibrate(void) { * Stop measuring * */ -void Accelerometer::stop() { +void Accelerometer::stop() +{ timer->stop(); } /** * Set the sample rate of accelerometer * - * @param int pSampleRate desired sample rate + * @param pSampleRate desired sample rate */ -void Accelerometer::setSampleRate(int pSampleRate) { +void Accelerometer::setSampleRate(int pSampleRate) +{ sampleRate = pSampleRate; } -int Accelerometer::getSampleRate() { +/** + * Get the sample rate of accelerometer + * + * @return sampleRate the sample rate of the accelerometer in milliseconds + */ +int Accelerometer::getSampleRate() +{ return sampleRate; } -qreal Accelerometer::getCurrentAcceleration() { +qreal Accelerometer::getCurrentAcceleration() +{ return currentAcceleration; } -qreal Accelerometer::getPreviousTotalAcceleration() { +qreal Accelerometer::getPreviousTotalAcceleration() +{ return previousAcceleration; } -qreal Accelerometer::getTotalAcceleration() { +qreal Accelerometer::getTotalAcceleration() +{ return totalAcceleration; } -qreal Accelerometer::getDistanceTraveled() { +qreal Accelerometer::getDistanceTraveled() +{ return distanceTraveled; } -qreal Accelerometer::getLastDistanceTraveled() { +qreal Accelerometer::getLastDistanceTraveled() +{ return lastDistanceTraveled; } -qreal Accelerometer::getAverageSpeed() { +qreal Accelerometer::getAverageSpeed() +{ return averageSpeed; } -qreal Accelerometer::getTrueAccelerationX() { +qreal Accelerometer::getTrueAccelerationX() +{ return trueAccelerationX; } -qreal Accelerometer::getTrueAccelerationY() { +qreal Accelerometer::getTrueAccelerationY() +{ return trueAccelerationY; } -qreal Accelerometer::getTrueAccelerationZ() { +qreal Accelerometer::getTrueAccelerationZ() +{ return trueAccelerationZ; } -qreal Accelerometer::getPreviousSpeed() { +qreal Accelerometer::getPreviousSpeed() +{ return previousSpeed; } -qreal Accelerometer::getCurrentSpeed() { +qreal Accelerometer::getCurrentSpeed() +{ return currentSpeed; } -qreal Accelerometer::getIntervalTime() { +qreal Accelerometer::getIntervalTime() +{ return intervalTime; } /** * Processes Accelerometer data * + * Opens the accelerometer value file for reading and reads and parses accelerometer values. + * Forwards data to Calculate class for processing + * */ void Accelerometer::processData() { @@ -199,25 +231,24 @@ void Accelerometer::processData() // Read data, parse with regular expressions and process it QByteArray line = file.readLine(); - //QByteArray line; QRegExp rx("([0-9-]+) ([0-9-]+) ([0-9-]+)"); rx.indexIn(line); smoothData(rx.cap(1).toInt(), rx.cap(2).toInt(), rx.cap(3).toInt()); - // Add calibration - trueAccelerationX = accelerationX - sstatex; - trueAccelerationY = accelerationY - sstatey; - trueAccelerationZ = accelerationZ - sstatez; + // Apply calibration + trueAccelerationX = accelerationX - calibrationX; + trueAccelerationY = accelerationY - calibrationY; + trueAccelerationZ = accelerationZ - calibrationZ; // Discrimination window for acceleration values if (trueAccelerationX <= 30 && trueAccelerationX >= -30) { trueAccelerationX = 0; } if (trueAccelerationY <= 30 && trueAccelerationY >= -30) { trueAccelerationY = 0; } if (trueAccelerationZ <= 30 && trueAccelerationZ >= -30) { trueAccelerationZ = 0; } - trueAccelerationX = (accelerationX - previousAccelerationX) / 1000 * kGravity; - trueAccelerationY = (accelerationY - previousAccelerationY) / 1000 * kGravity; - trueAccelerationZ = (accelerationZ - previousAccelerationZ) / 1000 * kGravity; + trueAccelerationX = (accelerationX - previousAccelerationX) /*/ 1000 * kGravity*/; + trueAccelerationY = (accelerationY - previousAccelerationY) /*/ 1000 * kGravity*/; + trueAccelerationZ = (accelerationZ - previousAccelerationZ) /*/ 1000 * kGravity*/; previousAccelerationX = accelerationX; previousAccelerationY = accelerationY; @@ -239,23 +270,24 @@ void Accelerometer::processData() if (fabs(currentAcceleration) < 0.09) { return; } - // Using calculate class to calculate velocity and distance etc. - calculate->CalculateParameters(currentAcceleration,intervalTime ); + calculate->calculateParameters(currentAcceleration,intervalTime ); + + currentSpeed = calculate->getCurrentSpeed(); + distanceTraveled = calculate->getDistanceTraveled(); - currentSpeed = calculate->CurrentSpeed(); - distanceTraveled = calculate->DistanceTraveled(); file.close(); } /** * Smooths Accelerometer data * - * @param qreal x Accelerometers x-axis raw input - * @param qreal y Accelerometers y-axis raw input - * @param qreal z Accelerometers z-axis raw input + * @param x accelerometer's x-axis input + * @param y accelerometer's y-axis input + * @param z accelerometer's z-axis input */ -void Accelerometer::smoothData(qreal x, qreal y, qreal z) { +void Accelerometer::smoothData(qreal x, qreal y, qreal z) +{ accelerationX = x; accelerationY = y; accelerationZ = z;