X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fpolicy_manager%2Fpolicy_manager.cpp;h=a40bb48cd8c911f19b73cc2fcf4edfc667c77da2;hb=bfadb522b21256fde7283746b90116c237e57a5b;hp=3b0eac676b8f1ac2dabf38aaa9abacfc5d3b9389;hpb=2ea71aa957634ce69681ae34abace0566d52b744;p=apps%2Fagl-service-windowmanager.git diff --git a/src/policy_manager/policy_manager.cpp b/src/policy_manager/policy_manager.cpp index 3b0eac6..a40bb48 100644 --- a/src/policy_manager/policy_manager.cpp +++ b/src/policy_manager/policy_manager.cpp @@ -20,12 +20,13 @@ #include #include #include "policy_manager.hpp" -#if 0 +#include "hmi-debug.h" + +namespace stm { extern "C" { #include "dummy_stm.h" } -#endif -#include "hmi-debug.h" +} // namespace stm PolicyManager::PolicyManager() : @@ -34,8 +35,7 @@ PolicyManager::PolicyManager() : areaname2no_(), role2category_(), category2role_(), - role2defaultarea_(), - current_state_() + role2defaultarea_() { HMI_DEBUG("wm:pm", "Call"); } @@ -84,7 +84,7 @@ int PolicyManager::checkPolicy(json_object* json_in, json_object** json_out) { } // Get event from json_object - const char* event = getStringFromJson(json_in, "event"); + const char* event = this->getStringFromJson(json_in, "event"); int event_no = 0; if (nullptr != event) { // Convert name to number @@ -93,7 +93,7 @@ int PolicyManager::checkPolicy(json_object* json_in, json_object** json_out) { } // Get role from json_object - const char* role = getStringFromJson(json_in, "role"); + const char* role = this->getStringFromJson(json_in, "role"); int category_no = 0; if (nullptr != role) { HMI_DEBUG("wm:pm", "role(%s)", role); @@ -112,7 +112,7 @@ int PolicyManager::checkPolicy(json_object* json_in, json_object** json_out) { } // Get areat from json_object - const char* area = getStringFromJson(json_in, "area"); + const char* area = this->getStringFromJson(json_in, "area"); int area_no = 0; if (nullptr != area) { // Convert name to number @@ -120,10 +120,11 @@ int PolicyManager::checkPolicy(json_object* json_in, json_object** json_out) { HMI_DEBUG("wm:pm", "area(%s:%d)", area, area_no); } - // Transition state HMI_DEBUG("wm:pm", "set event:0x%x", (event_no | category_no | area_no)); - int ret = stm::stmTransitionState((event_no | category_no | area_no), - &(this->current_state_)); + + // Transition state + stm::stm_state_t crr_state; + int ret = stm::stmTransitionState((event_no | category_no | area_no), &crr_state); if (0 > ret) { HMI_ERROR("wm:pm", "Error!!"); return -1; @@ -136,12 +137,25 @@ int PolicyManager::checkPolicy(json_object* json_in, json_object** json_out) { // "state": // }, HMI_DEBUG("wm", "parking brake state (is_changed:%d state:%d:%s)", - this->current_state_.parking_brake.is_changed, - this->current_state_.parking_brake.state, - stm::gStmParkingBrakeStateNo2Name[this->current_state_.parking_brake.state]); + crr_state.parking_brake.is_changed, + crr_state.parking_brake.state, + stm::gStmParkingBrakeStateNo2Name[crr_state.parking_brake.state]); this->addStateToJson("parking_brake", - this->current_state_.parking_brake.is_changed, - stm::gStmParkingBrakeStateNo2Name[this->current_state_.parking_brake.state], + crr_state.parking_brake.is_changed, + stm::gStmParkingBrakeStateNo2Name[crr_state.parking_brake.state], + json_out); + + // "accel_pedal": { + // "is_changed": , + // "state": + // }, + HMI_DEBUG("wm", "accelerator pedal state (is_changed:%d state:%d:%s)", + crr_state.accel_pedal.is_changed, + crr_state.accel_pedal.state, + stm::gStmAccelPedalStateNo2Name[crr_state.accel_pedal.state]); + this->addStateToJson("accel_pedal", + crr_state.accel_pedal.is_changed, + stm::gStmAccelPedalStateNo2Name[crr_state.accel_pedal.state], json_out); // "car": { @@ -149,12 +163,12 @@ int PolicyManager::checkPolicy(json_object* json_in, json_object** json_out) { // "state": // }, HMI_DEBUG("wm", "car state (is_changed:%d state:%d:%s)", - this->current_state_.car.is_changed, - this->current_state_.car.state, - stm::gStmCarStateNo2Name[this->current_state_.car.state]); + crr_state.car.is_changed, + crr_state.car.state, + stm::gStmCarStateNo2Name[crr_state.car.state]); this->addStateToJson("car", - this->current_state_.car.is_changed, - stm::gStmCarStateNo2Name[this->current_state_.car.state], + crr_state.car.is_changed, + stm::gStmCarStateNo2Name[crr_state.car.state], json_out); // "lamp": { @@ -162,12 +176,12 @@ int PolicyManager::checkPolicy(json_object* json_in, json_object** json_out) { // "state": // }, HMI_DEBUG("wm", "lamp state (is_changed:%d state:%d:%s)", - this->current_state_.lamp.is_changed, - this->current_state_.lamp.state, - stm::gStmLampStateNo2Name[this->current_state_.lamp.state]); + crr_state.lamp.is_changed, + crr_state.lamp.state, + stm::gStmLampStateNo2Name[crr_state.lamp.state]); this->addStateToJson("lamp", - this->current_state_.lamp.is_changed, - stm::gStmLampStateNo2Name[this->current_state_.lamp.state], + crr_state.lamp.is_changed, + stm::gStmLampStateNo2Name[crr_state.lamp.state], json_out); // "layers": [ @@ -179,9 +193,13 @@ int PolicyManager::checkPolicy(json_object* json_in, json_object** json_out) { // }, json_object* json_layer = json_object_new_array(); json_object* json_tmp = json_object_new_object(); + HMI_DEBUG("wm", "on_screen state (is_changed:%d state:%d:%s)", + crr_state.layer.on_screen.is_changed, + crr_state.layer.on_screen.state, + stm::gStmLayoutNo2Name[crr_state.layer.on_screen.state]); this->addStateToJson("on_screen", - this->current_state_.layer.on_screen.is_changed, - stm::gStmLayoutNo2Name[this->current_state_.layer.on_screen.state], + crr_state.layer.on_screen.is_changed, + stm::gStmLayoutNo2Name[crr_state.layer.on_screen.state], &json_tmp); json_object_array_add(json_layer, json_tmp); @@ -191,10 +209,14 @@ int PolicyManager::checkPolicy(json_object* json_in, json_object** json_out) { // "state": // } // }, + HMI_DEBUG("wm", "restriction state (is_changed:%d state:%d:%s)", + crr_state.layer.restriction.is_changed, + crr_state.layer.restriction.state, + stm::gStmLayoutNo2Name[crr_state.layer.restriction.state]); json_tmp = json_object_new_object(); this->addStateToJson("restriction", - this->current_state_.layer.restriction.is_changed, - stm::gStmLayoutNo2Name[this->current_state_.layer.restriction.state], + crr_state.layer.restriction.is_changed, + stm::gStmLayoutNo2Name[crr_state.layer.restriction.state], &json_tmp); json_object_array_add(json_layer, json_tmp); @@ -204,10 +226,14 @@ int PolicyManager::checkPolicy(json_object* json_in, json_object** json_out) { // "state": // } // }, + HMI_DEBUG("wm", "apps state (is_changed:%d state:%d:%s)", + crr_state.layer.apps.is_changed, + crr_state.layer.apps.state, + stm::gStmLayoutNo2Name[crr_state.layer.apps.state]); json_tmp = json_object_new_object(); this->addStateToJson("apps", - this->current_state_.layer.apps.is_changed, - stm::gStmLayoutNo2Name[this->current_state_.layer.apps.state], + crr_state.layer.apps.is_changed, + stm::gStmLayoutNo2Name[crr_state.layer.apps.state], &json_tmp); json_object_array_add(json_layer, json_tmp); @@ -219,10 +245,14 @@ int PolicyManager::checkPolicy(json_object* json_in, json_object** json_out) { // }, // ] // } + HMI_DEBUG("wm", "homescreen state (is_changed:%d state:%d:%s)", + crr_state.layer.homescreen.is_changed, + crr_state.layer.homescreen.state, + stm::gStmLayoutNo2Name[crr_state.layer.homescreen.state]); json_tmp = json_object_new_object(); this->addStateToJson("homescreen", - this->current_state_.layer.homescreen.is_changed, - stm::gStmLayoutNo2Name[this->current_state_.layer.homescreen.state], + crr_state.layer.homescreen.is_changed, + stm::gStmLayoutNo2Name[crr_state.layer.homescreen.state], &json_tmp); json_object_array_add(json_layer, json_tmp); @@ -254,9 +284,9 @@ int PolicyManager::loadRoleDb() { } // Load role.db - HMI_DEBUG("wm:pm", "file_name:%s", file_name.c_str()); - json_object* json_obj = json_object_from_file(file_name.c_str()); - if (nullptr == json_obj) { + json_object* json_obj; + int ret = this->inputJsonFilie(file_name.c_str(), &json_obj); + if (0 > ret) { HMI_ERROR("wm:pm", "Could not open role.db, so use default role information"); json_obj = json_tokener_parse(kDefaultRoleDb); } @@ -328,6 +358,9 @@ int PolicyManager::loadRoleDb() { return 0; } +// TODO: +// This function will be removed because json_helper has same function. +// json_helper should be library. const char* PolicyManager::getStringFromJson(json_object* obj, const char* key) { if ((nullptr == obj) || (nullptr == key)) { HMI_ERROR("wm:pm", "Argument is nullptr!!!"); @@ -343,19 +376,60 @@ const char* PolicyManager::getStringFromJson(json_object* obj, const char* key) return json_object_get_string(tmp); } -int PolicyManager::getIntFromJson(json_object* obj, const char* key) { - if ((nullptr == obj) || (nullptr == key)) { - HMI_ERROR("wm:pm", "Argument is nullptr!!!"); - return 0; +// TODO: +// This function will be removed because json_helper has same function. +// json_helper should be library. +int PolicyManager::inputJsonFilie(const char* file, json_object** obj) { + const int input_size = 128; + int ret = -1; + + if ((nullptr == file) || (nullptr == obj)) { + HMI_ERROR("wm:jh", "Argument is nullptr!!!"); + return ret; } - json_object* tmp; - if (!json_object_object_get_ex(obj, key, &tmp)) { - HMI_DEBUG("wm:pm", "Not found key \"%s\"", key); - return 0; + HMI_DEBUG("wm:jh", "Input file: %s", file); + + // Open json file + FILE *fp = fopen(file, "rb"); + if (nullptr == fp) { + HMI_ERROR("wm:jh", "Could not open file"); + return ret; + } + + // Parse file data + struct json_tokener *tokener = json_tokener_new(); + enum json_tokener_error json_error; + char buffer[input_size]; + int block_cnt = 1; + while (1) { + size_t len = fread(buffer, sizeof(char), input_size, fp); + *obj = json_tokener_parse_ex(tokener, buffer, len); + if (nullptr != *obj) { + HMI_DEBUG("wm:jh", "File input is success"); + ret = 0; + break; + } + + json_error = json_tokener_get_error(tokener); + if ((json_tokener_continue != json_error) + || (input_size > len)) { + HMI_ERROR("wm:jh", "Failed to parse file (byte:%d err:%s)", + (input_size * block_cnt), json_tokener_error_desc(json_error)); + HMI_ERROR("wm:jh", "\n%s", buffer); + *obj = nullptr; + break; + } + block_cnt++; } - return json_object_get_int(tmp); + // Close json file + fclose(fp); + + // Free json_tokener + json_tokener_free(tokener); + + return ret; } void PolicyManager::addStateToJson(