Skip to content

Commit

Permalink
Monark: Add possibility to fake kp-mode
Browse files Browse the repository at this point in the history
  • Loading branch information
Erik Botö committed Feb 27, 2017
1 parent fb71cd8 commit 323562c
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 4 deletions.
30 changes: 26 additions & 4 deletions src/Train/MonarkConnection.cpp
Expand Up @@ -32,6 +32,7 @@ MonarkConnection::MonarkConnection() :
m_shouldWriteLoad(false),
m_shouldWriteKp(false),
m_type(MONARK_UNKNOWN),
m_mode(MONARK_MODE_WATT),
m_power(0),
m_cadence(0),
m_pulse(0)
Expand Down Expand Up @@ -141,7 +142,7 @@ void MonarkConnection::requestAll()
requestPulse();
requestCadence();

if ((m_loadToWrite != m_load) && canDoLoad())
if ((m_loadToWrite != m_load) && m_mode == MONARK_MODE_WATT && canDoLoad())
{
QString cmd = QString("power %1\r").arg(m_loadToWrite);
m_serial->write(cmd.toStdString().c_str());
Expand All @@ -154,7 +155,7 @@ void MonarkConnection::requestAll()
QByteArray data = m_serial->readAll();
}

if ((m_kpToWrite != m_kp) && canDoKp())
if ((m_kpToWrite != m_kp) && m_mode == MONARK_MODE_KP && canDoKp())
{
QString cmd = QString("kp %1\r").arg(QString::number(m_kpToWrite, 'f', 1 ));
m_serial->write(cmd.toStdString().c_str());
Expand All @@ -167,6 +168,22 @@ void MonarkConnection::requestAll()
QByteArray data = m_serial->readAll();
}

if ((m_mode == MONARK_MODE_KP) && canDoLoad() && !canDoKp())
{
// Calculate what wattage to request to simulate selected kp
// watt = kp * cadence * 0.98
unsigned int load = (m_kpToWrite * m_cadence) * 0.98;

QString cmd = QString("power %1\r").arg(load);
m_serial->write(cmd.toStdString().c_str());
if (!m_serial->waitForBytesWritten(500))
{
// failure to write to device, bail out
this->exit(-1);
}
QByteArray data = m_serial->readAll();
}

m_mutex.unlock();
}

Expand Down Expand Up @@ -273,7 +290,7 @@ void MonarkConnection::identifyModel()
void MonarkConnection::setLoad(unsigned int load)
{
m_loadToWrite = load;
m_shouldWriteLoad = true;
m_mode = MONARK_MODE_WATT;
}

void MonarkConnection::setKp(double kp)
Expand All @@ -285,7 +302,7 @@ void MonarkConnection::setKp(double kp)
kp = 7;

m_kpToWrite = kp;
m_shouldWriteKp = true;
m_mode = MONARK_MODE_KP;
}

/*
Expand Down Expand Up @@ -415,3 +432,8 @@ quint32 MonarkConnection::pulse()
QMutexLocker mlock(&m_readMutex);
return m_pulse;
}

double MonarkConnection::kp()
{
return m_kp;
}
2 changes: 2 additions & 0 deletions src/Train/MonarkConnection.h
Expand Up @@ -38,6 +38,7 @@ class MonarkConnection : public QThread
quint32 power();
quint32 cadence();
quint32 pulse();
double kp();

public slots:
void requestAll();
Expand Down Expand Up @@ -66,6 +67,7 @@ public slots:
bool m_shouldWriteLoad;
bool m_shouldWriteKp;
enum MonarkType { MONARK_UNKNOWN, MONARK_LT2, MONARK_LC, MONARK_LC_NOVO, MONARK_839E } m_type;
enum MonarkMode { MONARK_MODE_WATT, MONARK_MODE_KP } m_mode;
bool canDoLoad();
bool canDoKp();
quint32 m_power;
Expand Down
1 change: 1 addition & 0 deletions src/Train/MonarkController.cpp
Expand Up @@ -98,6 +98,7 @@ MonarkController::getRealtimeData(RealtimeData &rtData)
rtData.setWatts(m_monark->power());
rtData.setHr(m_monark->pulse());
rtData.setCadence(m_monark->cadence());
rtData.setSlope(m_monark->kp());
}

void MonarkController::pushRealtimeData(RealtimeData &) { } // update realtime data with current values
Expand Down

0 comments on commit 323562c

Please sign in to comment.