diff --git a/src/FileIO/FitRideFile.cpp b/src/FileIO/FitRideFile.cpp index 8a38d06cb..db3ee1545 100644 --- a/src/FileIO/FitRideFile.cpp +++ b/src/FileIO/FitRideFile.cpp @@ -458,6 +458,7 @@ struct FitFileParser QVariant GarminHWM; XDataSeries *weatherXdata; XDataSeries *gearsXdata; + XDataSeries *positionXdata; XDataSeries *swimXdata; XDataSeries *deveXdata; XDataSeries *extraXdata; @@ -1647,6 +1648,11 @@ struct FitFileParser else delete gearsXdata; + if (!positionXdata->datapoints.empty()) + rf->addXData("POSITION", positionXdata); + else + delete positionXdata; + if (!deveXdata->datapoints.empty()) rf->addXData("DEVELOPER", deveXdata); else @@ -2474,6 +2480,26 @@ genericnext: } break; + case 44: /* rider_position_change */ + { + int secs = (start_time==0?0:time-start_time); + XDataPoint *p = new XDataPoint(); + + switch (event_type) { + case 3: + p->secs = secs; + p->km = last_distance; + p->number[0] = (data32 & 255); + positionXdata->datapoints.append(p); + // qDebug() << QString("Rider position event received %1 type %2 data %3").arg(event).arg(event_type).arg(data32); + break; + default: + errors << QString("Unknown rider position change event %1 type %2").arg(event).arg(event_type); + break; + } + } + break; + case 3: /* workout */ case 4: /* workout_step */ case 5: /* power_down */ @@ -2502,6 +2528,10 @@ genericnext: case 28: /* length */ case 32: /* user_marker */ case 33: /* sport_point */ + case 45: /* elev_high_alert */ + case 46: /* elev_low_alert */ + case 47: /* comm_timeout */ + case 75: /* radar_threat_alert */ default: ; } @@ -4554,6 +4584,11 @@ genericnext: gearsXdata->valuename << "REAR-NUM"; gearsXdata->unitname << ""; + positionXdata = new XDataSeries(); + positionXdata->name = "POSITION"; + positionXdata->valuename << "POSITION"; + positionXdata->unitname << "positiontype"; + deveXdata = new XDataSeries(); deveXdata->name = "DEVELOPER"; diff --git a/src/Train/RealtimeData.h b/src/Train/RealtimeData.h index cd3a7ed83..e66e494a9 100644 --- a/src/Train/RealtimeData.h +++ b/src/Train/RealtimeData.h @@ -56,6 +56,14 @@ public: static QString seriesName(DataSeries); static const QList &listDataSeries(); + // style is coded to be compatible with FIT files + // we use same IDs than ANT power meters messages. + // Aero is an additional one for virtual speed estimation + // (we can suppose aero position when no power is generated during 10s ?) + // and off means not riding (when speed is 0 during 10s ?) + enum riderposition { seated = 0, transistionToSeated = 1, standing = 2, transitionToStanding=3, aero = 10, off = 11 }; + typedef enum riderposition riderPosition; + RealtimeData(); void reset(); // set all values to zero