aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKazumasa Mitsunari <knimitz@witz-inc.co.jp>2018-06-08 15:35:39 +0900
committerKazumasa Mitsunari <knimitz@witz-inc.co.jp>2018-06-08 15:39:47 +0900
commitbe2a72a0759f50e0f76b45382772ed039a60e44f (patch)
tree08cbbce6b39f863a9d9eed951e2aa07ddb73fa85
parentce0587201398f8704f8c8a9d5d4c96b3aafd476f (diff)
2nd Step : Implement overview into app.cpp for set_role
API is not implemented.(Comment out now) Change-Id: I1287c64cb9b5bd0ebdeb7b3220934106a5fbdd25 Signed-off-by: Kazumasa Mitsunari <knimitz@witz-inc.co.jp>
-rw-r--r--src/app.cpp66
-rw-r--r--src/app.hpp2
-rw-r--r--src/main.cpp7
3 files changed, 72 insertions, 3 deletions
diff --git a/src/app.cpp b/src/app.cpp
index 41b52c4..4d9e969 100644
--- a/src/app.cpp
+++ b/src/app.cpp
@@ -1266,9 +1266,73 @@ char const *App::api_request_surface(char const *appid, char const *drawing_name
return nullptr;
}
-void App::api_set_role(char const *appid, char const *drawing_name, unsigned pid){
+/**
+ * This function is substitute of requestSurface
+ * If surface creation is faster than application request of this function,
+ * WM will bind surfaceID with application and role.
+ * If surface creation is slower than application request of thie function,
+ * WM will put Client into pending list.
+ *
+ * Note :
+ * Application can request with pid but this is temporary solution for now.
+ * This will be removed.
+ * */
+bool App::api_set_role(char const *appid, char const *drawing_name, unsigned pid){
std::string id = appid;
std::string role = drawing_name;
+ unsigned surface = 0;
+ WMError wm_err = WMError::UNKNOWN;
+ bool ret = false;
+
+ // get layer ID which role should be in
+ auto lid = this->layers.get_layer_id(role);
+ if (!lid)
+ {
+ /**
+ * register drawing_name as fallback and make it displayed.
+ */
+ lid = this->layers.get_layer_id(std::string("Fallback"));
+ HMI_DEBUG("wm", "%s is not registered in layers.json, then fallback as normal app", role.c_str());
+ if (!lid)
+ {
+ HMI_ERROR("wm", "Drawing name does not match any role, Fallback is disabled");
+ return ret;
+ }
+ }
+
+ if(0 != pid){
+ // search floating surfaceID from pid if pid is designated.
+ // It is not good that application request with its pid
+ //wm_err = g_app_list.lookUpFloatingSurface(pid, &surface);
+ }
+ else{
+ // get floating surface with appid. If WM queries appid from pid,
+ // WM can bind appid and role to surface (not implemented yet)
+ //wm_err = g_app_list.lookUpFloatingSurface(id);
+ }
+ if(wm_err != WMError::SUCCESS){
+ HMI_ERROR("wm", "No floating surface for app: %s", id.c_str());
+ //g_app_list.addFloatingClient(id, *lid, role);
+ HMI_NOTICE("wm", "%s : Waiting for surface creation", id.c_str());
+ return ret;
+ }
+
+ ret = true;
+ if (g_app_list.contains(id))
+ {
+ HMI_INFO("wm", "Add role: %s with surface: %d. Client %s has multi surfaces.",
+ role.c_str(), surface, id.c_str());
+ //wm_err = g_app_list.appendRole(id, surface, role);
+ if(wm_err != WMError::SUCCESS){
+ HMI_INFO("wm", errorDescription(wm_err));
+ }
+ }
+ else{
+ HMI_INFO("wm", "Create new client: %s, surface: %d into layer: %d with role: %s",
+ id.c_str(), surface, *lid, role.c_str());
+ g_app_list.addClient(id, *lid, surface, role);
+ }
+ return ret;
}
result<json_object *> App::api_get_display_info()
diff --git a/src/app.hpp b/src/app.hpp
index a9b3961..4aaed50 100644
--- a/src/app.hpp
+++ b/src/app.hpp
@@ -220,7 +220,7 @@ struct App
result<int> api_request_surface(char const *appid, char const *drawing_name);
char const *api_request_surface(char const *appid, char const *drawing_name, char const *ivi_id);
- void api_set_role(char const *appid, char const *drawing_name, unsigned pid);
+ bool api_set_role(char const *appid, char const *drawing_name, unsigned pid);
void api_activate_surface(char const *appid, char const *drawing_name, char const *drawing_area, const reply_func &reply);
void api_deactivate_surface(char const *appid, char const *drawing_name, const reply_func &reply);
void api_enddraw(char const *appid, char const *drawing_name);
diff --git a/src/main.cpp b/src/main.cpp
index be8db1d..c1bc910 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -359,7 +359,12 @@ void windowmanager_setrole(afb_req req) noexcept
pid = std::stol(a_pid);
}
- g_afb_instance->app.api_set_role(appid.c_str(), a_role, pid);
+ bool ret = g_afb_instance->app.api_set_role(appid.c_str(), a_role, pid);
+ if (!ret)
+ {
+ afb_req_fail(req, "failed", "Couldn't register");
+ return;
+ }
if (isFirstReq)
{