POSITION - FitFile decoder - Add cyclist position

This commit is contained in:
Vianney BOYER
2023-12-10 15:53:56 +01:00
committed by Alejandro Martinez
parent ad6a0c30e2
commit 29644fe102
2 changed files with 43 additions and 0 deletions

View File

@@ -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";

View File

@@ -56,6 +56,14 @@ public:
static QString seriesName(DataSeries);
static const QList<DataSeries> &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