From 0ba75f3f19f7e1192c3683cdf459aa56a9bc43df Mon Sep 17 00:00:00 2001 From: Andrew Bryson Date: Thu, 5 Jan 2012 19:08:19 +0000 Subject: [PATCH] Lap Averages in Real Time mode Add lap average for hr watts cadence speed. --- src/DialWindow.cpp | 28 +++++++++++++++++++++++++++- src/DialWindow.h | 2 ++ src/RealtimeData.cpp | 16 ++++++++++++++++ src/RealtimeData.h | 1 + 4 files changed, 46 insertions(+), 1 deletion(-) diff --git a/src/DialWindow.cpp b/src/DialWindow.cpp index cf73e3dc2..be1d6e250 100644 --- a/src/DialWindow.cpp +++ b/src/DialWindow.cpp @@ -20,7 +20,7 @@ #include "DialWindow.h" DialWindow::DialWindow(MainWindow *mainWindow) : - GcWindow(mainWindow), mainWindow(mainWindow), average(1) + GcWindow(mainWindow), mainWindow(mainWindow), average(1), isNewLap(false) { rolling.resize(150); // enough for 30 seconds at 5hz @@ -85,6 +85,7 @@ DialWindow::DialWindow(MainWindow *mainWindow) : connect(mainWindow, SIGNAL(configChanged()), this, SLOT(seriesChanged())); connect(mainWindow, SIGNAL(stop()), this, SLOT(stop())); connect(mainWindow, SIGNAL(start()), this, SLOT(start())); + connect(mainWindow, SIGNAL(newLap()), this, SLOT(onNewLap())); // setup colors seriesChanged(); @@ -158,6 +159,17 @@ DialWindow::telemetryUpdate(const RealtimeData &rtData) } + if( isNewLap && + ( series == RealtimeData::AvgCadenceLap || + series == RealtimeData::AvgHeartRateLap || + series == RealtimeData::AvgSpeedLap || + series == RealtimeData::AvgWattsLap ) ) + { + count = 0; + sum = 0.0; + isNewLap = false; + } + switch (series) { case RealtimeData::Time: @@ -193,6 +205,7 @@ DialWindow::telemetryUpdate(const RealtimeData &rtData) break; case RealtimeData::AvgWatts: + case RealtimeData::AvgWattsLap: sum += rtData.value(RealtimeData::Watts); count++; value = sum / count; @@ -200,6 +213,7 @@ DialWindow::telemetryUpdate(const RealtimeData &rtData) break; case RealtimeData::AvgSpeed: + case RealtimeData::AvgSpeedLap: sum += rtData.value(RealtimeData::Speed); count++; value = sum / count; @@ -208,6 +222,7 @@ DialWindow::telemetryUpdate(const RealtimeData &rtData) break; case RealtimeData::AvgCadence: + case RealtimeData::AvgCadenceLap: sum += rtData.value(RealtimeData::Cadence); count++; value = sum / count; @@ -215,6 +230,7 @@ DialWindow::telemetryUpdate(const RealtimeData &rtData) break; case RealtimeData::AvgHeartRate: + case RealtimeData::AvgHeartRateLap: sum += rtData.value(RealtimeData::HeartRate); count++; value = sum / count; @@ -469,22 +485,26 @@ void DialWindow::seriesChanged() case RealtimeData::Joules: case RealtimeData::Watts: case RealtimeData::AvgWatts: + case RealtimeData::AvgWattsLap: foreground = GColor(CPOWER); break; case RealtimeData::Speed: case RealtimeData::VirtualSpeed: case RealtimeData::AvgSpeed: + case RealtimeData::AvgSpeedLap: foreground = GColor(CSPEED); break; case RealtimeData::Cadence: case RealtimeData::AvgCadence: + case RealtimeData::AvgCadenceLap: foreground = GColor(CCADENCE); break; case RealtimeData::HeartRate: case RealtimeData::AvgHeartRate: + case RealtimeData::AvgHeartRateLap: foreground = GColor(CHEARTRATE); break; @@ -526,3 +546,9 @@ DialWindow::setAverageFromSlider() { setAverageFromText(QString("%1").arg(averageSlider->value())); } } + +void +DialWindow::onNewLap() +{ + isNewLap = true; +} diff --git a/src/DialWindow.h b/src/DialWindow.h index 68636668e..4e0029fae 100644 --- a/src/DialWindow.h +++ b/src/DialWindow.h @@ -80,6 +80,7 @@ class DialWindow : public GcWindow void start(); void stop(); void pause(); + void onNewLap(); protected: @@ -106,6 +107,7 @@ class DialWindow : public GcWindow int average; int count; double sum; + bool isNewLap; // for keeping track of rolling averages (max 30s at 5hz) // used by NP and XPower diff --git a/src/RealtimeData.cpp b/src/RealtimeData.cpp index 92ade6ef7..a18ef3c9f 100644 --- a/src/RealtimeData.cpp +++ b/src/RealtimeData.cpp @@ -211,6 +211,10 @@ const QList &RealtimeData::listDataSeries() seriesList << AvgSpeed; seriesList << AvgCadence; seriesList << AvgHeartRate; + seriesList << AvgWattsLap; + seriesList << AvgSpeedLap; + seriesList << AvgCadenceLap; + seriesList << AvgHeartRateLap; seriesList << VirtualSpeed; seriesList << AltWatts; seriesList << LRBalance; @@ -298,6 +302,18 @@ QString RealtimeData::seriesName(DataSeries series) case AvgCadence: return tr("Average Cadence"); break; + case AvgWattsLap: return tr("Lap Power"); + break; + + case AvgSpeedLap: return tr("Lap Speed"); + break; + + case AvgHeartRateLap: return tr("Lap Heartrate"); + break; + + case AvgCadenceLap: return tr("Lap Cadence"); + break; + case LRBalance: return tr("Left/Right Balance"); break; } diff --git a/src/RealtimeData.h b/src/RealtimeData.h index 75c83f433..fdfd3d411 100644 --- a/src/RealtimeData.h +++ b/src/RealtimeData.h @@ -38,6 +38,7 @@ public: XPower, BikeScore, RI, Joules, SkibaVI, NP, TSS, IF, VI, AvgWatts, AvgSpeed, AvgCadence, AvgHeartRate, + AvgWattsLap, AvgSpeedLap, AvgCadenceLap, AvgHeartRateLap, VirtualSpeed, AltWatts, LRBalance }; typedef enum dataseries DataSeries;