#include <json-c/json.h>
#include "wm_client.hpp"
-#include "hmi-debug.h"
+#include "util.hpp"
+#include <ilm/ilm_control.h>
#define INVALID_SURFACE_ID 0
#else
afb_event ev = afb_daemon_make_event(x.c_str());
#endif
- event2list[x] = ev;
+ evname2afb_event[x] = ev;
}
}
: id(appid),
layer(0),
role2surface(0),
- event2list(0)
+ evname2afb_event(0)
{
role2surface[role] = INVALID_SURFACE_ID;
for (auto x : kWMEvents)
#else
afb_event ev = afb_daemon_make_event(x.c_str());
#endif
- event2list[x] = ev;
+ evname2afb_event[x] = ev;
}
}
-WMClient::~WMClient()
+WMClient::WMClient(const string &appid, unsigned layer, const string &role)
+ : id(appid),
+ layer(layer),
+ main_role(role),
+ role2surface(0),
+ evname2afb_event(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
+ evname2afb_event[x] = ev;
+ }
}
string WMClient::appID() const
return std::string("");
}
+string WMClient::role() const
+{
+ return this->main_role;
+}
+
unsigned WMClient::layerID() const
{
return this->layer;
}
-/**
- * Set layerID the client belongs to
- *
- * This function set layerID the client belongs to.
- * But this function may not used because the layer should be fixed at constructor.
- * So this function will be used to change layer by some reasons.
- *
- * @param unsigned[in] layerID
- * @return None
- * @attention WMClient can't have multiple layer
- */
-void WMClient::registerLayer(unsigned layer)
+unsigned WMClient::surfaceID() const
+{
+ return this->surface;
+}
+
+void WMClient::setRole(const string& role)
+{
+ this->role_list.clear();
+ this->role_list.push_back(role);
+}
+
+void WMClient::appendRole(const string& role)
{
- this->layer = layer;
+ this->role_list.push_back(role);
}
/**
* @param unsigned[in] surface
* @return true
*/
-bool WMClient::addSurface(const string &role, unsigned surface)
+/* bool WMClient::addSurface(const string &role, unsigned surface)
{
- HMI_DEBUG("wm", "Add role %s with surface %d", role.c_str(), surface);
+ HMI_DEBUG("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);
+ HMI_NOTICE("override surfaceID %d with %d", this->role2surface[role], surface);
}
this->role2surface[role] = surface;
return true;
+} */
+
+WMError WMClient::addSurface(unsigned surface)
+{
+ this->surface = surface;
+ ilmErrorTypes err = ilm_layerAddSurface(this->layer, surface);
+
+ if(err == ILM_SUCCESS)
+ {
+ err = ilm_commitChanges();
+ }
+ return (err == ILM_SUCCESS) ? WMError::SUCCESS : WMError::FAIL;
}
bool WMClient::removeSurfaceIfExist(unsigned surface)
{
bool ret = false;
+ if(surface == this->surface)
+ {
+ this->surface = INVALID_SURFACE_ID;
+ return true;
+ }
for (auto &x : this->role2surface)
{
if (surface == x.second)
{
- HMI_INFO("wm", "Remove surface from client %s: role %s, surface: %d",
+ HMI_INFO("Remove surface from client %s: role %s, surface: %d",
this->id.c_str(), x.first.c_str(), x.second);
this->role2surface.erase(x.first);
ret = true;
return ret;
}
-#ifndef GTEST_ENABLED
+#if GTEST_ENABLED
bool WMClient::subscribe(afb_req req, const string &evname)
{
if(evname != kKeyError){
- HMI_DEBUG("wm", "error is only enabeled for now");
+ HMI_DEBUG("error is only enabeled for now");
return false;
}
- int ret = afb_req_subscribe(req, this->event2list[evname]);
+ int ret = afb_req_subscribe(req, this->evname2afb_event[evname]);
if (ret)
{
- HMI_DEBUG("wm", "Failed to subscribe %s", evname.c_str());
+ HMI_DEBUG("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");
+ if (!afb_event_is_valid(this->evname2afb_event[kKeyError])){
+ HMI_ERROR("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());
+ HMI_DEBUG("error: %d, description:%s", ev, kErrorDescription[ev].c_str());
- int ret = afb_event_push(this->event2list[kKeyError], j);
+ int ret = afb_event_push(this->evname2afb_event[kKeyError], j);
if (ret != 0)
{
- HMI_DEBUG("wm", "afb_event_push failed: %m");
+ HMI_DEBUG("afb_event_push failed: %m");
}
}
#endif