From cd1a7f3bcbaef1e9c23549f472bce4ae42b2afad Mon Sep 17 00:00:00 2001 From: Matt Ranostay Date: Wed, 8 Jan 2020 23:00:14 -0800 Subject: libqtappfw: add initial HVAC support To remove QML handling of websockets this patchset is required to move it to libqtappfw access. Bug-AGL: SPEC-2984 Change-Id: Ieef6174d2ae7adec2fcaadf44fcb22cf86c7138d Signed-off-by: Matt Ranostay --- hvac/CMakeLists.txt | 2 ++ hvac/hvac.cpp | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++++ hvac/hvac.h | 66 +++++++++++++++++++++++++++++++++++++++ hvac/hvacmessage.cpp | 30 ++++++++++++++++++ hvac/hvacmessage.h | 41 +++++++++++++++++++++++++ 5 files changed, 226 insertions(+) create mode 100644 hvac/CMakeLists.txt create mode 100644 hvac/hvac.cpp create mode 100644 hvac/hvac.h create mode 100644 hvac/hvacmessage.cpp create mode 100644 hvac/hvacmessage.h (limited to 'hvac') diff --git a/hvac/CMakeLists.txt b/hvac/CMakeLists.txt new file mode 100644 index 0000000..0ee635a --- /dev/null +++ b/hvac/CMakeLists.txt @@ -0,0 +1,2 @@ +add_headers(hvac.h hvacmessage.h) +add_sources(hvac.cpp hvacmessage.cpp) diff --git a/hvac/hvac.cpp b/hvac/hvac.cpp new file mode 100644 index 0000000..507cfeb --- /dev/null +++ b/hvac/hvac.cpp @@ -0,0 +1,87 @@ +/* + * Copyright (C) 2020 Konsulko Group + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +#include "message.h" +#include "messageengine.h" +#include "hvac.h" +#include "hvacmessage.h" +#include "responsemessage.h" + +// TODO: don't duplicate defaults from HVAC service here +HVAC::HVAC (QUrl &url, QObject * parent) : + QObject(parent), + m_mloop(nullptr), + m_fanspeed(0), + m_temp_left_zone(21), + m_temp_right_zone(21) +{ + m_mloop = new MessageEngine(url); + QObject::connect(m_mloop, &MessageEngine::messageReceived, this, &HVAC::onMessageReceived); +} + +HVAC::~HVAC() +{ + delete m_mloop; +} + +void HVAC::control(QString verb, QString field, int value) +{ + HVACMessage *tmsg = new HVACMessage(); + QJsonObject parameter; + + parameter.insert(field, value); + tmsg->createRequest(verb, parameter); + m_mloop->sendMessage(tmsg); + delete tmsg; +} + +void HVAC::set_fanspeed(int speed) +{ + control("set", "FanSpeed", speed); + emit fanSpeedChanged(speed); +} + +void HVAC::set_temp_left_zone(int temp) +{ + control("set", "LeftTemperature", temp); + control("set", "LeftLed", temp); + emit leftTemperatureChanged(temp); +} + +void HVAC::set_temp_right_zone(int temp) +{ + + control("set", "RightTemperature", temp); + control("set", "RightLed", temp); + emit rightTemperatureChanged(temp); +} + +void HVAC::onMessageReceived(MessageType type, Message *msg) +{ + if (msg->isEvent() && type == HVACEventMessage) { + HVACMessage *tmsg = qobject_cast(msg); + + if (tmsg->isLanguageEvent()) { + // TODO: cannot be currently tested with identity service + QVariantMap data = tmsg->eventData().toVariantMap(); + emit languageChanged(data.value("language").toString()); + } + } +} diff --git a/hvac/hvac.h b/hvac/hvac.h new file mode 100644 index 0000000..8a4ca3a --- /dev/null +++ b/hvac/hvac.h @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2020 Konsulko Group + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef HVAC_H +#define HVAC_H + +#include +#include +#include +#include +#include + +#include "messageengine.h" + +class HVAC : public QObject +{ + 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) + + public: + explicit HVAC(QUrl &url, QObject * parent = Q_NULLPTR); + virtual ~HVAC(); + + signals: + void fanSpeedChanged(int fanSpeed); + void leftTemperatureChanged(int temp); + void rightTemperatureChanged(int temp); + void languageChanged(QString language); + + private: + MessageEngine *m_mloop; + + int m_fanspeed; + int m_temp_left_zone; + int m_temp_right_zone; + + int get_fanspeed() const { return m_fanspeed; }; + 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); + + // slots + void onMessageReceived(MessageType, Message*); +}; + +#endif // HVAC_H diff --git a/hvac/hvacmessage.cpp b/hvac/hvacmessage.cpp new file mode 100644 index 0000000..b6e31d7 --- /dev/null +++ b/hvac/hvacmessage.cpp @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2020 Konsulko Group + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +#include "hvacmessage.h" + +bool HVACMessage::createRequest(QString verb, QJsonObject parameter) +{ + if (!verbs.contains(verb)) + return false; + + return Message::createRequest("hvac", verb, parameter); +} diff --git a/hvac/hvacmessage.h b/hvac/hvacmessage.h new file mode 100644 index 0000000..49058ff --- /dev/null +++ b/hvac/hvacmessage.h @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2020 Konsulko Group + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef HVAC_MESSAGE_H +#define HVAC_MESSAGE_H + +#include "message.h" + +class HVACMessage : public Message +{ + Q_OBJECT + public: + bool createRequest(QString verb, QJsonObject parameter); + bool isLanguageEvent() {return (this->eventName() == "language"); }; + + private: + QStringList verbs { + "get_fanspeed", + "get_temp_left_zone", + "get_temp_right_zone", + "temp_left_zone_led", + "temp_right_zone_led", + "get", + "set", + }; +}; + +#endif // HVAC_MESSAGE_H -- cgit 1.2.3-korg