diff options
author | Scott Murray <scott.murray@konsulko.com> | 2022-06-16 00:43:21 -0400 |
---|---|---|
committer | Scott Murray <scott.murray@konsulko.com> | 2022-07-04 21:23:25 +0000 |
commit | b2cb90d9f5e3e87e963e42f4320edcfad8391f50 (patch) | |
tree | 1b34e6c1cfbaac24e22a56f06daac59ee8327ca6 /hvac/hvac.cpp | |
parent | 607f2b680891c25b51917d5b7f20bc3a3ffc6a65 (diff) |
Reimplement HVAC API with VIS signals
Reimplement the HVAC interface with use of VIS signals. There is
some impedance mismatching done between VIS signal notifications
and the API Qt signals to avoid changing the clients signficantly
for now. If the Qt demo lifetime is extended, this may be revisited
to either switch to directly using the VehicleSignals interface or
doing a more granular mapping that works better with the VSS schema
and VIS.
Bug-AGL: SPEC-4409
Signed-off-by: Scott Murray <scott.murray@konsulko.com>
Change-Id: I6f1763836945600d84d6f70faea40eaa7d45ce27
(cherry picked from commit 01a723bf51a286b4a6b984a6115c2835d9e99b73)
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; } |