diff options
Diffstat (limited to 'hvac')
-rw-r--r-- | hvac/CMakeLists.txt | 2 | ||||
-rw-r--r-- | hvac/hvac.cpp | 83 | ||||
-rw-r--r-- | hvac/hvac.h | 29 |
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); |