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 --- CMakeLists.txt | 1 + hvac/CMakeLists.txt | 2 ++ hvac/hvac.cpp | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++++ hvac/hvac.h | 66 +++++++++++++++++++++++++++++++++++++++ hvac/hvacmessage.cpp | 30 ++++++++++++++++++ hvac/hvacmessage.h | 41 +++++++++++++++++++++++++ message.h | 1 + messageengine.cpp | 4 +++ 8 files changed, 232 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 diff --git a/CMakeLists.txt b/CMakeLists.txt index bf1cba4..e769b33 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -48,6 +48,7 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/qtappfw.pc set (SUBDIRS docs bluetooth + hvac map mediaplayer navigation 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 diff --git a/message.h b/message.h index 87cd461..a440ab7 100644 --- a/message.h +++ b/message.h @@ -45,6 +45,7 @@ enum MessageType { VoiceEventMessage, SignalComposerEventMessage, GuiMetadataCapabilityEventMessage, + HVACEventMessage, }; class Message : public QObject diff --git a/messageengine.cpp b/messageengine.cpp index 115dde7..9ab9aee 100644 --- a/messageengine.cpp +++ b/messageengine.cpp @@ -18,6 +18,7 @@ #include "messageengine.h" #include "bluetoothmessage.h" #include "guimetadatamessage.h" +#include "hvacmessage.h" #include "mapmessage.h" #include "mediaplayermessage.h" #include "navigationmessage.h" @@ -153,6 +154,9 @@ void MessageEngine::onTextMessageReceived(QString jsonStr) } else if (api == "signal-composer") { message = new SignalComposerMessage; type = SignalComposerEventMessage; + } else if (api == "hvac") { + message = new HVACMessage; + type = HVACEventMessage; } else { message = new Message; type = GenericMessage; -- cgit 1.2.3-korg