From cd2e02fb69406a8f57fcdeebca7cecb7c3dad22d Mon Sep 17 00:00:00 2001 From: Mark Liversedge Date: Wed, 26 Oct 2011 22:18:37 +0100 Subject: [PATCH] Tweak Virtual Power If cadence is zero when calculating power then we should set power to zero. Speed will not be zero when freewheeling and therefore the calculation will overstate power output. Secondly, the NullController (for testing) did not call the realtimeController post process function. It does now so we can test the virtual power calculation. --- src/NullController.cpp | 9 +++++---- src/RealtimeController.cpp | 3 +++ 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/NullController.cpp b/src/NullController.cpp index ff3d59f8e..3c7280ffd 100644 --- a/src/NullController.cpp +++ b/src/NullController.cpp @@ -26,8 +26,8 @@ #include NullController::NullController(TrainTool *parent, - DeviceConfiguration *) - : RealtimeController(parent), parent(parent), load(100) + DeviceConfiguration *dc) + : RealtimeController(parent, dc), parent(parent), load(100) { } @@ -49,11 +49,12 @@ int NullController::restart() { void NullController::getRealtimeData(RealtimeData &rtData) { rtData.setName((char *)"Null"); - rtData.setWatts(load + ((rand()%25)-15)); + rtData.setWatts(load + ((rand()%25)-15)); // for testing virtual power rtData.setLoad(load); - rtData.setSpeed(45 + ((rand()%5)-2)); + rtData.setSpeed(25 + ((rand()%5)-2)); rtData.setCadence(85 + ((rand()%10)-5)); rtData.setHr(145 + ((rand()%3)-2)); + processRealtimeData(rtData); // for testing virtual power etc } void NullController::pushRealtimeData(RealtimeData &) { diff --git a/src/RealtimeController.cpp b/src/RealtimeController.cpp index f95127ee7..a6274e5a9 100644 --- a/src/RealtimeController.cpp +++ b/src/RealtimeController.cpp @@ -102,9 +102,12 @@ RealtimeController::processRealtimeData(RealtimeData &rtData) // for the data / analysis see: http://wattagetraining.com/forum/viewtopic.php?f=2&t=335 rtData.setWatts((0.21*pow(V,3))+(4.25*V)); } + break; default : // unknown - do nothing break; } + // if calculating but no cadence then power must be set to zero + if (dc->postProcess && !rtData.getCadence()) rtData.setWatts(0); } // for future devices, we may need to setup algorithmic tables etc