summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--conf/areas.json9
-rw-r--r--conf/layers.json8
-rw-r--r--policy_manager/db/roles.db6
-rw-r--r--policy_manager/db/states.db9
-rw-r--r--policy_manager/stm/stm.c5
-rw-r--r--policy_manager/stm/stm.h5
-rw-r--r--policy_manager/stm/stub/stm_inner.c14
-rw-r--r--src/window_manager.cpp9
-rw-r--r--src/wm_layer.hpp4
-rw-r--r--src/wm_layer_control.cpp109
-rw-r--r--src/wm_layer_control.hpp8
11 files changed, 162 insertions, 24 deletions
diff --git a/conf/areas.json b/conf/areas.json
index 03ddfe4..25d2e07 100644
--- a/conf/areas.json
+++ b/conf/areas.json
@@ -80,6 +80,15 @@
"w": 1080,
"h": 1488
}
+ },
+ {
+ "name": "remote.fullscreen",
+ "rect": {
+ "x": 0,
+ "y": 0,
+ "w": 640,
+ "h": 720
+ }
}
]
}
diff --git a/conf/layers.json b/conf/layers.json
index 539846a..87cda15 100644
--- a/conf/layers.json
+++ b/conf/layers.json
@@ -49,6 +49,14 @@
"id_range_begin": 6000,
"id_range_end": 6999,
"comment": "System notification layer. For example, on_screen_low_battery_alert to notify user"
+ },
+ {
+ "name": "Remote",
+ "role": "tbtnavi",
+ "type": "stack",
+ "id_range_begin": 9000,
+ "id_range_end": 9999,
+ "comment": "Range of IDs that will always be placed on the Remote layer for remote display, that gets a very high 'dummy' id of over 9000"
}
]
}
diff --git a/policy_manager/db/roles.db b/policy_manager/db/roles.db
index 184e602..9774274 100644
--- a/policy_manager/db/roles.db
+++ b/policy_manager/db/roles.db
@@ -35,6 +35,12 @@
"role": "system_alert",
"area": "on_screen",
"layer": "on_screen",
+ },
+ {
+ "category": "remote",
+ "role": "tbtnavi",
+ "area": "remote.fullscreen",
+ "layer": "remote_apps",
}
]
}
diff --git a/policy_manager/db/states.db b/policy_manager/db/states.db
index 371be3b..7883963 100644
--- a/policy_manager/db/states.db
+++ b/policy_manager/db/states.db
@@ -169,6 +169,15 @@
"category": "debug"
}
]
+ },
+ {
+ "name": "remote.fullscreen",
+ "areas": [
+ {
+ "name": "remote.fullscreen",
+ "category": "remote"
+ }
+ ]
}
]
}
diff --git a/policy_manager/stm/stm.c b/policy_manager/stm/stm.c
index c63a599..ecd8488 100644
--- a/policy_manager/stm/stm.c
+++ b/policy_manager/stm/stm.c
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2018 TOYOTA MOTOR CORPORATION
+ * Copyright (c) 2019 Konsulko Group
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -40,6 +41,7 @@ const char* kStmCategoryName[] = {
"system",
"software_keyboard",
"debug",
+ "remote",
};
const char* kStmAreaName[] = {
@@ -53,6 +55,7 @@ const char* kStmAreaName[] = {
"restriction.split.main",
"restriction.split.sub",
"software_keyboard",
+ "remote.fullscreen",
};
const char* kStmLayoutName[] = {
@@ -75,6 +78,7 @@ const char* kStmLayoutName[] = {
"debug.split.main",
"debug.split.sub",
"debug.fullscreen",
+ "remote.fullscreen",
};
const char* kStmLayerName[] = {
@@ -83,6 +87,7 @@ const char* kStmLayerName[] = {
"near_homescreen",
"restriction",
"on_screen",
+ "remote_apps",
};
const char* kStmModeName[] = {
diff --git a/policy_manager/stm/stm.h b/policy_manager/stm/stm.h
index deebf9c..330e10d 100644
--- a/policy_manager/stm/stm.h
+++ b/policy_manager/stm/stm.h
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2018 TOYOTA MOTOR CORPORATION
+ * Copyright (c) 2019 Konsulko Group
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -61,6 +62,7 @@ enum StmCtgNo {
StmCtgNoSystem,
StmCtgNoSoftwareKeyboard,
StmCtgNoDebug,
+ StmCtgNoRemote,
StmCtgNoNum,
@@ -80,6 +82,7 @@ enum StmAreaNo {
StmAreaNoRestrictionSplitMain,
StmAreaNoRestrictionSplitSub,
StmAreaNoSoftwareKyeboard,
+ StmAreaNoRemoteFullscreen,
StmAreaNoNum,
@@ -94,6 +97,7 @@ enum StmLayerNo {
StmLayerNoNearHomescreen,
StmLayerNoRestriction,
StmLayerNoOnScreen,
+ StmLayerNoRemoteApps,
StmLayerNoNum,
@@ -122,6 +126,7 @@ enum StmLayoutNo {
StmLayoutNoDbgSplMain,
StmLayoutNoDbgSplSub,
StmLayoutNoDbgFll,
+ StmLayoutNoRmtFll,
StmLayoutNoNum,
diff --git a/policy_manager/stm/stub/stm_inner.c b/policy_manager/stm/stub/stm_inner.c
index bd1b319..789ce5f 100644
--- a/policy_manager/stm/stub/stm_inner.c
+++ b/policy_manager/stm/stub/stm_inner.c
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2018 TOYOTA MOTOR CORPORATION
+ * Copyright (c) 2019 Konsulko Group
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -95,6 +96,11 @@ int stmTransitionStateInner(int event, StmState* state) {
g_stm_crr_state.layer[StmLayerNoOnScreen].state = StmLayoutNoSysAlt;
g_stm_crr_state.layer[StmLayerNoOnScreen].changed = STM_TRUE;
}
+ else if (StmCtgNoRemote == category_no)
+ {
+ g_stm_crr_state.layer[StmLayerNoRemoteApps].state = StmLayoutNoRmtFll;
+ g_stm_crr_state.layer[StmLayerNoRemoteApps].changed = STM_TRUE;
+ }
}
else if (StmEvtNoDeactivate == event_no)
{
@@ -138,6 +144,14 @@ int stmTransitionStateInner(int event, StmState* state) {
g_stm_crr_state.layer[StmLayerNoOnScreen].changed = STM_TRUE;
}
}
+ else if (StmCtgNoRemote == category_no)
+ {
+ if (StmLayoutNoRmtFll == g_stm_prv_state.layer[StmLayerNoRemoteApps].state )
+ {
+ g_stm_crr_state.layer[StmLayerNoRemoteApps].state = StmLayoutNoNone;
+ g_stm_crr_state.layer[StmLayerNoRemoteApps].changed = STM_TRUE;
+ }
+ }
}
// Copy current state for return
diff --git a/src/window_manager.cpp b/src/window_manager.cpp
index f9070f6..dcaf636 100644
--- a/src/window_manager.cpp
+++ b/src/window_manager.cpp
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2017 TOYOTA MOTOR CORPORATION
+ * Copyright (c) 2019 Konsulko Group
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -713,7 +714,8 @@ void WindowManager::processError(WMError error)
unsigned WindowManager::generateLayerForClient(const string& role)
{
- unsigned lid = this->lc->getNewLayerID(role);
+ string l_name;
+ unsigned lid = this->lc->getNewLayerID(role, &l_name);
if (lid == 0)
{
// register drawing_name as fallback and make it displayed.
@@ -724,7 +726,10 @@ unsigned WindowManager::generateLayerForClient(const string& role)
return lid;
}
}
- this->lc->createNewLayer(lid);
+
+ // TODO: remote layer name is fixed
+ this->lc->createNewLayer(lid, ("Remote" == l_name));
+
// add client into the db
return lid;
}
diff --git a/src/wm_layer.hpp b/src/wm_layer.hpp
index 97cf8a8..1521309 100644
--- a/src/wm_layer.hpp
+++ b/src/wm_layer.hpp
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2017 TOYOTA MOTOR CORPORATION
+ * Copyright (c) 2019 Konsulko Group
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -65,6 +66,8 @@ class WMLayer
WMError setLayerState(const LayerState& l);
bool hasLayerID(unsigned id);
bool hasRole(const std::string& role);
+ void setRemote(const bool newRemote) { remote = newRemote; }
+ bool isRemote(void) { return remote; }
// Manipulation
void addLayerToState(unsigned layer);
@@ -90,6 +93,7 @@ class WMLayer
std::vector<unsigned> id_list;
unsigned id_begin;
unsigned id_end;
+ bool remote = false;
};
} // namespace wm
diff --git a/src/wm_layer_control.cpp b/src/wm_layer_control.cpp
index 5b801f7..f3f709f 100644
--- a/src/wm_layer_control.cpp
+++ b/src/wm_layer_control.cpp
@@ -1,6 +1,6 @@
/*
* Copyright (c) 2017 TOYOTA MOTOR CORPORATION
- * Copyright (c) 2018 Konsulko Group
+ * Copyright (c) 2018,2019 Konsulko Group
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -25,6 +25,7 @@
#define LC_AREA_FILE "areas.json"
#define LC_LAYER_SETTING_FILE "layers.json"
#define LC_DEFAULT_AREA "fullscreen"
+#define LC_REMOTE_DEFAULT_AREA "remote.fullscreen"
#define BACK_GROUND_LAYER "BackGroundLayer"
using std::string;
@@ -103,6 +104,18 @@ WMError LayerControl::init(const LayerControlCallbacks& cb)
// Currently, 0 is only available
this->screenID = ids[0];
+ if (1 < num)
+ {
+ // TODO: set remote screen id
+ HMI_INFO("There is remote screen (id:%d)", ids[1]);
+ this->remoteScreenID = ids[1];
+ }
+ else
+ {
+ HMI_INFO("There is no remote screen");
+ this->remoteScreenID = -1;
+ }
+
rc = ilm_getPropertiesOfScreen(this->screenID, &this->screen_prop);
if(rc != ILM_SUCCESS) goto lc_init_error;
@@ -119,10 +132,10 @@ lc_init_error:
return WMError::FAIL;
}
-void LayerControl::createNewLayer(unsigned id)
+void LayerControl::createNewLayer(unsigned id, bool remote)
{
- HMI_INFO("create new ID :%d", id);
- struct rect rct = this->area2size[LC_DEFAULT_AREA];
+ HMI_INFO("create new ID :%d%s", id, remote ? " (For remote layer)" : "");
+ struct rect rct = this->area2size[remote ? LC_REMOTE_DEFAULT_AREA : LC_DEFAULT_AREA];
ilm_layerCreateWithDimension(&id, rct.w, rct.h);
//ilm_layerSetSourceRectangle(id, rct.x, rct.y, rct.w, rct.h);
ilm_layerSetDestinationRectangle(id, this->offset_x, this->offset_y, rct.w, rct.h);
@@ -131,10 +144,11 @@ void LayerControl::createNewLayer(unsigned id)
ilm_commitChanges();
auto wm_layer = getWMLayer(id);
wm_layer->addLayerToState(id);
+ wm_layer->setRemote(remote);
this->renderLayers();
}
-unsigned LayerControl::getNewLayerID(const string& role)
+unsigned LayerControl::getNewLayerID(const string& role, std::string* layer_name)
{
unsigned ret = 0;
for(const auto& l: this->wm_layers)
@@ -144,6 +158,10 @@ unsigned LayerControl::getNewLayerID(const string& role)
{
unsigned wmlid = l->getWMLayerID();
this->lid2wmlid[ret] = wmlid;
+ if(layer_name)
+ {
+ *layer_name = l->layerName();
+ }
break;
}
}
@@ -206,17 +224,29 @@ WMError LayerControl::renderLayers()
HMI_INFO("Commit change");
WMError rc = WMError::SUCCESS;
+ bool haveRemoteDisplay = remoteScreenID > 0;
+
// Check the number of layers
vector<unsigned> ivi_l_ids;
+ vector<unsigned> ivi_remote_l_ids;
for(auto& l : this->wm_layers)
{
auto state = l->getLayerState();
HMI_DEBUG("layer %s", l->layerName().c_str());
- for(const auto& id : state.getIviIdList())
+ if (!l->isRemote())
{
- HMI_DEBUG("Add %d", id);
- ivi_l_ids.push_back(id);
- }
+ for(const auto& id : state.getIviIdList())
+ {
+ HMI_DEBUG("Add %d", id);
+ ivi_l_ids.push_back(id);
+ }
+ } else if (haveRemoteDisplay) {
+ for(const auto& id : state.getIviIdList())
+ {
+ HMI_DEBUG("Add remote %d", id);
+ ivi_remote_l_ids.push_back(id);
+ }
+ }
}
// Create render order
@@ -230,12 +260,31 @@ WMError LayerControl::renderLayers()
int count = 0;
for(const auto& i : ivi_l_ids)
{
- id_array[count] = i;
- ++count;
+ id_array[count++] = i;
+ }
+
+ t_ilm_layer* remote_id_array = nullptr;
+ if(haveRemoteDisplay && ivi_remote_l_ids.size() != 0) {
+ remote_id_array = new t_ilm_layer[ivi_remote_l_ids.size()];
+ if(remote_id_array == nullptr)
+ {
+ HMI_WARNING("short memory");
+ this->undoUpdate();
+ return WMError::FAIL;
+ }
+ count = 0;
+ for(const auto& i : ivi_remote_l_ids)
+ {
+ remote_id_array[count++] = i;
+ }
}
// Display
ilmErrorTypes ret = ilm_displaySetRenderOrder(this->screenID, id_array, ivi_l_ids.size());
+ if(ret == ILM_SUCCESS && haveRemoteDisplay)
+ {
+ ret = ilm_displaySetRenderOrder(this->remoteScreenID, remote_id_array, ivi_remote_l_ids.size());
+ }
if(ret != ILM_SUCCESS)
{
this->undoUpdate();
@@ -250,6 +299,7 @@ WMError LayerControl::renderLayers()
}
ilm_commitChanges();
delete id_array;
+ delete remote_id_array;
return rc;
}
@@ -604,11 +654,18 @@ WMError LayerControl::makeVisible(const shared_ptr<WMClient> client)
{
WMError ret = WMError::SUCCESS;
// Don't check here wheher client is nullptr or not
- unsigned layer = client->layerID();
+ unsigned layer_id = client->layerID();
+ auto layer = getWMLayer(layer_id);
- this->moveForeGround(client);
+ if (!layer->isRemote())
+ {
+ this->moveForeGround(client);
+ }
+ else if (0 > this->remoteScreenID) {
+ return ret;
+ }
- ilm_layerSetVisibility(layer, ILM_TRUE);
+ ilm_layerSetVisibility(layer_id, ILM_TRUE);
return ret;
}
@@ -617,14 +674,28 @@ WMError LayerControl::makeInvisible(const shared_ptr<WMClient> client)
{
WMError ret = WMError::SUCCESS;
// Don't check here the client is not nullptr
- unsigned layer = client->layerID();
+ unsigned layer_id = client->layerID();
+ auto layer = getWMLayer(layer_id);
- bool mv_ok = this->moveBackGround(client);
+ bool set_invisible = true;
+ if (!layer->isRemote())
+ {
+ if(this->moveBackGround(client))
+ {
+ set_invisible = false;
+ }
+ else
+ {
+ HMI_INFO("make invisible client %s", client->appID().c_str());
+ }
+ }
+ else if (0 > this->remoteScreenID) {
+ return ret;
+ }
- if(!mv_ok)
+ if (set_invisible)
{
- HMI_INFO("make invisible client %s", client->appID().c_str());
- ilm_layerSetVisibility(layer, ILM_FALSE);
+ ilm_layerSetVisibility(layer_id, ILM_FALSE);
}
return ret;
diff --git a/src/wm_layer_control.hpp b/src/wm_layer_control.hpp
index 68acd66..e675e12 100644
--- a/src/wm_layer_control.hpp
+++ b/src/wm_layer_control.hpp
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2017 TOYOTA MOTOR CORPORATION
+ * Copyright (c) 2019 Konsulko Group
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -63,8 +64,8 @@ class LayerControl
explicit LayerControl(const std::string& root);
~LayerControl() = default;
WMError init(const LayerControlCallbacks& cb);
- void createNewLayer(unsigned id);
- unsigned getNewLayerID(const std::string& role);
+ void createNewLayer(unsigned id, bool remote = false);
+ unsigned getNewLayerID(const std::string& role, std::string* layer_name = nullptr);
std::shared_ptr<WMLayer> getWMLayer(unsigned layer);
std::shared_ptr<WMLayer> getWMLayer(std::string layer_name);
struct rect getAreaSize(const std::string& area);
@@ -99,6 +100,7 @@ class LayerControl
std::unordered_map<unsigned, unsigned> lid2wmlid;
std::unordered_map<std::string, struct rect> area2size;
unsigned screenID;
+ signed remoteScreenID;
struct ilmScreenProperties screen_prop;
double scaling;
int offset_x;
@@ -106,4 +108,4 @@ class LayerControl
LayerControlCallbacks cb;
};
-} // namespace wm \ No newline at end of file
+} // namespace wm