summaryrefslogtreecommitdiffstats
path: root/hvac/hvac.cpp
diff options
context:
space:
mode:
authorScott Murray <scott.murray@konsulko.com>2022-07-04 22:02:55 +0000
committerGerrit Code Review <gerrit@automotivelinux.org>2022-07-04 22:02:55 +0000
commita2d991a54f77017ced1558d289bcb83d73fe2a35 (patch)
tree5e195241ea9b6ae4198ad72433409dfa6f00064d /hvac/hvac.cpp
parentfc9399e54dfd05a4307f954549ae58afbf57fb5e (diff)
parentb2cb90d9f5e3e87e963e42f4320edcfad8391f50 (diff)
Merge "Reimplement HVAC API with VIS signals"needlefish_13.93.0needlefish/13.93.013.93.0
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;
}