summaryrefslogtreecommitdiffstats
path: root/hvac/hvac.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'hvac/hvac.cpp')
-rw-r--r--hvac/hvac.cpp83
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;
}