Skip to content

Commit

Permalink
Implement Gamin Activity Extension LX element (#31)
Browse files Browse the repository at this point in the history
This is the last element we needed to implement to support the Garmin
Activity Extension.

Definitely should do some refactoring of the TrainingSession class
sometime - its grown into a small beast.
  • Loading branch information
pcolby committed Sep 10, 2014
1 parent 16d543f commit d708d25
Show file tree
Hide file tree
Showing 7 changed files with 245 additions and 7 deletions.
48 changes: 47 additions & 1 deletion src/polar/v2/trainingsession.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1882,6 +1882,53 @@ QDomDocument TrainingSession::toTCX(const QString &buildTime) const

track = doc.createElement(QLatin1String("Track"));
lap.appendChild(track);

// Add any enabled extensions.
if (tcxOptions.testFlag(GarminActivityExtension)) {
QDomElement extensions = doc.createElement(QLatin1String("Extensions"));
lap.appendChild(extensions);

// Add the Garmin Activity Extension.
if (tcxOptions.testFlag(GarminActivityExtension)) {
QDomElement lx = doc.createElement(QLatin1String("LX"));
lx.setAttribute(QLatin1String("xmlns"),
QLatin1String("http://www.garmin.com/xmlschemas/ActivityExtension/v2"));
extensions.appendChild(lx);

if (stats.contains(QLatin1String("speed"))) {
lx.appendChild(doc.createElement(QLatin1String("AvgSpeed")))
.appendChild(doc.createTextNode(QString::fromLatin1("%1")
.arg(first(firstMap(stats.value(QLatin1String("speed")))
.value(QLatin1String("average"))).toDouble())));
}

if (stats.contains(QLatin1String("cadence"))) {
const QVariantMap cadence = firstMap(stats.value(QLatin1String("cadence")));

const QString sensor = getTcxCadenceSensor(
first(firstMap(create.value(QLatin1String("sport")))
.value(QLatin1String("value"))).toULongLong());

if (sensor != QLatin1String("Footpod")) {
lx.appendChild(doc.createElement(QLatin1String("MaxBikeCadence")))
.appendChild(doc.createTextNode(QString::fromLatin1("%1")
.arg(first(cadence.value(QLatin1String("maximum"))).toUInt())));
}

lx.appendChild(doc.createElement(QLatin1String("AvgRunCadence")))
.appendChild(doc.createTextNode(QString::fromLatin1("%1")
.arg(first(cadence.value(QLatin1String("average"))).toUInt())));

if (sensor == QLatin1String("Footpod")) {
lx.appendChild(doc.createElement(QLatin1String("MaxRunCadence")))
.appendChild(doc.createTextNode(QString::fromLatin1("%1")
.arg(first(cadence.value(QLatin1String("maximum"))).toUInt())));
}

/// @todo AvgWatts and MaxWatts when power data is available.
}
}
}
}

QDomElement trackPoint = doc.createElement(QLatin1String("Trackpoint"));
Expand Down Expand Up @@ -2063,7 +2110,6 @@ void TrainingSession::addLapStats(QDomDocument &doc, QDomElement &lap,
lap.appendChild(doc.createElement(QLatin1String("Intensity")))
.appendChild(doc.createTextNode(QString::fromLatin1("Active")));

// Cadence is only available per exercise, not per lap.
if (stats.contains(QLatin1String("cadence"))) {
lap.appendChild(doc.createElement(QLatin1String("Cadence")))
.appendChild(doc.createTextNode(QString::fromLatin1("%1")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?>
<TrainingCenterDatabase xsi:schemaLocation="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2 http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2" xmlns:ax2="http://www.garmin.com/xmlschemas/ActivityExtension/v2">
<TrainingCenterDatabase xmlns="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2" xsi:schemaLocation="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2 http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd" xmlns:ax2="http://www.garmin.com/xmlschemas/ActivityExtension/v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Activities>
<Activity Sport="Running">
<Id>2014-07-13T07:26:23+10:00</Id>
Expand Down Expand Up @@ -27078,6 +27078,11 @@
</Extensions>
</Trackpoint>
</Track>
<Extensions>
<LX xmlns="http://www.garmin.com/xmlschemas/ActivityExtension/v2">
<AvgSpeed>5.87056</AvgSpeed>
</LX>
</Extensions>
</Lap>
<Lap StartTime="2014-07-13T07:56:27+10:00">
<TotalTimeSeconds>1492.25</TotalTimeSeconds>
Expand Down Expand Up @@ -49489,6 +49494,11 @@
</Extensions>
</Trackpoint>
</Track>
<Extensions>
<LX xmlns="http://www.garmin.com/xmlschemas/ActivityExtension/v2">
<AvgSpeed>4.90671</AvgSpeed>
</LX>
</Extensions>
</Lap>
<Lap StartTime="2014-07-13T08:21:20+10:00">
<TotalTimeSeconds>227.5</TotalTimeSeconds>
Expand Down Expand Up @@ -52910,6 +52920,11 @@
</Extensions>
</Trackpoint>
</Track>
<Extensions>
<LX xmlns="http://www.garmin.com/xmlschemas/ActivityExtension/v2">
<AvgSpeed>8.38207</AvgSpeed>
</LX>
</Extensions>
</Lap>
<Lap StartTime="2014-07-13T08:25:07+10:00">
<TotalTimeSeconds>1561.62</TotalTimeSeconds>
Expand Down Expand Up @@ -76356,6 +76371,11 @@
</Extensions>
</Trackpoint>
</Track>
<Extensions>
<LX xmlns="http://www.garmin.com/xmlschemas/ActivityExtension/v2">
<AvgSpeed>5.982</AvgSpeed>
</LX>
</Extensions>
</Lap>
<Lap StartTime="2014-07-13T08:51:09+10:00">
<TotalTimeSeconds>153.5</TotalTimeSeconds>
Expand Down Expand Up @@ -78667,6 +78687,11 @@
</Extensions>
</Trackpoint>
</Track>
<Extensions>
<LX xmlns="http://www.garmin.com/xmlschemas/ActivityExtension/v2">
<AvgSpeed>9.00117</AvgSpeed>
</LX>
</Extensions>
</Lap>
</Activity>
</Activities>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?>
<TrainingCenterDatabase xsi:schemaLocation="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2 http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2" xmlns:ax2="http://www.garmin.com/xmlschemas/ActivityExtension/v2">
<TrainingCenterDatabase xmlns="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2" xsi:schemaLocation="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2 http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd" xmlns:ax2="http://www.garmin.com/xmlschemas/ActivityExtension/v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Activities>
<Activity Sport="Running">
<Id>2014-07-13T07:26:23+10:00</Id>
Expand Down Expand Up @@ -27078,6 +27078,11 @@
</Extensions>
</Trackpoint>
</Track>
<Extensions>
<LX xmlns="http://www.garmin.com/xmlschemas/ActivityExtension/v2">
<AvgSpeed>5.87056</AvgSpeed>
</LX>
</Extensions>
</Lap>
<Lap StartTime="2014-07-13T07:56:27+10:00">
<TotalTimeSeconds>1492.25</TotalTimeSeconds>
Expand Down Expand Up @@ -49489,6 +49494,11 @@
</Extensions>
</Trackpoint>
</Track>
<Extensions>
<LX xmlns="http://www.garmin.com/xmlschemas/ActivityExtension/v2">
<AvgSpeed>4.90671</AvgSpeed>
</LX>
</Extensions>
</Lap>
<Lap StartTime="2014-07-13T08:21:20+10:00">
<TotalTimeSeconds>227.5</TotalTimeSeconds>
Expand Down Expand Up @@ -52910,6 +52920,11 @@
</Extensions>
</Trackpoint>
</Track>
<Extensions>
<LX xmlns="http://www.garmin.com/xmlschemas/ActivityExtension/v2">
<AvgSpeed>8.38207</AvgSpeed>
</LX>
</Extensions>
</Lap>
<Lap StartTime="2014-07-13T08:25:07+10:00">
<TotalTimeSeconds>1561.62</TotalTimeSeconds>
Expand Down Expand Up @@ -76356,6 +76371,11 @@
</Extensions>
</Trackpoint>
</Track>
<Extensions>
<LX xmlns="http://www.garmin.com/xmlschemas/ActivityExtension/v2">
<AvgSpeed>5.982</AvgSpeed>
</LX>
</Extensions>
</Lap>
<Lap StartTime="2014-07-13T08:51:09+10:00">
<TotalTimeSeconds>153.5</TotalTimeSeconds>
Expand Down Expand Up @@ -78667,6 +78687,11 @@
</Extensions>
</Trackpoint>
</Track>
<Extensions>
<LX xmlns="http://www.garmin.com/xmlschemas/ActivityExtension/v2">
<AvgSpeed>9.00117</AvgSpeed>
</LX>
</Extensions>
</Lap>
</Activity>
</Activities>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?>
<TrainingCenterDatabase xsi:schemaLocation="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2 http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2" xmlns:ax2="http://www.garmin.com/xmlschemas/ActivityExtension/v2">
<TrainingCenterDatabase xmlns="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2" xsi:schemaLocation="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2 http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd" xmlns:ax2="http://www.garmin.com/xmlschemas/ActivityExtension/v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Activities>
<Activity Sport="Other">
<Id>2014-07-18T07:48:56+10:00</Id>
Expand Down Expand Up @@ -58311,6 +58311,11 @@
</Extensions>
</Trackpoint>
</Track>
<Extensions>
<LX xmlns="http://www.garmin.com/xmlschemas/ActivityExtension/v2">
<AvgSpeed>4.21967</AvgSpeed>
</LX>
</Extensions>
</Lap>
</Activity>
</Activities>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?>
<TrainingCenterDatabase xsi:schemaLocation="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2 http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2" xmlns:ax2="http://www.garmin.com/xmlschemas/ActivityExtension/v2">
<TrainingCenterDatabase xmlns="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2" xsi:schemaLocation="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2 http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd" xmlns:ax2="http://www.garmin.com/xmlschemas/ActivityExtension/v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Activities>
<Activity Sport="Other">
<Id>2014-07-18T07:48:56+10:00</Id>
Expand Down Expand Up @@ -58311,6 +58311,11 @@
</Extensions>
</Trackpoint>
</Track>
<Extensions>
<LX xmlns="http://www.garmin.com/xmlschemas/ActivityExtension/v2">
<AvgSpeed>4.21967</AvgSpeed>
</LX>
</Extensions>
</Lap>
</Activity>
</Activities>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?>
<TrainingCenterDatabase xsi:schemaLocation="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2 http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2" xmlns:ax2="http://www.garmin.com/xmlschemas/ActivityExtension/v2">
<TrainingCenterDatabase xmlns="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2" xsi:schemaLocation="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2 http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd" xmlns:ax2="http://www.garmin.com/xmlschemas/ActivityExtension/v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Activities>
<Activity Sport="Running">
<Id>2014-08-07T17:25:01+10:00</Id>
Expand Down Expand Up @@ -4559,6 +4559,13 @@
</Extensions>
</Trackpoint>
</Track>
<Extensions>
<LX xmlns="http://www.garmin.com/xmlschemas/ActivityExtension/v2">
<AvgSpeed>10.0226</AvgSpeed>
<AvgRunCadence>80</AvgRunCadence>
<MaxRunCadence>84</MaxRunCadence>
</LX>
</Extensions>
</Lap>
<Lap StartTime="2014-08-07T17:29:00+10:00">
<TotalTimeSeconds>242</TotalTimeSeconds>
Expand Down Expand Up @@ -9174,6 +9181,13 @@
</Extensions>
</Trackpoint>
</Track>
<Extensions>
<LX xmlns="http://www.garmin.com/xmlschemas/ActivityExtension/v2">
<AvgSpeed>9.84793</AvgSpeed>
<AvgRunCadence>83</AvgRunCadence>
<MaxRunCadence>85</MaxRunCadence>
</LX>
</Extensions>
</Lap>
<Lap StartTime="2014-08-07T17:33:02+10:00">
<TotalTimeSeconds>237.5</TotalTimeSeconds>
Expand Down Expand Up @@ -13713,6 +13727,13 @@
</Extensions>
</Trackpoint>
</Track>
<Extensions>
<LX xmlns="http://www.garmin.com/xmlschemas/ActivityExtension/v2">
<AvgSpeed>10.083</AvgSpeed>
<AvgRunCadence>83</AvgRunCadence>
<MaxRunCadence>86</MaxRunCadence>
</LX>
</Extensions>
</Lap>
<Lap StartTime="2014-08-07T17:37:00+10:00">
<TotalTimeSeconds>175</TotalTimeSeconds>
Expand Down Expand Up @@ -17055,6 +17076,13 @@
</Extensions>
</Trackpoint>
</Track>
<Extensions>
<LX xmlns="http://www.garmin.com/xmlschemas/ActivityExtension/v2">
<AvgSpeed>13.6203</AvgSpeed>
<AvgRunCadence>85</AvgRunCadence>
<MaxRunCadence>89</MaxRunCadence>
</LX>
</Extensions>
</Lap>
<Lap StartTime="2014-08-07T17:39:55+10:00">
<TotalTimeSeconds>264.5</TotalTimeSeconds>
Expand Down Expand Up @@ -22088,6 +22116,13 @@
</Extensions>
</Trackpoint>
</Track>
<Extensions>
<LX xmlns="http://www.garmin.com/xmlschemas/ActivityExtension/v2">
<AvgSpeed>9.09187</AvgSpeed>
<AvgRunCadence>81</AvgRunCadence>
<MaxRunCadence>84</MaxRunCadence>
</LX>
</Extensions>
</Lap>
<Lap StartTime="2014-08-07T17:44:19+10:00">
<TotalTimeSeconds>257.5</TotalTimeSeconds>
Expand Down Expand Up @@ -27007,6 +27042,13 @@
</Extensions>
</Trackpoint>
</Track>
<Extensions>
<LX xmlns="http://www.garmin.com/xmlschemas/ActivityExtension/v2">
<AvgSpeed>9.216</AvgSpeed>
<AvgRunCadence>82</AvgRunCadence>
<MaxRunCadence>85</MaxRunCadence>
</LX>
</Extensions>
</Lap>
<Lap StartTime="2014-08-07T17:48:37+10:00">
<TotalTimeSeconds>186</TotalTimeSeconds>
Expand Down Expand Up @@ -30558,6 +30600,13 @@
</Extensions>
</Trackpoint>
</Track>
<Extensions>
<LX xmlns="http://www.garmin.com/xmlschemas/ActivityExtension/v2">
<AvgSpeed>13.0374</AvgSpeed>
<AvgRunCadence>84</AvgRunCadence>
<MaxRunCadence>86</MaxRunCadence>
</LX>
</Extensions>
</Lap>
<Lap StartTime="2014-08-07T17:51:43+10:00">
<TotalTimeSeconds>269.5</TotalTimeSeconds>
Expand Down Expand Up @@ -35686,6 +35735,13 @@
</Extensions>
</Trackpoint>
</Track>
<Extensions>
<LX xmlns="http://www.garmin.com/xmlschemas/ActivityExtension/v2">
<AvgSpeed>8.95792</AvgSpeed>
<AvgRunCadence>81</AvgRunCadence>
<MaxRunCadence>83</MaxRunCadence>
</LX>
</Extensions>
</Lap>
<Lap StartTime="2014-08-07T17:56:12+10:00">
<TotalTimeSeconds>234.5</TotalTimeSeconds>
Expand Down Expand Up @@ -40168,6 +40224,13 @@
</Extensions>
</Trackpoint>
</Track>
<Extensions>
<LX xmlns="http://www.garmin.com/xmlschemas/ActivityExtension/v2">
<AvgSpeed>10.3778</AvgSpeed>
<AvgRunCadence>81</AvgRunCadence>
<MaxRunCadence>84</MaxRunCadence>
</LX>
</Extensions>
</Lap>
<Lap StartTime="2014-08-07T18:00:07+10:00">
<TotalTimeSeconds>25.125</TotalTimeSeconds>
Expand Down Expand Up @@ -40652,6 +40715,9 @@
</Extensions>
</Trackpoint>
</Track>
<Extensions>
<LX xmlns="http://www.garmin.com/xmlschemas/ActivityExtension/v2"/>
</Extensions>
</Lap>
</Activity>
</Activities>
Expand Down
Loading

0 comments on commit d708d25

Please sign in to comment.