void Lap::calcTotals() { if ( m_Points.count() == 0 ) { m_MaxHeartBeats = -1; m_Cadence = -1; m_Calories = -1; return; } quint64 duration = m_Points.first()->time().secsTo( m_Points.last()->time()); quint64 heartBeats = 0; int heartBeatCount = 0; quint64 cadence = 0; int cadenceCount = 0; float distance = m_Points.last()->cummulativeDistance() - m_Points.first()->cummulativeDistance(); for(int i=0;i<m_Points.count();i++) { TrackPointPtr p = m_Points.at(i); if ( p->heartRate() > 0 ) { heartBeatCount++; heartBeats += p->heartRate(); if ( p->heartRate() > m_MaxHeartBeats ) { m_MaxHeartBeats = p->heartRate(); } } if ( cadence > 0 ) { cadence += p->cadence(); cadenceCount++; } } setTotalSeconds( duration ); if ( heartBeatCount>0) { setHeartBeats( heartBeats / heartBeatCount ); } if ( cadenceCount > 0 ) { setCadence( cadence * 60 / cadenceCount ); // use cadenceCount instead of duration in case of corrupted file or standing still. } setLength( distance ); }
/** * Adds a field to the message. Unknown fields are rejected * @return bool if field was known to the message */ bool addField(unsigned char fieldDefNum, unsigned char size, unsigned char baseType, unsigned char arch, char * data) { //TODO: Compare size with expected size //TODO: Compare baseType with expected baseType bool fieldWasAdded = true; switch (fieldDefNum) { case 253: setTimestamp(read0x86(data,arch)); break; case 0: setPositionLat(read0x85(data,arch)); break; case 1: setPositionLong(read0x85(data,arch)); break; case 2: setAltitude(read0x88(data,arch,5,500,0x84)); break; case 3: setHeartRate(read0x02(data,arch)); break; case 4: setCadence(read0x02(data,arch)); break; case 5: setDistance(read0x88(data,arch,100,0,0x86)); break; case 6: setSpeed(read0x88(data,arch,1000,0,0x84)); break; case 7: setPower(read0x84(data,arch)); break; case 9: setGrade(read0x88(data,arch,100,0,0x83)); break; case 10: setResistance(read0x02(data,arch)); break; case 11: setTimeFromCourse(read0x88(data,arch,1000,0,0x85)); break; case 12: setCycleLength(read0x88(data,arch,100,0,0x02)); break; case 13: setTemperature(read0x01(data,arch)); break; case 17: setNumSpeed1s(read0x02(data,arch)); break; case 18: setCycles(read0x02(data,arch)); break; case 19: setTotalCycles(read0x86(data,arch)); break; case 28: setCompressedAccumulatedPower(read0x84(data,arch)); break; case 29: setAccumulatedPower(read0x86(data,arch)); break; case 30: setLeftRightBalance(read0x02(data,arch)); break; case 31: setGpsAccuracy(read0x02(data,arch)); break; case 32: setVerticalSpeed(read0x88(data,arch,1000,0,0x83)); break; case 33: setCalories(read0x84(data,arch)); break; case 43: setLeftTorqueEffectiveness(read0x88(data,arch,2,0,0x02)); break; case 44: setRightTorqueEffectiveness(read0x88(data,arch,2,0,0x02)); break; case 45: setLeftPedalSmoothness(read0x88(data,arch,2,0,0x02)); break; case 46: setRightPedalSmoothness(read0x88(data,arch,2,0,0x02)); break; case 47: setCombinedPedalSmoothness(read0x88(data,arch,2,0,0x02)); break; case 52: setCadence256(read0x88(data,arch,256,0,0x84)); break; default: fieldWasAdded = false; break; } return fieldWasAdded; };