diff options
Diffstat (limited to 'src/wm-client.cpp')
-rw-r--r-- | src/wm-client.cpp | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/src/wm-client.cpp b/src/wm-client.cpp new file mode 100644 index 0000000..4e0ff01 --- /dev/null +++ b/src/wm-client.cpp @@ -0,0 +1,126 @@ +/* + * 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 "wm-client.hpp" +#include "hmi-debug.h" + +#define INVALID_SURFACE_ID 0 + +using std::string; +using std::vector; + +namespace wm +{ + + +const vector<string> wm_events = { + // Private event for applications + "syncDraw", "flushDraw", "visible", "invisible", "active", "inactive", "error"}; + +static const char key_drawing_name[] = "drawing_name"; +static const char key_role[] = "role"; + +WMClient::WMClient(const string &appid, unsigned layerID, unsigned surfaceID, const string &role) + : layer(layerID), + id(appid), + role2surface(0) +{ + role2surface[role] = surfaceID; + for (auto x : wm_events) + { +#if GTEST_ENABLED + string ev = x; +#else + afb_event ev = afb_daemon_make_event(x.c_str()); +#endif + event_list[x] = ev; + } +} + +WMClient::WMClient(const string &appid, const string &role) + : id(appid), + layer(0), + role2surface(0), + event_list(0) +{ + role2surface[role] = INVALID_SURFACE_ID; + for (auto x : wm_events) + { +#if GTEST_ENABLED + string ev = x; +#else + afb_event ev = afb_daemon_make_event(x.c_str()); +#endif + event_list[x] = ev; + } +} + +WMClient::~WMClient() +{ +} + +string WMClient::appID() +{ + return this->id; +} + +void WMClient::registerLayer(unsigned layerID) +{ + this->layer = layerID; +} + +bool WMClient::addSurface(const string &role, unsigned surface) +{ + HMI_DEBUG("wm", "Add role %s with surface %d", role.c_str(), surface); + if(0 != role2surface.count(role)){ + HMI_NOTICE("wm", "override surfaceID %d with %d", role2surface[role], surface); + } + role2surface[role] = surface; + return true; +} + +bool WMClient::removeSurfaceIfExist(unsigned surfaceID){ + bool ret = false; + for (auto &x : role2surface) + { + if(surfaceID == x.second){ + role2surface.erase(x.first); + ret = true; + break; + } + } + return ret; +} + +bool WMClient::removeRole(const string& role){ + bool ret = false; + if (role2surface.count(role) != 0) + { + role2surface.erase(role); + ret = true; + } + return ret; +} + +void WMClient::dumpInfo(){ + DUMP("APPID : %s", id.c_str()); + DUMP(" LAYER : %d", layer); + for(const auto& x : role2surface){ + DUMP(" ROLE : %s , SURFACE : %d", x.first.c_str(), x.second); + } +} + +} // namespace wm
\ No newline at end of file |