Пример #1
0
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 );
}
Пример #2
0
    /**
     * 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;
    };