summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorScott Murray <scott.murray@konsulko.com>2022-06-16 00:43:21 -0400
committerScott Murray <scott.murray@konsulko.com>2022-06-16 00:43:21 -0400
commit01a723bf51a286b4a6b984a6115c2835d9e99b73 (patch)
tree7c5280148890756bdc45e442b50a8f32f71ed52e
parent4ce04ff30e753556cf9cb371780f2a873f6fedaa (diff)
Reimplement HVAC API with VIS signalsmarlin
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
-rw-r--r--hvac/CMakeLists.txt2
-rw-r--r--hvac/hvac.cpp83
-rw-r--r--hvac/hvac.h29
3 files changed, 88 insertions, 26 deletions
diff --git a/hvac/CMakeLists.txt b/hvac/CMakeLists.txt
index dd0ceea..ba62be7 100644
--- a/hvac/CMakeLists.txt
+++ b/hvac/CMakeLists.txt
@@ -8,7 +8,7 @@ add_library(qtappfw-hvac SHARED hvac.cpp)
target_include_directories(qtappfw-hvac PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}")
target_include_directories(qtappfw-hvac PUBLIC "${CMAKE_INSTALL_INCLUDEDIR}")
-target_link_libraries(qtappfw-hvac Qt5::Core)
+target_link_libraries(qtappfw-hvac Qt5::Core qtappfw-vehicle-signals)
set_target_properties(qtappfw-hvac PROPERTIES
VERSION ${PROJECT_VERSION}
SOVERSION 1
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;
}
diff --git a/hvac/hvac.h b/hvac/hvac.h
index 1a8b233..34530fa 100644
--- a/hvac/hvac.h
+++ b/hvac/hvac.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2020-2021 Konsulko Group
+ * Copyright (C) 2020-2022 Konsulko Group
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -23,25 +23,35 @@
#include <QtQml/QQmlContext>
#include <QtQml/QQmlListProperty>
+class VehicleSignals;
+
class HVAC : public QObject
{
- Q_OBJECT
+ Q_OBJECT
- Q_PROPERTY(int fanSpeed READ get_fanspeed WRITE set_fanspeed NOTIFY fanSpeedChanged)
- Q_PROPERTY(int leftTemperature READ get_temp_left_zone WRITE set_temp_left_zone NOTIFY leftTemperatureChanged)
- Q_PROPERTY(int rightTemperature READ get_temp_right_zone WRITE set_temp_right_zone NOTIFY rightTemperatureChanged)
+ Q_PROPERTY(int fanSpeed READ get_fanspeed WRITE set_fanspeed NOTIFY fanSpeedChanged)
+ Q_PROPERTY(int leftTemperature READ get_temp_left_zone WRITE set_temp_left_zone NOTIFY leftTemperatureChanged)
+ Q_PROPERTY(int rightTemperature READ get_temp_right_zone WRITE set_temp_right_zone NOTIFY rightTemperatureChanged)
- public:
- explicit HVAC(QObject * parent = Q_NULLPTR);
+public:
+ explicit HVAC(VehicleSignals *vs, QObject * parent = Q_NULLPTR);
virtual ~HVAC();
- signals:
+signals:
void fanSpeedChanged(int fanSpeed);
void leftTemperatureChanged(int temp);
void rightTemperatureChanged(int temp);
void languageChanged(QString language);
- private:
+private slots:
+ void onConnected();
+ void onAuthorized();
+ void onDisconnected();
+
+private:
+ VehicleSignals *m_vs;
+ bool m_connected;
+
int m_fanspeed;
int m_temp_left_zone;
int m_temp_right_zone;
@@ -50,7 +60,6 @@ class HVAC : public QObject
int get_temp_left_zone() const { return m_temp_left_zone; };
int get_temp_right_zone() const { return m_temp_right_zone; };
- void control(QString verb, QString field, int value);
void set_fanspeed(int speed);
void set_temp_left_zone(int temp);
void set_temp_right_zone(int temp);