diff options
-rw-r--r-- | app/app.pro | 6 | ||||
-rw-r--r-- | app/main.cpp | 2 | ||||
-rw-r--r-- | app/qlibsoundmanager.cpp | 154 | ||||
-rw-r--r-- | app/qlibsoundmanager.h | 60 |
4 files changed, 4 insertions, 218 deletions
diff --git a/app/app.pro b/app/app.pro index a432b80..aef6d8d 100644 --- a/app/app.pro +++ b/app/app.pro @@ -1,11 +1,11 @@ TARGET = radio QT = quickcontrols2 qml -HEADERS = PresetDataObject.h qlibsoundmanager.h -SOURCES = main.cpp PresetDataObject.cpp qlibsoundmanager.cpp +HEADERS = PresetDataObject.h +SOURCES = main.cpp PresetDataObject.cpp CONFIG += link_pkgconfig -PKGCONFIG += libsoundmanager qlibwindowmanager qlibhomescreen +PKGCONFIG += qlibsoundmanager qlibwindowmanager qlibhomescreen RESOURCES += \ radio.qrc \ diff --git a/app/main.cpp b/app/main.cpp index c7c3290..288c4b8 100644 --- a/app/main.cpp +++ b/app/main.cpp @@ -28,7 +28,7 @@ #include "PresetDataObject.h" #include <qlibhomescreen.h> #include <qlibwindowmanager.h> -#include "qlibsoundmanager.h" +#include <qlibsoundmanager.h> static QLibHomeScreen* hs; static QLibWindowmanager* qwm; diff --git a/app/qlibsoundmanager.cpp b/app/qlibsoundmanager.cpp deleted file mode 100644 index 9615f64..0000000 --- a/app/qlibsoundmanager.cpp +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Copyright (c) 2017 TOYOTA MOTOR CORPORATION - * - * 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 "qlibsoundmanager.h" -#include <QJsonDocument> -using namespace std; - -static int create_json_object(const QJsonObject& obj, struct json_object* jobj); -static bool put_val_to_jobj(const char* key, const QJsonValue& val, struct json_object* jobj); -QLibSoundmanager* me; - -static void cbEvent_static(const std::string& event, struct json_object* event_contents) -{ - const QString event_name = QString(event.c_str()); - QString str = QString(json_object_get_string(event_contents)); - QJsonParseError error; - QJsonDocument jdoc = QJsonDocument::fromJson(str.toUtf8(), &error); - const QJsonObject jobj = jdoc.object(); - emit me->event(event_name, jobj); -} - -static void cbReply_static(struct json_object* replyContents) -{ - if(me == nullptr){ - return; - } - QString str = QString(json_object_get_string(replyContents)); - QJsonParseError error; - QJsonDocument jdoc = QJsonDocument::fromJson(str.toUtf8(), &error); - QJsonObject jobj = jdoc.object(); - emit me->reply(jobj); -} - -QLibSoundmanager::QLibSoundmanager(QObject *parent) : - QObject(parent) -{ - /* This is not enabled */ - libsm = new LibSoundmanager(); -} - -QLibSoundmanager::~QLibSoundmanager() -{ - delete libsm; -} - -int QLibSoundmanager::init(int port, const QString& token) -{ - if(libsm == nullptr){ - return -1; - } - string ctoken = token.toStdString(); - int rc = libsm->init(port, ctoken); - if(rc != 0){ - return rc; - } - me = this; - - libsm->register_callback( - cbEvent_static, - cbReply_static); - return rc; -} - -int QLibSoundmanager::call(const QString &verb, const QJsonObject &arg) -{ - // translate QJsonObject to struct json_object - struct json_object* jobj = json_object_new_object(); - int ret = create_json_object(arg, jobj); - if(ret < 0) - { - return -1; - } - return libsm->call(verb.toStdString().c_str(), jobj); -} - -int QLibSoundmanager::connect(int sourceID, const QString& sinkName){ - string str = sinkName.toStdString(); - return libsm->connect(sourceID, str); -} -int QLibSoundmanager::disconnect(int connectionID){ - return libsm->disconnect(connectionID); -} -int QLibSoundmanager::ackSetSourceState(int handle, int errorcode){ - return libsm->ackSetSourceState(handle, errorcode); -} -int QLibSoundmanager::registerSource(const QString& name){ - string str = name.toStdString(); - return libsm->registerSource(str); -} - -static int create_json_object(const QJsonObject& obj, struct json_object* jobj) -{ - try{ - for(auto itr = obj.begin(); itr != obj.end();++itr) - { - string key = itr.key().toStdString(); - //const char* key = itr.key().toStdString().c_str(); // Do not code like this. string is removed if size is over 16!! - - bool ret = put_val_to_jobj(key.c_str(), itr.value(),jobj); - if(!ret){ - /*This is not implemented*/ - qDebug("JsonArray can't parse for now"); - return -1; - } - } - } - catch(...){ - qDebug("Json parse error occured"); - return -1; - } - return 0; -} - -static bool put_val_to_jobj(const char* key, const QJsonValue& val, struct json_object* jobj) -{ - if(val.isArray()){ - return false; // Array can't input - } - if(val.isString()){ - string value = val.toString().toStdString(); - json_object_object_add(jobj, key, json_object_new_string(value.c_str())); - } - else{ - const int value = val.toInt(); - json_object_object_add(jobj, key, json_object_new_int(value)); - } - return true; -} - - -void QLibSoundmanager::subscribe(const QString event_name) -{ - std::string str = event_name.toStdString(); - libsm->subscribe(str); -} - -void QLibSoundmanager::unsubscribe(const QString event_name) -{ - std::string str = event_name.toStdString(); - libsm->unsubscribe(str); -} diff --git a/app/qlibsoundmanager.h b/app/qlibsoundmanager.h deleted file mode 100644 index 57d8c6a..0000000 --- a/app/qlibsoundmanager.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2017 TOYOTA MOTOR CORPORATION - * - * 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 QLIBSOUNDMANAGER_H -#define QLIBSOUNDMANAGER_H - - #include <QObject> - #include <QVariant> - #include <QtCore/QJsonObject> - #include <libsoundmanager.hpp> - #include <QString> - #include <string> - - -class QLibSoundmanager : public QObject -{ - Q_OBJECT -public: // method - explicit QLibSoundmanager(QObject *parent = nullptr); - ~QLibSoundmanager(); - int init(int port, const QString& token); - - using sm_event_handler = std::function<void(int sourceid, int handle)>; - - void subscribe(const QString event_name); - void unsubscribe(const QString event_name); - - void emit_event(const QString &event, const QJsonObject &msg); - void emit_reply(const QJsonObject &msg); - -public: - - Q_INVOKABLE int call(const QString &verb, const QJsonObject &arg); - Q_INVOKABLE int connect(int sourceID, const QString& sinkName); - Q_INVOKABLE int disconnect(int connectionID); - Q_INVOKABLE int ackSetSourceState(int handle, int errorcode); - Q_INVOKABLE int registerSource(const QString& name); - -signals: - void reply(const QVariant &msg); - void event(const QVariant &event, const QVariant &msg); - -private: - LibSoundmanager* libsm; -}; - - -#endif /*QLIBSOUNDMANAGER_H*/ |