#include <istream>
#include <json-c/json.h>
#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() :
areaname2no_(),
role2category_(),
category2role_(),
- role2defaultarea_(),
- current_state_()
+ role2defaultarea_()
{
HMI_DEBUG("wm:pm", "Call");
}
}
// 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
}
// 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);
}
// 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
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;
// "state": <const char*>
// },
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": <bool>,
+ // "state": <const char*>
+ // },
+ 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": {
// "state": <const char*>
// },
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": {
// "state": <const char*>
// },
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": [
// },
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);
// "state": <const char*>
// }
// },
+ 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);
// "state": <const char*>
// }
// },
+ 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);
// },
// ]
// }
+ 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);
}
// 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);
}
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!!!");
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(