+ json_object_object_add(*json_out, "layers", json_layer);
+}
+
+static int checkPolicyEntry(int event, uint64_t delay_ms, std::string role);
+static int checkPolicy(sd_event_source *source, void *data) {
+ HMI_DEBUG("wm:pm", "Call");
+ HMI_DEBUG("wm:pm", ">>>>>>>>>> START CHECK POLICY");
+
+ int event_data = *((int*)data);
+
+ int event_no, category_no, area_no;
+ event_no = (event_data & STM_MSK_EVT_NO) - 1;
+ category_no = ((event_data & STM_MSK_CTG_NO) >> 8) - 1;
+ area_no = ((event_data & STM_MSK_ARA_NO) >> 16) - 1;
+ HMI_DEBUG("wm:pm", ">>>>>>>>>> event:%s category:%s area:%s",
+ stm::gStmEventName[event_no],
+ stm::gStmCategoryName[category_no],
+ stm::gStmAreaName[area_no]);
+
+ // Transition state
+ stm::stm_state_t crr_state;
+ int ret = stm::stmTransitionState(event_data, &crr_state);
+ if (0 > ret) {
+ HMI_ERROR("wm:pm", "Failed transition state");
+ if (nullptr != pm::callback.onError) {
+ json_object* json_out = json_object_new_object();
+ json_object_object_add(json_out, "message",
+ json_object_new_string("Failed to transition state"));
+ json_object_object_add(json_out, "event",
+ json_object_new_string(stm::gStmEventName[event_no]));
+ json_object_object_add(json_out, "role",
+ json_object_new_string(pm::g_req_role_list[event_data].c_str()));
+ json_object_object_add(json_out, "area",
+ json_object_new_string(stm::gStmAreaName[area_no]));
+ pm::callback.onError(json_out);
+ json_object_put(json_out);
+ }
+ return -1;
+ }
+
+ HMI_DEBUG("wm:pm", "parking brake state (is_changed:%d state:%d:%s)",
+ crr_state.parking_brake.is_changed,
+ crr_state.parking_brake.state,
+ stm::gStmParkingBrakeStateNo2Name[crr_state.parking_brake.state]);
+ HMI_DEBUG("wm:pm", "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]);
+ HMI_DEBUG("wm:pm", "lightstatus brake state (is_changed:%d state:%d:%s)",
+ crr_state.lightstatus_brake.is_changed,
+ crr_state.lightstatus_brake.state,
+ stm::gStmLightstatusBrakeStateNo2Name[crr_state.lightstatus_brake.state]);
+ HMI_DEBUG("wm:pm", "car state (is_changed:%d state:%d:%s)",
+ crr_state.car.is_changed,
+ crr_state.car.state,
+ stm::gStmCarStateNo2Name[crr_state.car.state]);
+ HMI_DEBUG("wm:pm", "lamp state (is_changed:%d state:%d:%s)",
+ crr_state.lamp.is_changed,
+ crr_state.lamp.state,
+ stm::gStmLampStateNo2Name[crr_state.lamp.state]);
+ HMI_DEBUG("wm:pm", "restriction mode state (is_changed:%d state:%d:%s)",
+ crr_state.restriction_mode.is_changed,
+ crr_state.restriction_mode.state,
+ stm::gStmRestrictionModeStateNo2Name[crr_state.restriction_mode.state]);
+ HMI_DEBUG("wm:pm", "homescreen state (is_changed:%d state:%d:%s)",
+ crr_state.layer[stm::gStmLayerNoHomescreen].is_changed,
+ crr_state.layer[stm::gStmLayerNoHomescreen].state,
+ stm::gStmLayoutNo2Name[crr_state.layer[stm::gStmLayerNoHomescreen].state]);
+ HMI_DEBUG("wm:pm", "apps state (is_changed:%d state:%d:%s)",
+ crr_state.layer[stm::gStmLayerNoApps].is_changed,
+ crr_state.layer[stm::gStmLayerNoApps].state,
+ stm::gStmLayoutNo2Name[crr_state.layer[stm::gStmLayerNoApps].state]);
+ HMI_DEBUG("wm:pm", "restriction state (is_changed:%d state:%d:%s)",
+ crr_state.layer[stm::gStmLayerNoRestriction].is_changed,
+ crr_state.layer[stm::gStmLayerNoRestriction].state,
+ stm::gStmLayoutNo2Name[crr_state.layer[stm::gStmLayerNoRestriction].state]);
+ HMI_DEBUG("wm:pm", "on_screen state (is_changed:%d state:%d:%s)",
+ crr_state.layer[stm::gStmLayerNoOnScreen].is_changed,
+ crr_state.layer[stm::gStmLayerNoOnScreen].state,
+ stm::gStmLayoutNo2Name[crr_state.layer[stm::gStmLayerNoOnScreen].state]);
+
+ // Update state which is managed by PolicyManager
+ updateLocalState(event_data, crr_state);
+
+ // Create output information for ResourceManager
+ json_object* json_out = json_object_new_object();
+ createOutputInformation(crr_state, &json_out);