summaryrefslogtreecommitdiffstats
path: root/hvac
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
parentfc9399e54dfd05a4307f954549ae58afbf57fb5e (diff)
parentb2cb90d9f5e3e87e963e42f4320edcfad8391f50 (diff)
Merge "Reimplement HVAC API with VIS signals"needlefish_13.93.0needlefish/13.93.013.93.0
Diffstat (limited to 'hvac')
-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);