/* * 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 #include #include #include #include #include #include #include "eventhandler.h" void* EventHandler::myThis = 0; EventHandler::EventHandler(QObject *parent) : QObject(parent), mp_hs(NULL), mp_wm(NULL), mp_qw(NULL) { m_dspreq = QString(""); my_id = QString(APP_ID); my_role = QString(ROLE_NAME); m_req.clear(); } EventHandler::~EventHandler() { if (mp_hs != NULL) { delete mp_hs; } if (mp_wm != NULL) { delete mp_wm; } } void EventHandler::init(int port, const char *token) { myThis = this; mp_wm = new QLibWindowmanager(); mp_wm->init(port, token); mp_hs = new LibHomeScreen(); mp_hs->init(port, token); // my_id = QString(std::strtok(std::getenv("AFM_ID"), "@")); mp_hs->registerCallback(nullptr, EventHandler::onRep_static); mp_hs->set_event_handler(LibHomeScreen::Event_ShowWindow, [this](json_object *object){ // {"id": "onscreenXXX", "parameter": {"replyid": "app's id", "file": "onsreen file path", "data": {"key": "value", ...}}} struct json_object *appid; json_object_object_get_ex(object, "application_id", &appid); const char *id = json_object_get_string(appid); if(my_id != QString(id)) { HMI_DEBUG(APP_ID, "Event_ShowWindow id = %s", id); return; } else HMI_DEBUG(APP_ID, "recived json message is[%s]", json_object_get_string(object)); struct json_object *param; json_object_object_get_ex(object, "parameter", ¶m); if(json_object_get_type(param) != json_type_object ) { HMI_DEBUG(APP_ID, "parameter error!"); return; } struct json_object *replyid; json_object_object_get_ex(param, "replyid", &replyid); const char *_replyid = json_object_get_string(replyid); struct json_object *path; json_object_object_get_ex(param, "file", &path); const char *_path = json_object_get_string(path); struct json_object *data; json_bool rtn = json_object_object_get_ex(param, "data", &data); const char* _data = ""; if(rtn) { _data = json_object_to_json_string(data); } m_dspreq = QString(_replyid); if(m_req.contains(m_dspreq)) { m_req[m_dspreq] = qMakePair(QString(_path), QString(_data)); } else m_req.insert(QString(m_dspreq), qMakePair(QString(_path), QString(_data))); this->mp_wm->activateWindow(ROLE_NAME); HMI_DEBUG(APP_ID, "received showWindow event, end!, line=%d", __LINE__); }); mp_hs->set_event_handler(LibHomeScreen::Event_HideWindow, [this](json_object *object){ struct json_object *value; json_object_object_get_ex(object, "application_id", &value); const char *appid = json_object_get_string(value); HMI_DEBUG(APP_ID, "release onScreen is %s!", appid); if (appid == my_id) { emit this->signalLoader(QVariant("")); this->mp_wm->deactivateWindow(ROLE_NAME); } else { HMI_DEBUG(APP_ID, "!!!!releaseOnScreen is not displaying!!!!!"); } }); if (mp_wm->requestSurface(ROLE_NAME) != 0) { HMI_DEBUG(APP_ID, "!!!!LayoutHandler requestSurface Failed!!!!!"); exit(EXIT_FAILURE); } mp_wm->set_event_handler(QLibWindowmanager::Event_SyncDraw, [this](json_object *object) { HMI_DEBUG(APP_ID, "Surface %s got syncDraw!", ROLE_NAME); emit this->signalLoader(QVariant("file://" + m_req[m_dspreq].first)); emit this->signalOnScreenParameter(QVariant(m_req[m_dspreq].second)); this->mp_wm->endDraw(QString(ROLE_NAME)); }); mp_wm->set_event_handler(QLibWindowmanager::Event_Visible, [this](json_object *object) { struct json_object *value; json_object_object_get_ex(object, "drawing_name", &value); const char *name = json_object_get_string(value); HMI_DEBUG(APP_ID, "Event_Visible kKeyDrawingName = %s", name); }); mp_wm->set_event_handler(QLibWindowmanager::Event_Invisible, [this](json_object *object) { struct json_object *value; json_object_object_get_ex(object, "drawing_name", &value); const char *name = json_object_get_string(value); HMI_DEBUG(APP_ID, "Event_Invisible kKeyDrawingName = %s", name); }); HMI_DEBUG(APP_ID, "LayoutHander::init() finished."); } void EventHandler::setQuickWindow(QQuickWindow *qw) { mp_qw = qw; } void EventHandler::onRep_static(struct json_object* reply_contents) { static_cast(EventHandler::myThis)->onRep(reply_contents); } void EventHandler::onRep(struct json_object* reply_contents) { const char* str = json_object_to_json_string(reply_contents); HMI_DEBUG(APP_ID, "EventHandler::onReply %s", str); } void EventHandler::activateWindow(QString &role) { HMI_DEBUG(APP_ID, "EventHandler::activateWindow()"); mp_wm->activateWindow(role); } void EventHandler::deactivateWindow(QString &role) { HMI_DEBUG(APP_ID, "EventHandler::deactivateWindow()"); emit this->signalLoader(QVariant("")); mp_wm->deactivateWindow(role); } void EventHandler::onScreenReply(const QString &btn_name) { HMI_DEBUG(APP_ID, "EventHandler::onScreenReply()"); deactivateWindow(my_role); struct json_object* j_obj = json_object_new_object(); json_object_object_add(j_obj, "application_id", json_object_new_string(m_dspreq.toLatin1())); struct json_object* j_param = json_object_new_object(); json_object_object_add(j_param, "method", json_object_new_string("Buttons.ButtonPress")); json_object_object_add(j_param, "buttonName", json_object_new_string(btn_name.toStdString().c_str())); json_object_object_add(j_param, "buttonPressMode", json_object_new_string("Short")); json_object_object_add(j_obj, "parameter", j_param); mp_hs->replyShowWindow(m_dspreq.toLatin1(), j_obj); }