From 20bd11952c132c89cb923baedc01cb8d53de08a1 Mon Sep 17 00:00:00 2001 From: Junkyeong Kim Date: Wed, 8 Jan 2020 16:10:39 +0900 Subject: [PATCH] e_dpms: send dpms set request result event with no missing send dpms event by each request but do not guarantee sequence. set result success: send E_DPMS_MANAGER_ERROR_NONE event. set result fail: send E_DPMS_MANAGER_ERROR_INVALID_PERMISSION event if dpms set fail. send E_DPMS_MANAGER_ERROR_ALREADY_DONE event if do dpms set with same mode value. Change-Id: Icd4c0ab21f53bc74341a4cc6588f21e6f6938b27 Signed-off-by: Junkyeong Kim --- src/bin/e_dpms.c | 61 +++++++++++++++++++++++++++++++++++------------- 1 file changed, 45 insertions(+), 16 deletions(-) diff --git a/src/bin/e_dpms.c b/src/bin/e_dpms.c index 5cc055b8ac..7c7f9c4dd1 100644 --- a/src/bin/e_dpms.c +++ b/src/bin/e_dpms.c @@ -44,6 +44,7 @@ typedef struct _E_Dpms E_Output *e_output; E_Output_Hook *dpms_change_hook; E_Dpms_Mode mode; + int request_count; } E_Dpms; static Eldbus_Message * @@ -185,8 +186,6 @@ _e_dpms_delay(void *data) dpms = (E_Dpms *)data; - delay_timer = NULL; - e_output_dpms = e_output_dpms_get(dpms->e_output); if (e_output_dpms != dpms->mode) { @@ -195,10 +194,20 @@ _e_dpms_delay(void *data) dpms->mode = e_output_dpms; } - tizen_dpms_manager_send_set_state(gresource, dpms->mode, E_DPMS_MANAGER_ERROR_NONE); - INF("DPMS:tizen_dpms_manager send set event by timer(res:%p, output:%p, dpms:%d)", gresource, dpms->e_output, dpms->mode); + if (dpms->request_count != 0) + { + tizen_dpms_manager_send_set_state(gresource, dpms->mode, E_DPMS_MANAGER_ERROR_NONE); + INF("DPMS:tizen_dpms_manager send set event by timer(res:%p, output:%p, dpms:%d)", gresource, dpms->e_output, dpms->mode); + dpms->request_count--; + } - return ECORE_CALLBACK_CANCEL; + if (dpms->request_count == 0) + { + delay_timer = NULL; + return ECORE_CALLBACK_CANCEL; + } + else + return ECORE_CALLBACK_RENEW; } static void @@ -214,12 +223,20 @@ _e_tizen_dpms_cb_output_dpms_change(void *data, E_Output *output) e_output_dpms = e_output_dpms_get(output); - if (delay_timer) - ecore_timer_del(delay_timer); - delay_timer = NULL; - INF("DPMS:tizen_dpms_manager set dpms async cb(res:%p, output:%p, dpms:%d)", - gresource, dpms->e_output, e_output_dpms); - tizen_dpms_manager_send_set_state(gresource, e_output_dpms, E_DPMS_MANAGER_ERROR_NONE); + if (dpms->request_count != 0) + { + INF("DPMS:tizen_dpms_manager set dpms async cb(res:%p, output:%p, dpms:%d)", + gresource, dpms->e_output, e_output_dpms); + tizen_dpms_manager_send_set_state(gresource, e_output_dpms, E_DPMS_MANAGER_ERROR_NONE); + dpms->request_count--; + } + + if (dpms->request_count == 0) + { + if (delay_timer) + ecore_timer_del(delay_timer); + delay_timer = NULL; + } } static E_Dpms * @@ -309,13 +326,25 @@ _e_tizen_dpms_manager_cb_set_dpms(struct wl_client *client, struct wl_resource * ret = e_output_dpms_set(dpms->e_output, mode); if (ret) - INF("DPMS:tizen_dpms_manager set dpms(res:%p, output:%p, dpms:%d, %d)", resource, dpms->e_output, mode, dpms->mode); + { + INF("DPMS:tizen_dpms_manager set dpms(res:%p, output:%p, dpms:%d, %d)", resource, dpms->e_output, mode, dpms->mode); + dpms->request_count++; + } else { - ERR("DPMS:tizen_dpms_manager set dpms fail(res:%p, output:%p, dpms=%d)", resource, dpms->e_output, mode); - ecore_timer_del(delay_timer); - delay_timer = NULL; - tizen_dpms_manager_send_set_state(resource, dpms->mode, E_DPMS_MANAGER_ERROR_INVALID_PERMISSION); + if (e_output_dpms_get(dpms->e_output) == dpms) + tizen_dpms_manager_send_set_state(resource, dpms->mode, E_DPMS_MANAGER_ERROR_ALREADY_DONE); + else + tizen_dpms_manager_send_set_state(resource, dpms->mode, E_DPMS_MANAGER_ERROR_INVALID_PERMISSION); + + ERR("DPMS:tizen_dpms_manager set dpms fail(res:%p, output:%p, dpms:%d, %d)", + resource, dpms->e_output, mode, dpms->mode); + + if (dpms->request_count == 0) + { + ecore_timer_del(delay_timer); + delay_timer = NULL; + } } } -- 2.34.1