diff --git a/src/Pages.cpp b/src/Pages.cpp index 195df667e..3b128ab20 100644 --- a/src/Pages.cpp +++ b/src/Pages.cpp @@ -368,6 +368,7 @@ DevicePage::DevicePage(QWidget *parent) : QWidget(parent) virtualPower->addItem("Power - Kurt Kinetic Cyclone"); virtualPower->addItem("Power - Kurt Kinetic Road Machine"); virtualPower->addItem("Power - Cyclops Fluid 2"); + virtualPower->addItem("Power - BT Advanced Training System"); virtualPower->setCurrentIndex(0); // THIS CODE IS DISABLED FOR THIS RELEASE XXX diff --git a/src/QuarqdClient.cpp b/src/QuarqdClient.cpp index ab353b253..8062434bd 100644 --- a/src/QuarqdClient.cpp +++ b/src/QuarqdClient.cpp @@ -160,6 +160,7 @@ QuarqdClient::parseElement(QString &strBuf) // updates QuarqdClient::telemetry if (value > 0) { // TODO: let wheel size be a configurable, default now to 2101 mm telemetry.setSpeed((value*2101/1000*60)/1000); // meter/minute -> meter/hour -> km/hour + telemetry.setWheelRpm(value); lastReadSpeed = elapsedTime.elapsed(); } telemetry.setTime(getTimeStamp(str)); diff --git a/src/RealtimeController.cpp b/src/RealtimeController.cpp index 4ba47299a..ca0796eff 100644 --- a/src/RealtimeController.cpp +++ b/src/RealtimeController.cpp @@ -80,6 +80,19 @@ RealtimeController::processRealtimeData(RealtimeData &rtData) // http://thebikegeek.blogspot.com/2009/12/while-we-wait-for-better-and-better.html rtData.setWatts((0.0115*(mph*mph*mph)) - ((0.0137)*(mph*mph)) + ((8.9788)*(mph))); } + case 4 : // BT-ATS - BT Advanced Training System + { + // v is expressed in revs/second + double v = rtData.getWheelRpm()/60.0; + // using the algorithm from Steven Sansonetti of BT: + // This is a 3rd order polynomial, where P = av3 + bv2 + cv + d + // where: + double a = 2.90390167E-01; // ( 0.290390167) + double b = - 4.61311774E-02; // ( -0.0461311774) + double c = 5.92125507E-01; // (0.592125507) + double d = 0.0; + rtData.setWatts(a*v*v*v + b*v*v +c*v + d); + } default : // unknown - do nothing break; } @@ -101,6 +114,8 @@ RealtimeController::processSetup() break; case 3 : // TODO Cyclops Fluid 2 - use an algorithm break; + case 4 : // TODO BT-ATS - BT Advanced Training System - use an algorithm + break; default : // unknown - do nothing break; } diff --git a/src/RealtimeData.cpp b/src/RealtimeData.cpp index f4a344f0c..db48ed6d7 100644 --- a/src/RealtimeData.cpp +++ b/src/RealtimeData.cpp @@ -21,7 +21,7 @@ RealtimeData::RealtimeData() { - watts = hr = speed = cadence = load = 0; + watts = hr = speed = wheelRpm = cadence = load = 0; time = 0; } @@ -41,6 +41,10 @@ void RealtimeData::setSpeed(double speed) { this->speed = speed; } +void RealtimeData::setWheelRpm(double wheelRpm) +{ + this->wheelRpm = wheelRpm; +} void RealtimeData::setCadence(double aCadence) { cadence = aCadence; @@ -66,6 +70,10 @@ double RealtimeData::getSpeed() { return speed; } +double RealtimeData::getWheelRpm() +{ + return wheelRpm; +} double RealtimeData::getCadence() { return cadence; diff --git a/src/RealtimeData.h b/src/RealtimeData.h index e90b97e6e..f064a0013 100644 --- a/src/RealtimeData.h +++ b/src/RealtimeData.h @@ -32,19 +32,20 @@ public: void setHr(double hr); void setTime(long time); void setSpeed(double speed); + void setWheelRpm(double wheelRpm); void setCadence(double aCadence); void setLoad(double load); double getWatts(); double getHr(); long getTime(); double getSpeed(); + double getWheelRpm(); double getCadence(); double getLoad(); private: - double hr, watts, speed, load; unsigned long time; - + double hr, watts, speed, wheelRpm, load; double cadence; // in rpm };