summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorScott Murray <scott.murray@konsulko.com>2019-12-04 11:36:34 -0800
committerScott Murray <scott.murray@konsulko.com>2019-12-05 01:02:13 -0500
commit2e95f1fb45741c9a2b22dc286990c590ed9e5b06 (patch)
treecb32206cc83d41a6b065518f2efe1285d87b7bd3
parent815589132b93468f3d2577273da35ed644017fff (diff)
Add initial signal-composer support
Add support for new abstract event.vehicle.speed and event.engine.speed events from the signal-composer binding. This should help avoid code duplication in the Qt apps needing events from signal-composer. Bug-AGL: SPEC-3023 Change-Id: I877f8c1cc057d0d491318ef5ad6a943119ffc8b8 Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com> Signed-off-by: Scott Murray <scott.murray@konsulko.com>
-rw-r--r--CMakeLists.txt1
-rw-r--r--message.h1
-rw-r--r--messageengine.cpp4
-rw-r--r--signal-composer/CMakeLists.txt2
-rw-r--r--signal-composer/signalcomposer.cpp85
-rw-r--r--signal-composer/signalcomposer.h50
-rw-r--r--signal-composer/signalcomposermessage.cpp29
-rw-r--r--signal-composer/signalcomposermessage.h36
8 files changed, 208 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index d57f663..acee230 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -53,6 +53,7 @@ set (SUBDIRS
network
pbap
radio
+ signal-composer
telephony
weather)
diff --git a/message.h b/message.h
index c39b107..9bb970e 100644
--- a/message.h
+++ b/message.h
@@ -42,6 +42,7 @@ enum MessageType {
RadioEventMessage,
MapEventMessage,
NavigationEventMessage,
+ SignalComposerEventMessage,
};
class Message : public QObject
diff --git a/messageengine.cpp b/messageengine.cpp
index d057d11..9ea59a3 100644
--- a/messageengine.cpp
+++ b/messageengine.cpp
@@ -26,6 +26,7 @@
#include "responsemessage.h"
#include "telephonymessage.h"
#include "weathermessage.h"
+#include "signalcomposermessage.h"
#include <QJsonArray>
@@ -137,6 +138,9 @@ void MessageEngine::onTextMessageReceived(QString jsonStr)
} else if (api == "bluetooth-map") {
message = new MapMessage;
type = MapEventMessage;
+ } else if (api == "signal-composer") {
+ message = new SignalComposerMessage;
+ type = SignalComposerEventMessage;
} else {
message = new Message;
type = GenericMessage;
diff --git a/signal-composer/CMakeLists.txt b/signal-composer/CMakeLists.txt
new file mode 100644
index 0000000..18f3a0a
--- /dev/null
+++ b/signal-composer/CMakeLists.txt
@@ -0,0 +1,2 @@
+add_headers(signalcomposer.h signalcomposermessage.h)
+add_sources(signalcomposer.cpp signalcomposermessage.cpp)
diff --git a/signal-composer/signalcomposer.cpp b/signal-composer/signalcomposer.cpp
new file mode 100644
index 0000000..b02c6d3
--- /dev/null
+++ b/signal-composer/signalcomposer.cpp
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2018 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 "message.h"
+#include "messageengine.h"
+#include "signalcomposer.h"
+#include "signalcomposermessage.h"
+
+SignalComposer::SignalComposer (QUrl &url, QObject * parent) :
+ QObject(parent),
+ m_mloop(nullptr)
+{
+ m_mloop = new MessageEngine(url);
+ QObject::connect(m_mloop, &MessageEngine::connected, this, &SignalComposer::onConnected);
+ QObject::connect(m_mloop, &MessageEngine::disconnected, this, &SignalComposer::onDisconnected);
+ QObject::connect(m_mloop, &MessageEngine::messageReceived, this, &SignalComposer::onMessageReceived);
+}
+
+SignalComposer::~SignalComposer()
+{
+ delete m_mloop;
+}
+
+void SignalComposer::onConnected()
+{
+ QStringListIterator eventIterator(events);
+ SignalComposerMessage *tmsg;
+
+ while (eventIterator.hasNext()) {
+ tmsg = new SignalComposerMessage();
+ QJsonObject parameter;
+ parameter.insert("signal", eventIterator.next());
+ tmsg->createRequest("subscribe", parameter);
+ m_mloop->sendMessage(tmsg);
+ delete tmsg;
+ }
+}
+
+void SignalComposer::onDisconnected()
+{
+ QStringListIterator eventIterator(events);
+ SignalComposerMessage *tmsg;
+
+ while (eventIterator.hasNext()) {
+ tmsg = new SignalComposerMessage();
+ QJsonObject parameter;
+ parameter.insert("signal", eventIterator.next());
+ tmsg->createRequest("unsubscribe", parameter);
+ m_mloop->sendMessage(tmsg);
+ delete tmsg;
+ }
+}
+
+void SignalComposer::onMessageReceived(MessageType type, Message *message)
+{
+ if (type == SignalComposerEventMessage) {
+ SignalComposerMessage *tmsg = qobject_cast<SignalComposerMessage*>(message);
+
+ if (tmsg->isEvent()) {
+ QString uid = tmsg->eventData().value("uid").toString();
+ QVariant v = tmsg->eventData().value("value").toVariant();
+ QString value;
+ if(v.canConvert(QMetaType::QString))
+ value = v.toString();
+ else
+ qWarning() << "Unconvertible type for uid " << uid;
+
+ emit signalEvent(uid, value);
+ }
+ }
+ message->deleteLater();
+}
diff --git a/signal-composer/signalcomposer.h b/signal-composer/signalcomposer.h
new file mode 100644
index 0000000..d0b0332
--- /dev/null
+++ b/signal-composer/signalcomposer.h
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2019 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 SIGNALCOMPOSER_H
+#define SIGNALCOMPOSER_H
+
+#include <QDebug>
+#include <QObject>
+#include <QJsonArray>
+
+#include "messageengine.h"
+
+class SignalComposer : public QObject
+{
+ Q_OBJECT
+
+ public:
+ explicit SignalComposer(QUrl &url, QObject * parent = Q_NULLPTR);
+ virtual ~SignalComposer();
+
+ signals:
+ void signalEvent(QString uid, QString value);
+
+ private:
+ MessageEngine *m_mloop;
+
+ void onConnected();
+ void onDisconnected();
+ void onMessageReceived(MessageType, Message*);
+
+ const QStringList events {
+ "event.vehicle.speed",
+ "event.engine.speed",
+ };
+};
+
+#endif // SIGNALCOMPOSER_H
diff --git a/signal-composer/signalcomposermessage.cpp b/signal-composer/signalcomposermessage.cpp
new file mode 100644
index 0000000..69b8d00
--- /dev/null
+++ b/signal-composer/signalcomposermessage.cpp
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2019 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 <QJsonArray>
+#include <QJsonDocument>
+#include <QJsonObject>
+
+#include "signalcomposermessage.h"
+
+bool SignalComposerMessage::createRequest(QString verb, QJsonObject parameter)
+{
+ if (!verbs.contains(verb))
+ return false;
+
+ return Message::createRequest("signal-composer", verb, parameter);
+}
diff --git a/signal-composer/signalcomposermessage.h b/signal-composer/signalcomposermessage.h
new file mode 100644
index 0000000..e5b6892
--- /dev/null
+++ b/signal-composer/signalcomposermessage.h
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2019 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 SIGNALCOMPOSER_MESSAGE_H
+#define SIGNALCOMPOSER_MESSAGE_H
+
+#include "message.h"
+
+class SignalComposerMessage : public Message
+{
+ Q_OBJECT
+
+ public:
+ bool createRequest(QString verb, QJsonObject parameter);
+
+ private:
+ QStringList verbs {
+ "subscribe",
+ "unsubscribe",
+ };
+};
+
+#endif // SIGNALCOMPOSER_MESSAGE_H