diff options
Diffstat (limited to 'hvac/hvac.cpp')
-rw-r--r-- | hvac/hvac.cpp | 83 |
1 files changed, 68 insertions, 15 deletions
diff --git a/hvac/hvac.cpp b/hvac/hvac.cpp index bb5fc10..246fa63 100644 --- a/hvac/hvac.cpp +++ b/hvac/hvac.cpp @@ -15,40 +15,93 @@ */ #include <QDebug> -#include <QMetaEnum> -#include <QMimeDatabase> -#include <QtQml/QQmlEngine> #include "hvac.h" +#include "vehiclesignals.h" // TODO: don't duplicate defaults from HVAC service here -HVAC::HVAC (QObject * parent) : - QObject(parent), - m_fanspeed(0), - m_temp_left_zone(21), - m_temp_right_zone(21) +HVAC::HVAC(VehicleSignals *vs, QObject * parent) : + QObject(parent), + m_vs(vs), + m_connected(false), + m_fanspeed(0), + m_temp_left_zone(21), + m_temp_right_zone(21) { -} + QObject::connect(m_vs, &VehicleSignals::connected, this, &HVAC::onConnected); + QObject::connect(m_vs, &VehicleSignals::authorized, this, &HVAC::onAuthorized); + QObject::connect(m_vs, &VehicleSignals::disconnected, this, &HVAC::onDisconnected); -HVAC::~HVAC() -{ + if (m_vs) + m_vs->connect(); } -void HVAC::control(QString verb, QString field, int value) +HVAC::~HVAC() { + delete m_vs; } void HVAC::set_fanspeed(int speed) { - emit fanSpeedChanged(speed); + if (!(m_vs && m_connected)) + return; + + // Scale incoming 0-255 speed to 0-100 to match VSS signal + double value = (speed % 256) * 100.0 / 255.0; + m_vs->set("Vehicle.Cabin.HVAC.Station.Row1.Left.FanSpeed", QString::number((int) (value + 0.5))); + emit fanSpeedChanged(speed); } void HVAC::set_temp_left_zone(int temp) { - emit leftTemperatureChanged(temp); + if (!(m_vs && m_connected)) + return; + + // Make sure value is within VSS signal range + int value = temp; + if (value > 50) + value = 50; + else if (value < -50) + value = -50; + m_vs->set("Vehicle.Cabin.HVAC.Station.Row1.Left.Temperature", QString::number(value)); + emit leftTemperatureChanged(temp); } void HVAC::set_temp_right_zone(int temp) { - emit rightTemperatureChanged(temp); + if (!(m_vs && m_connected)) + return; + + // Make sure value is within VSS signal range + int value = temp; + if (value > 50) + value = 50; + else if (value < -50) + value = -50; + m_vs->set("Vehicle.Cabin.HVAC.Station.Row1.Right.Temperature", QString::number(value)); + emit rightTemperatureChanged(temp); +} + +void HVAC::onConnected() +{ + if (!m_vs) + return; + + m_vs->authorize(); +} + +void HVAC::onAuthorized() +{ + if (!m_vs) + return; + + // Could subscribe and connect notification signal here to monitor + // external updates... + + m_connected = true; +} + +void HVAC::onDisconnected() +{ + m_connected = false; } |