Skip to content

Commit

Permalink
Implement Gamin Activity Extension TPX element (#31)
Browse files Browse the repository at this point in the history
This is one of two extension elements supported by the Gamin Activity
Extension (http://www8.garmin.com/xmlschemas/ActivityExtensionv2.xsd),
the other being the LX element, which will be added shortly.
  • Loading branch information
pcolby committed Sep 10, 2014
1 parent 312fa52 commit 16d543f
Show file tree
Hide file tree
Showing 13 changed files with 80,514 additions and 19 deletions.
50 changes: 47 additions & 3 deletions src/polar/v2/trainingsession.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -61,12 +61,24 @@ int TrainingSession::exerciseCount() const
return (isValid()) ? parsedExercises.count() : -1;
}

#define TCX_RUNNING QLatin1String("Running")
#define TCX_BIKING QLatin1String("Biking")
#define TCX_OTHER QLatin1String("Other")

QString TrainingSession::getTcxCadenceSensor(const quint64 &polarSportValue)
{
const QString tcxSport = getTcxSport(polarSportValue);
if (tcxSport == TCX_BIKING) {
return QLatin1String("Bike");
} else if (tcxSport == TCX_RUNNING) {
return QLatin1String("Footpod");
}
return QString();
}

/// @see https://github.com/pcolby/bipolar/wiki/Polar-Sport-Types
QString TrainingSession::getTcxSport(const quint64 &polarSportValue)
{
#define TCX_RUNNING QLatin1String("Running")
#define TCX_BIKING QLatin1String("Biking")
#define TCX_OTHER QLatin1String("Other")
static QMap<quint64, QString> map;
if (map.isEmpty()) {
map.insert( 1, TCX_RUNNING); // Running
Expand Down Expand Up @@ -1707,6 +1719,10 @@ QDomDocument TrainingSession::toTCX(const QString &buildTime) const
tcx.setAttribute(QLatin1String("xsi:schemaLocation"),
QLatin1String("http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2 "
"http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd"));
if (tcxOptions.testFlag(GarminActivityExtension)) {
tcx.setAttribute(QLatin1String("xmlns:ax2"),
QLatin1String("http://www.garmin.com/xmlschemas/ActivityExtension/v2"));
}
doc.appendChild(tcx);

QDomElement activities = doc.createElement(QLatin1String("Activities"));
Expand Down Expand Up @@ -1901,6 +1917,34 @@ QDomDocument TrainingSession::toTCX(const QString &buildTime) const
.appendChild(doc.createTextNode(cadence.at(index).toString()));
}

if (tcxOptions.testFlag(GarminActivityExtension)) {
QDomElement tpx = doc.createElement(QLatin1String("TPX"));
tpx.setAttribute(QLatin1String("xmlns"),
QLatin1String("http://www.garmin.com/xmlschemas/ActivityExtension/v2"));
trackPoint.appendChild(doc.createElement(QLatin1String("Extensions")))
.appendChild(tpx);

if ((index < cadence.length()) && (cadence.at(index).toInt() >= 0) &&
(!sensorOffline(samples.value(QLatin1String("speed-offline")).toList(), index))) {
tpx.appendChild(doc.createElement(QLatin1String("Speed")))
.appendChild(doc.createTextNode(speed.at(index).toString()));
}

if ((index < cadence.length()) && (cadence.at(index).toInt() >= 0) &&
(!sensorOffline(samples.value(QLatin1String("cadence-offline")).toList(), index))) {
const QString sensor = getTcxCadenceSensor(
first(firstMap(create.value(QLatin1String("sport")))
.value(QLatin1String("value"))).toULongLong());
if (!sensor.isEmpty()) {
tpx.setAttribute(QLatin1String("CadenceSensor"), sensor);
}
if (sensor == QLatin1String("Footpod")) {
tpx.appendChild(doc.createElement(QLatin1String("RunCadence")))
.appendChild(doc.createTextNode(cadence.at(index).toString()));
}
}
}

if (trackPoint.hasChildNodes()) {
#if (QT_VERSION >= QT_VERSION_CHECK(5, 2, 0))
QDateTime trackPointTime = startTime.addMSecs(index * recordInterval);
Expand Down
1 change: 1 addition & 0 deletions src/polar/v2/trainingsession.h
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,7 @@ class TrainingSession : public QObject {
HrmOptions hrmOptions;
TcxOptions tcxOptions;

static QString getTcxCadenceSensor(const quint64 &polarSportValue);
static QString getTcxSport(const quint64 &polarSportValue);
QString getOutputBaseFileName(const QString &format);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?>
<TrainingCenterDatabase xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2" xsi:schemaLocation="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2 http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd">
<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">
<Author xsi:type="Application_t">
<Name>Bipolar</Name>
<Build>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?>
<TrainingCenterDatabase xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2" xsi:schemaLocation="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2 http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd">
<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">
<Author xsi:type="Application_t">
<Name>Bipolar</Name>
<Build>
Expand Down
Loading

0 comments on commit 16d543f

Please sign in to comment.