mirror of
https://github.com/GoldenCheetah/GoldenCheetah.git
synced 2026-02-14 00:28:42 +00:00
Merge pull request #1683 from erikboto/monark_power_control_support
Monark: Add support for controlling power on LCx models
This commit is contained in:
@@ -26,10 +26,10 @@ Monark::Monark(QObject *parent, QString devname) : QObject(parent),
|
||||
m_power(0),
|
||||
m_cadence(0)
|
||||
{
|
||||
m_lt2.setSerialPort(devname);
|
||||
connect(&m_lt2, SIGNAL(power(quint32)), this, SLOT(newPower(quint32)), Qt::QueuedConnection);
|
||||
connect(&m_lt2, SIGNAL(cadence(quint32)), this, SLOT(newCadence(quint32)), Qt::QueuedConnection);
|
||||
connect(&m_lt2, SIGNAL(pulse(quint32)), this, SLOT(newHeartRate(quint32)), Qt::QueuedConnection);
|
||||
m_monarkConnection.setSerialPort(devname);
|
||||
connect(&m_monarkConnection, SIGNAL(power(quint32)), this, SLOT(newPower(quint32)), Qt::QueuedConnection);
|
||||
connect(&m_monarkConnection, SIGNAL(cadence(quint32)), this, SLOT(newCadence(quint32)), Qt::QueuedConnection);
|
||||
connect(&m_monarkConnection, SIGNAL(pulse(quint32)), this, SLOT(newHeartRate(quint32)), Qt::QueuedConnection);
|
||||
}
|
||||
|
||||
Monark::~Monark()
|
||||
@@ -38,7 +38,7 @@ Monark::~Monark()
|
||||
|
||||
int Monark::start()
|
||||
{
|
||||
m_lt2.start();
|
||||
m_monarkConnection.start();
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -80,7 +80,7 @@ bool Monark::discover(QString portName)
|
||||
|
||||
if (sp.open(QSerialPort::ReadWrite))
|
||||
{
|
||||
m_lt2.configurePort(&sp);
|
||||
m_monarkConnection.configurePort(&sp);
|
||||
|
||||
// Discard any existing data
|
||||
QByteArray data = sp.readAll();
|
||||
@@ -114,3 +114,9 @@ bool Monark::discover(QString portName)
|
||||
|
||||
return found;
|
||||
}
|
||||
|
||||
|
||||
void Monark::setLoad(double load)
|
||||
{
|
||||
m_monarkConnection.setLoad((unsigned int)load);
|
||||
}
|
||||
|
||||
@@ -45,14 +45,14 @@ public:
|
||||
quint32 cadence() {return m_cadence;}
|
||||
bool discover(QString portName);
|
||||
|
||||
void setLoad(double load);
|
||||
|
||||
private:
|
||||
MonarkConnection m_lt2;
|
||||
MonarkConnection m_monarkConnection;
|
||||
quint32 m_heartRate;
|
||||
quint32 m_power;
|
||||
quint32 m_cadence;
|
||||
|
||||
|
||||
private slots:
|
||||
void newHeartRate(quint32);
|
||||
void newPower(quint32);
|
||||
|
||||
@@ -25,7 +25,10 @@ MonarkConnection::MonarkConnection() :
|
||||
m_serial(0),
|
||||
m_pollInterval(1000),
|
||||
m_timer(0),
|
||||
m_canControlPower(false)
|
||||
m_canControlPower(false),
|
||||
m_load(0),
|
||||
m_loadToWrite(0),
|
||||
m_shouldWriteLoad(false)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -108,6 +111,7 @@ void MonarkConnection::run()
|
||||
if (m_id.toLower().startsWith("lc"))
|
||||
{
|
||||
m_canControlPower = true;
|
||||
setLoad(100);
|
||||
}
|
||||
|
||||
// Set up polling
|
||||
@@ -130,6 +134,15 @@ void MonarkConnection::requestAll()
|
||||
requestPulse();
|
||||
requestCadence();
|
||||
|
||||
if ((m_loadToWrite != m_load) && m_canControlPower)
|
||||
{
|
||||
QString cmd = QString("power %1\r").arg(m_loadToWrite);
|
||||
m_serial->write(cmd.toStdString().c_str());
|
||||
if (m_serial->waitForBytesWritten(100))
|
||||
m_load = m_loadToWrite;
|
||||
QByteArray data = m_serial->readAll();
|
||||
}
|
||||
|
||||
m_mutex.unlock();
|
||||
}
|
||||
|
||||
@@ -160,6 +173,12 @@ void MonarkConnection::requestCadence()
|
||||
emit cadence(c);
|
||||
}
|
||||
|
||||
void MonarkConnection::setLoad(unsigned int load)
|
||||
{
|
||||
m_loadToWrite = load;
|
||||
m_shouldWriteLoad = true;
|
||||
}
|
||||
|
||||
/*
|
||||
* Configures a serialport for communicating with a Monark bike.
|
||||
*/
|
||||
|
||||
@@ -40,6 +40,7 @@ public slots:
|
||||
void requestPower();
|
||||
void requestPulse();
|
||||
void requestCadence();
|
||||
void setLoad(unsigned int load);
|
||||
|
||||
private:
|
||||
QString m_serialPortName;
|
||||
@@ -51,6 +52,9 @@ private:
|
||||
QByteArray readAnswer(int timeoutMs = -1);
|
||||
QMutex m_mutex;
|
||||
bool m_canControlPower;
|
||||
unsigned int m_load;
|
||||
unsigned int m_loadToWrite;
|
||||
bool m_shouldWriteLoad;
|
||||
|
||||
signals:
|
||||
void pulse(quint32);
|
||||
|
||||
@@ -71,7 +71,7 @@ MonarkController::discover(QString name)
|
||||
|
||||
bool MonarkController::doesPush() { return false; }
|
||||
bool MonarkController::doesPull() { return true; }
|
||||
bool MonarkController::doesLoad() { return false; }
|
||||
bool MonarkController::doesLoad() { return true; }
|
||||
|
||||
/*
|
||||
* gets called from the GUI to get updated telemetry.
|
||||
@@ -89,4 +89,7 @@ MonarkController::getRealtimeData(RealtimeData &rtData)
|
||||
|
||||
void MonarkController::pushRealtimeData(RealtimeData &) { } // update realtime data with current values
|
||||
|
||||
|
||||
void MonarkController::setLoad(double load)
|
||||
{
|
||||
m_monark->setLoad(load);
|
||||
}
|
||||
|
||||
@@ -45,6 +45,7 @@ public:
|
||||
void getRealtimeData(RealtimeData &rtData);
|
||||
void pushRealtimeData(RealtimeData &rtData);
|
||||
|
||||
void setLoad(double);
|
||||
void setMode(int) { return ; }
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user