aboutsummaryrefslogtreecommitdiffstats
path: root/src/wm_client.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/wm_client.cpp')
-rw-r--r--src/wm_client.cpp255
1 files changed, 89 insertions, 166 deletions
diff --git a/src/wm_client.cpp b/src/wm_client.cpp
index 4bccb8c..3acf09e 100644
--- a/src/wm_client.cpp
+++ b/src/wm_client.cpp
@@ -16,7 +16,10 @@
#include <json-c/json.h>
#include "wm_client.hpp"
+#include "util.hpp"
#include <ilm/ilm_control.h>
+#include <uuid/uuid.h>
+
#define INVALID_SURFACE_ID 0
@@ -26,34 +29,19 @@ using std::vector;
namespace wm
{
-static const char kActive[] = "active";
-static const char kInactive[] = "inactive";
-static const char kVisible[] = "visible";
-static const char kInvisible[] = "invisible";
-static const char kSyncDraw[] = "syncDraw";
-static const char kFlushDraw[] = "flushDraw";
+static const vector<string> kWMEvents = {
+ // Private event for applications
+ "syncDraw", "flushDraw", "visible", "invisible", "active", "inactive", "error"};
+static const vector<string> kErrorDescription = {
+ "unknown-error"};
+
static const char kKeyDrawingName[] = "drawing_name";
-static const char kKeyDrawingArea[] = "drawing_area";
-static const char kKeyRole[] = "role";
-static const char kKeyArea[] = "area";
static const char kKeyrole[] = "role";
static const char kKeyError[] = "error";
-static const char kKeyErrorDesc[] = "errorDescription";
-static const char kKeyX[] = "x";
-static const char kKeyY[] = "y";
-static const char kKeyWidth[] = "width";
-static const char kKeyHeight[] = "height";
-static const char kKeyDrawingRect[] = "drawing-rect";
-
-static const vector<string> kWMEvents = {
- // Private event for applications
- kActive, kInactive,
- kVisible, kInvisible,
- kSyncDraw, kFlushDraw,
- kKeyError};
+static const char kKeyErrorDesc[] = "kErrorDescription";
WMClient::WMClient(const string &appid, unsigned layer, unsigned surface, const string &role)
- : id(appid), layer(layer), is_source_set(false),
+ : id(appid), layer(layer),
role2surface(0)
{
role2surface[role] = surface;
@@ -62,7 +50,7 @@ WMClient::WMClient(const string &appid, unsigned layer, unsigned surface, const
#if GTEST_ENABLED
string ev = x;
#else
- afb_event_t ev = afb_api_make_event(afbBindingV3root, x.c_str());
+ afb_event ev = afb_daemon_make_event(x.c_str());
#endif
evname2afb_event[x] = ev;
}
@@ -71,9 +59,6 @@ WMClient::WMClient(const string &appid, unsigned layer, unsigned surface, const
WMClient::WMClient(const string &appid, const string &role)
: id(appid),
layer(0),
- is_source_set(false),
- is_active(false),
- main_role(role),
role2surface(0),
evname2afb_event(0)
{
@@ -83,7 +68,7 @@ WMClient::WMClient(const string &appid, const string &role)
#if GTEST_ENABLED
string ev = x;
#else
- afb_event_t ev = afb_api_make_event(afbBindingV3root, x.c_str());
+ afb_event ev = afb_daemon_make_event(x.c_str());
#endif
evname2afb_event[x] = ev;
}
@@ -92,8 +77,6 @@ WMClient::WMClient(const string &appid, const string &role)
WMClient::WMClient(const string &appid, unsigned layer, const string &role)
: id(appid),
layer(layer),
- is_source_set(false),
- is_active(false),
main_role(role),
role2surface(0),
evname2afb_event(0)
@@ -104,7 +87,7 @@ WMClient::WMClient(const string &appid, unsigned layer, const string &role)
#if GTEST_ENABLED
string ev = x;
#else
- afb_event_t ev = afb_api_make_event(afbBindingV3root, x.c_str());
+ afb_event ev = afb_daemon_make_event(x.c_str());
#endif
evname2afb_event[x] = ev;
}
@@ -120,45 +103,16 @@ string WMClient::role() const
return this->main_role;
}
-void WMClient::setRole(const string& role)
-{
- this->main_role = role;
-}
-
unsigned WMClient::layerID() const
{
return this->layer;
}
-void WMClient::setLayerID(unsigned id)
-{
- this->layer = id;
-}
-
unsigned WMClient::surfaceID() const
{
return this->surface;
}
-void WMClient::registerSurface(unsigned surface)
-{
- this->surface = surface;
-}
-
-void WMClient::activate()
-{
- if(!this->isActive())
- this->emitActive(true); // emit when state is changed
- this->is_active = true;
-}
-
-void WMClient::deactivate()
-{
- if(this->isActive())
- this->emitActive(false); // emit when state is changed
- this->is_active = false;
-}
-
/**
* Add surface to the client
*
@@ -179,16 +133,6 @@ WMError WMClient::addSurface(unsigned surface)
return (err == ILM_SUCCESS) ? WMError::SUCCESS : WMError::FAIL;
}
-void WMClient::setSurfaceSizeCorrectly()
-{
- this->is_source_set = true;
-}
-
-bool WMClient::isSourceSizeSet()
-{
- return this->is_source_set;
-}
-
bool WMClient::removeSurfaceIfExist(unsigned surface)
{
bool ret = false;
@@ -197,152 +141,131 @@ bool WMClient::removeSurfaceIfExist(unsigned surface)
this->surface = INVALID_SURFACE_ID;
ret = true;
}
- return ret;
-}
-
-bool WMClient::subscribe(afb_req_t req, const string &evname)
-{
- int ret = afb_req_subscribe(req, this->evname2afb_event[evname]);
- if (ret)
+ else
{
- HMI_DEBUG("Failed to subscribe %s", evname.c_str());
- return false;
+ for(auto &x : this->service2surfaces)
+ {
+ if(x.second == surface)
+ {
+ ret = true;
+ string key = x.first;
+ this->service2surfaces.erase(key);
+ this->service2supplier.erase(key);
+ }
+ }
}
- return true;
+ return ret;
}
-void WMClient::emitVisible(bool visible)
+WMError WMClient::setRenderOrder(const vector<string> &order)
{
- // error check
- bool allow_send = false;
- if(visible)
+ WMError ret = WMError::SUCCESS;
+ this->surface_render_order.clear();
+ for(const auto& x : order)
{
- allow_send = afb_event_is_valid(this->evname2afb_event[kVisible]);
- }
- else
- {
- allow_send = afb_event_is_valid(this->evname2afb_event[kInvisible]);
- }
- if(allow_send)
- {
- json_object* j = json_object_new_object();
- json_object_object_add(j, kKeyRole, json_object_new_string(this->role().c_str()));
- json_object_object_add(j, kKeyDrawingName, json_object_new_string(this->role().c_str()));
-
- if(visible)
+ unsigned s; // surface
+ if(x == this->role())
{
- afb_event_push(this->evname2afb_event[kVisible], j);
+ s = this->surfaceID();
+ }
+ else if(this->service2surfaces.count(x) != 0)
+ {
+ s = this->service2surfaces[x];
}
else
{
- afb_event_push(this->evname2afb_event[kInvisible], j);
+ ret = WMError::NOT_REGISTERED;
+ break;
}
+ this->surface_render_order.push_back(s);
}
- else
- {
- HMI_ERROR("Failed to send %s", __func__);
- }
-}
-
-void WMClient::emitActive(bool active)
-{
- // error check
- bool allow_send = false;
- if(active)
- {
- allow_send = afb_event_is_valid(this->evname2afb_event[kActive]);
- }
- else
+ if(ret == WMError::SUCCESS)
{
- allow_send = afb_event_is_valid(this->evname2afb_event[kInactive]);
- }
- if(allow_send)
- {
- json_object* j = json_object_new_object();
- json_object_object_add(j, kKeyRole, json_object_new_string(this->role().c_str()));
- json_object_object_add(j, kKeyDrawingName, json_object_new_string(this->role().c_str()));
-
- if(active)
+ int count = 0;
+ t_ilm_layer* id_array = new t_ilm_surface[this->surface_render_order.size()];
+ if(id_array == nullptr)
{
- afb_event_push(this->evname2afb_event[kActive], j);
+ HMI_WARNING("short memory");
+ ret = WMError::FAIL;
}
else
{
- afb_event_push(this->evname2afb_event[kInactive], j);
+ for(const auto& i : this->surface_render_order)
+ {
+ id_array[count] = i;
+ ++count;
+ }
+ ilm_layerSetRenderOrder(this->layerID(),
+ id_array, this->surface_render_order.size());
+ delete id_array;
}
}
- else
- {
- HMI_ERROR("Failed to send %s", __func__);
- }
+ return ret;
}
-void WMClient::emitSyncDraw(const string& area, struct rect& r)
+string WMClient::attachTmpServiceSurface(const string& supplier, const string& service_surface)
{
- HMI_NOTICE("trace");
- if(afb_event_is_valid(this->evname2afb_event[kSyncDraw]))
- {
- json_object *j_rect = json_object_new_object();
- json_object_object_add(j_rect, kKeyX, json_object_new_int(r.x));
- json_object_object_add(j_rect, kKeyY, json_object_new_int(r.y));
- json_object_object_add(j_rect, kKeyWidth, json_object_new_int(r.w));
- json_object_object_add(j_rect, kKeyHeight, json_object_new_int(r.h));
-
- json_object* j = json_object_new_object();
- json_object_object_add(j, kKeyRole, json_object_new_string(this->role().c_str()));
- json_object_object_add(j, kKeyDrawingName, json_object_new_string(this->role().c_str()));
- json_object_object_add(j, kKeyDrawingArea, json_object_new_string(area.c_str()));
- json_object_object_add(j, kKeyArea, json_object_new_string(this->role().c_str()));
+ string uuid;
+ uuid_t u;
+ char out[37]; // uuid is 36 characters
+ uuid_generate_random(u);
+ uuid_unparse(u, out);
+ uuid = out;
+ this->service2supplier.emplace(service_surface, supplier);
+ return uuid;
+}
- json_object_object_add(j, kKeyDrawingRect, j_rect);
- afb_event_push(this->evname2afb_event[kSyncDraw], j);
- }
- else
+WMError WMClient::attachServiceSurface(const string& service_surface, unsigned surface)
+{
+ WMError ret = WMError::NOT_REGISTERED;
+ if(this->service2supplier.count(service_surface) != 0)
{
- HMI_ERROR("Failed to send %s", __func__);
+ this->service2surfaces.emplace(service_surface, surface);
+ ret = WMError::SUCCESS;
}
+ return ret;
}
-void WMClient::emitFlushDraw()
+#if GTEST_ENABLED
+bool WMClient::subscribe(afb_req req, const string &evname)
{
- if(afb_event_is_valid(this->evname2afb_event[kFlushDraw]))
- {
- json_object* j = json_object_new_object();
- json_object_object_add(j, kKeyRole, json_object_new_string(this->role().c_str()));
- json_object_object_add(j, kKeyDrawingName, json_object_new_string(this->role().c_str()));
- afb_event_push(this->evname2afb_event[kFlushDraw], nullptr);
+ if(evname != kKeyError){
+ HMI_DEBUG("error is only enabeled for now");
+ return false;
}
- else
+ int ret = afb_req_subscribe(req, this->evname2afb_event[evname]);
+ if (ret)
{
- HMI_ERROR("Failed to send %s", __func__);
+ HMI_DEBUG("Failed to subscribe %s", evname.c_str());
+ return false;
}
+ return true;
}
-void WMClient::emitError(WMError error)
+void WMClient::emitError(WM_CLIENT_ERROR_EVENT ev)
{
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(error));
- json_object_object_add(j, kKeyErrorDesc, json_object_new_string(errorDescription(error)));
- HMI_DEBUG("error: %d, description:%s", error, errorDescription(error));
+ 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("error: %d, description:%s", ev, kErrorDescription[ev].c_str());
+
int ret = afb_event_push(this->evname2afb_event[kKeyError], j);
if (ret != 0)
{
HMI_DEBUG("afb_event_push failed: %m");
}
}
+#endif
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);
- }
+ DUMP(" ROLE : %s , SURFACE : %d", main_role.c_str(), surface);
}
} // namespace wm \ No newline at end of file