From b107c4a1e689c24217a1d1fa151f2b76d15bf207 Mon Sep 17 00:00:00 2001 From: Mark Liversedge Date: Wed, 11 Jan 2012 22:23:03 +0000 Subject: [PATCH] FitRideFile distance of zero bug Fit ride file contains samples where the distance is set to zero, even if the previous sample is non-zero. The parser has been adjusted to keep the previous distance used when a zero value is encountered. Fixes #544. --- src/FitRideFile.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/FitRideFile.cpp b/src/FitRideFile.cpp index 5f116551e..2b46e9e35 100644 --- a/src/FitRideFile.cpp +++ b/src/FitRideFile.cpp @@ -60,6 +60,7 @@ struct FitFileReaderState RideFile *rideFile; time_t start_time; time_t last_time; + double last_distance; QMap local_msg_types; QSet unknown_record_fields, unknown_global_msg_nums, unknown_base_type; int interval; @@ -71,7 +72,7 @@ struct FitFileReaderState FitFileReaderState(QFile &file, QStringList &errors) : file(file), errors(errors), rideFile(NULL), start_time(0), - last_time(0), interval(0), devices(0), stopped(true), + last_time(0), last_distance(0.00f), interval(0), devices(0), stopped(true), last_event_type(-1), last_event(-1), last_msg_type(-1) { } @@ -404,6 +405,7 @@ struct FitFileReaderState double deltaCad = cad - prevPoint->cad; double deltaHr = hr - prevPoint->hr; double deltaDist = km - prevPoint->km; + if (km < 0.00001) deltaDist = 0.000f; // effectively zero distance double deltaSpeed = kph - prevPoint->kph; double deltaTorque = nm - prevPoint->nm; double deltaPower = watts - prevPoint->watts; @@ -429,8 +431,11 @@ struct FitFileReaderState } prevPoint = rideFile->dataPoints().back(); } + + if (km < 0.00001f) km = last_distance; rideFile->appendPoint(secs, cad, hr, km, kph, nm, watts, alt, lng, lat, headwind, interval); last_time = time; + last_distance = km; } int read_record(bool &stop, QStringList &errors) {