diff options
author | Kazumasa Mitsunari <knimitz@witz-inc.co.jp> | 2018-06-10 19:12:32 +0900 |
---|---|---|
committer | Kazumasa Mitsunari <knimitz@witz-inc.co.jp> | 2018-06-11 09:01:10 +0900 |
commit | c19969f65fb1441fea3920f5ab5acae09b37397f (patch) | |
tree | 04b1cd6f935bfaa7fb5f4b73d7e69910ace335d0 /src/wm_client.cpp | |
parent | bc95ea7e991f78c4753a845b0daa6687a5abbb98 (diff) |
Rename files to use "_" instead of "-"
Change-Id: I24b7be71af682946a4abde928e8bb46bf5104041
Signed-off-by: Kazumasa Mitsunari <knimitz@witz-inc.co.jp>
Diffstat (limited to 'src/wm_client.cpp')
-rw-r--r-- | src/wm_client.cpp | 183 |
1 files changed, 183 insertions, 0 deletions
diff --git a/src/wm_client.cpp b/src/wm_client.cpp new file mode 100644 index 0000000..6f1aa20 --- /dev/null +++ b/src/wm_client.cpp @@ -0,0 +1,183 @@ +/* + * 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 <json-c/json.h> +#include "wm_client.hpp" +#include "hmi-debug.h" + +#define INVALID_SURFACE_ID 0 + +using std::string; +using std::vector; + +namespace wm +{ + +const vector<string> kWMEvents = { + // Private event for applications + "syncDraw", "flushDraw", "visible", "invisible", "active", "inactive", "error"}; +const vector<string> kErrorDescription = { + "unknown-error"}; + +static const char kKeyDrawingName[] = "drawing_name"; +static const char kKeyrole[] = "role"; +static const char kKeyError[] = "error"; +static const char kKeyErrorDesc[] = "kErrorDescription"; + +WMClient::WMClient(const string &appid, unsigned layer, unsigned surface, const string &role) + : id(appid), layer(layer), + role2surface(0) +{ + role2surface[role] = surface; + for (auto x : kWMEvents) + { +#if GTEST_ENABLED + string ev = x; +#else + afb_event ev = afb_daemon_make_event(x.c_str()); +#endif + event2list[x] = ev; + } +} + +WMClient::WMClient(const string &appid, const string &role) + : id(appid), + layer(0), + role2surface(0), + event2list(0) +{ + role2surface[role] = INVALID_SURFACE_ID; + for (auto x : kWMEvents) + { +#if GTEST_ENABLED + string ev = x; +#else + afb_event ev = afb_daemon_make_event(x.c_str()); +#endif + event2list[x] = ev; + } +} + +WMClient::~WMClient() +{ +} + +string WMClient::appID() const +{ + return this->id; +} + +unsigned WMClient::surfaceID(const string &role) const +{ + if (0 == this->role2surface.count(role)) + { + HMI_WARNING("wm", "invalid role"); + return INVALID_SURFACE_ID; + } + return this->role2surface.at(role); +} + +unsigned WMClient::layerID() const +{ + return this->layer; +} + +void WMClient::registerLayer(unsigned layer) +{ + this->layer = layer; +} + +bool WMClient::addSurface(const string &role, unsigned surface) +{ + HMI_DEBUG("wm", "Add role %s with surface %d", role.c_str(), surface); + if (0 != this->role2surface.count(role)) + { + HMI_NOTICE("wm", "override surfaceID %d with %d", this->role2surface[role], surface); + } + this->role2surface[role] = surface; + return true; +} + +bool WMClient::removeSurfaceIfExist(unsigned surface) +{ + bool ret = false; + for (auto &x : this->role2surface) + { + if (surface == x.second) + { + this->role2surface.erase(x.first); + ret = true; + break; + } + } + return ret; +} + +bool WMClient::removeRole(const string &role) +{ + bool ret = false; + if (this->role2surface.count(role) != 0) + { + this->role2surface.erase(role); + ret = true; + } + return ret; +} + +bool WMClient::subscribe(afb_req req, const string &evname) +{ + if(evname != kKeyError){ + HMI_DEBUG("wm", "error is only enabeled for now"); + return false; + } + int ret = afb_req_subscribe(req, this->event2list[evname]); + if (ret) + { + HMI_DEBUG("wm", "Failed to subscribe %s", evname.c_str()); + return false; + } + return true; +} + +void WMClient::emitError(WM_CLIENT_ERROR_EVENT ev) +{ + if (!afb_event_is_valid(this->event2list[kKeyError])){ + HMI_ERROR("wm", "event err is not valid"); + return; + } + json_object *j = json_object_new_object(); + json_object_object_add(j, kKeyError, json_object_new_int(ev)); + json_object_object_add(j, kKeyErrorDesc, json_object_new_string(kErrorDescription[ev].c_str())); + HMI_DEBUG("wm", "error: %d, description:%s", ev, kErrorDescription[ev].c_str()); + + int ret = afb_event_push(this->event2list[kKeyError], j); + if (ret != 0) + { + HMI_DEBUG("wm", "afb_event_push failed: %m"); + } +} + +void WMClient::dumpInfo() +{ + DUMP("APPID : %s", id.c_str()); + DUMP(" LAYER : %d", layer); + for (const auto &x : this->role2surface) + { + DUMP(" ROLE : %s , SURFACE : %d", x.first.c_str(), x.second); + } +} + +} // namespace wm
\ No newline at end of file |