display: plugin: Add wrapper functions related to states 51/293351/10
authorYunhee Seo <yuni.seo@samsung.com>
Tue, 23 May 2023 10:29:20 +0000 (19:29 +0900)
committerYunhee Seo <yuni.seo@samsung.com>
Tue, 30 May 2023 11:48:12 +0000 (20:48 +0900)
struct state has functions, timeout value and name for each state.
Remove direct using of struct states and add wrappers.
This is to change the code used directly into a wrapper form to eliminate
dependence and protect struct states data.

Wrapper in this patch is temporary, so it will be changed later.

Change-Id: I1501dab0f3a61810d1ad7e2ebda1cfb54978944a
Signed-off-by: Yunhee Seo <yuni.seo@samsung.com>
plugins/iot-headed/display/core.c
plugins/mobile/display/core.c
plugins/tv/display/core.c
plugins/wearable/display/core.c
plugins/wearable/display/powersaver.c
src/display/display-plugin.c
src/display/display-plugin.h
src/display/plugin-common/display-lock.c
src/display/plugin-common/poll.c

index 902919d..166de68 100644 (file)
@@ -1762,6 +1762,12 @@ static void add_timer_for_dpms_init(void)
                _E("Failed to add display_panel_init_dpms timeout.");
 }
 
+static void init_display_states(void *data)
+{
+       struct display_plugin *dp = (struct display_plugin *) data;
+       for(int i = 0; i < S_END; i++)
+               dp->display_states[i] = &states[i];
+}
 /**
  * Power manager Main
  *
@@ -1773,7 +1779,9 @@ static int display_probe(void *data)
        assert(dp);
 
        dp->config = &display_conf;
+       init_display_states(dp);
        setup_display_plugin_backlight_ops(dp);
+       dp->delete_state_cond = del_state_cond;
 
        /* check display feature */
        if (!is_feature_display_supported())
index 25d6f17..74fb0df 100644 (file)
@@ -1772,6 +1772,12 @@ static void add_timer_for_dpms_init(void)
                _E("Failed to add display_panel_init_dpms timeout.");
 }
 
+static void init_display_states(void *data)
+{
+       struct display_plugin *dp = (struct display_plugin *) data;
+       for(int i = 0; i < S_END; i++)
+               dp->display_states[i] = &states[i];
+}
 /**
  * Power manager Main
  *
@@ -1783,7 +1789,9 @@ static int display_probe(void *data)
        assert(dp);
 
        dp->config = &display_conf;
+       init_display_states(dp);
        setup_display_plugin_backlight_ops(dp);
+       dp->delete_state_cond = del_state_cond;
 
        /**
         * load display service
index 805cb3a..70da82f 100644 (file)
@@ -1762,6 +1762,12 @@ static void add_timer_for_dpms_init(void)
                _E("Failed to add display_panel_init_dpms timeout.");
 }
 
+static void init_display_states(void *data)
+{
+       struct display_plugin *dp = (struct display_plugin *) data;
+       for(int i = 0; i < S_END; i++)
+               dp->display_states[i] = &states[i];
+}
 /**
  * Power manager Main
  *
@@ -1774,7 +1780,9 @@ static int display_probe(void *data)
        assert(dp);
 
        dp->config = &display_conf;
+       init_display_states(dp);
        setup_display_plugin_backlight_ops(dp);
+       dp->delete_state_cond = del_state_cond;
 
        /**
         * load display service
index 510c714..9ba26c9 100644 (file)
@@ -2109,6 +2109,12 @@ static void add_timer_for_dpms_init(void)
                _E("Failed to add display_panel_init_dpms timeout.");
 }
 
+static void init_display_states(void *data)
+{
+       struct display_plugin *dp = (struct display_plugin *) data;
+       for(int i = 0; i < S_END; i++)
+               dp->display_states[i] = &states[i];
+}
 /**
  * Power manager Main
  *
@@ -2120,7 +2126,9 @@ static int display_probe(void *data)
        assert(dp);
 
        dp->config = &display_conf;
+       init_display_states(dp);
        setup_display_plugin_backlight_ops(dp);
+       dp->delete_state_cond = del_state_cond;
 
        /**
         * load display service
index 713e955..18aa2ae 100644 (file)
@@ -57,8 +57,9 @@ static int set_powersaver_mode(int mode)
 
        display_backlight_update_by_default_brightness();
        get_run_timeout(&timeout);
-       state_st(S_NORMAL)->timeout = timeout;
-       state_st(get_pm_cur_state())->trans(EVENT_INPUT);
+
+       display_plugin_state_set_timeout(S_NORMAL, timeout);
+       display_plugin_state_do_default_trans(get_pm_cur_state(), EVENT_INPUT);
 
        return 0;
 }
index 95f8f07..11f6483 100644 (file)
@@ -18,6 +18,7 @@
 
 #include <errno.h>
 #include "display-plugin.h"
+#include "shared/log-macro.h"
 
 struct display_plugin g_display_plugin;
 
@@ -137,3 +138,95 @@ int display_plugin_backlight_transit_brightness(int start, int end, int step)
 
        return -EOPNOTSUPP;
 }
+
+/* FIXME: Below functions are temorary to separtate display state transition functions */
+int display_plugin_state_do_default_trans(enum state_t state, int evt)
+{
+       if (g_display_plugin.display_states[state] && g_display_plugin.display_states[state]->trans)
+               return g_display_plugin.display_states[state]->trans(evt);
+
+       return -EOPNOTSUPP;
+}
+
+bool display_plugin_state_is_there_default_trans(enum state_t state)
+{
+       if (g_display_plugin.display_states[state] && g_display_plugin.display_states[state]->trans)
+               return true;
+
+       return false;
+}
+
+int display_plugin_state_do_default_action(enum state_t state, int timeout)
+{
+       if (g_display_plugin.display_states[state] && g_display_plugin.display_states[state]->action)
+               return g_display_plugin.display_states[state]->action(timeout);
+
+       return -EOPNOTSUPP;
+}
+
+int display_plugin_state_do_default_check(enum state_t state, int curr, int next)
+{
+       if (g_display_plugin.display_states[state] && g_display_plugin.display_states[state]->check)
+               return g_display_plugin.display_states[state]->check(curr, next);
+
+       return -EOPNOTSUPP;
+}
+
+int display_plugin_state_delete_state_cond(void *data, enum state_t s_state)
+{
+       if (g_display_plugin.delete_state_cond) {
+               g_display_plugin.delete_state_cond(data, s_state);
+               return 0;
+       }
+
+       return -EOPNOTSUPP;
+}
+
+int display_plugin_state_get_name(enum state_t state, const char **state_name)
+{
+       if (!state_name)
+               return -EINVAL;
+
+       if (g_display_plugin.display_states[state] && g_display_plugin.display_states[state]->name) {
+               *state_name = g_display_plugin.display_states[state]->name;
+               return 0;
+       }
+
+       return -EOPNOTSUPP;
+}
+
+int display_plugin_state_set_timeout(enum state_t state, int state_timeout)
+{
+       if (g_display_plugin.display_states[state] && g_display_plugin.display_states[state]->timeout) {
+               g_display_plugin.display_states[state]->timeout = state_timeout;
+               return 0;
+       }
+
+       return -EOPNOTSUPP;
+}
+
+int display_plugin_state_get_timeout(enum state_t state, int* state_timeout)
+{
+       if (!state_timeout)
+               return -EINVAL;
+
+       if (g_display_plugin.display_states[state] && g_display_plugin.display_states[state]->timeout) {
+               *state_timeout = g_display_plugin.display_states[state]->timeout;
+               return 0;
+       }
+
+       return -EOPNOTSUPP;
+}
+
+int display_plugin_config_get_timeout_enable(bool *timeout_enable)
+{
+       if (!timeout_enable)
+               return -EINVAL;
+
+       if (g_display_plugin.config) {
+               *timeout_enable = g_display_plugin.config->timeout_enable;
+               return 0;
+       }
+
+       return -EOPNOTSUPP;
+}
\ No newline at end of file
index ba981a9..b98cebb 100644 (file)
@@ -22,6 +22,7 @@
 #include <unistd.h>
 #include <sys/types.h>
 
+#include "core.h"
 #include "display-config.h"
 #include "display-backlight.h"
 #include "shared/devices.h"
@@ -63,9 +64,12 @@ struct display_plugin {
        bool system_wakeup_flag;
        const char* (*device_flags_to_string) (enum device_flags flags);
        int (*auto_brightness_control) (enum brightness_request_e request, int set_brightness);
+       /* FIXME: function names will be redefined */
+       void (*delete_state_cond) (void *data, enum state_t s_state);
 
        struct display_config *config;
        struct display_backlight_ops *backlight;
+       struct state* display_states[S_END];
 };
 extern struct display_plugin g_display_plugin;
 
@@ -86,4 +90,17 @@ int display_plugin_backlight_get_brightness(int *brightness);
 int display_plugin_backlight_transit_state(int state);
 int display_plugin_backlight_transit_brightness(int start, int end, int step);
 
+/* FIXME: function names will be redefined */
+int display_plugin_state_do_default_trans(enum state_t state, int evt);
+bool display_plugin_state_is_there_default_trans(enum state_t state);
+int display_plugin_state_do_default_action(enum state_t state, int timeout);
+int display_plugin_state_do_default_check(enum state_t state, int curr, int next);
+int display_plugin_state_delete_state_cond(void *data, enum state_t s_state);
+int display_plugin_state_get_name(enum state_t state, const char **state_name);
+int display_plugin_state_set_timeout(enum state_t state, int state_timeout);
+int display_plugin_state_get_timeout(enum state_t state, int *state_timeout);
+
+/* FIXME: display config getter/setter is also temporary in this file */
+int display_plugin_config_get_timeout_enable(bool *timeout_enable);
+
 #endif //__DISPLAY_PLUGIN_H__
index 35431c3..d1b0979 100644 (file)
@@ -30,6 +30,7 @@
 #include "display-lock.h"
 #include "display-panel.h"
 #include "display-config.h"
+#include "display-state-transition.h"
 #include "shared/log-macro.h"
 #include "shared/apps.h"
 
@@ -117,12 +118,14 @@ static void broadcast_pmlock_expired(pid_t pid, enum state_t state, const char*
        time_t now;
        double diff;
        int ret;
+       const char* state_name = NULL;
 
        time(&now);
        diff = difftime(now, locktime);
 
+       display_plugin_state_get_name(state, &state_name);
        CRITICAL_LOG("%s(%d) has held %s lock for a long time(%.0f s).",
-                       appid ? appid : "NULL", pid, state_st(state)->name + 2, diff);
+                       appid ? appid : "NULL", pid, state_name + 2, diff);
 
        ret = gdbus_signal_emit(NULL,
                                                DEVICED_PATH_DISPLAY,
@@ -326,8 +329,10 @@ int check_lock_condition(enum state_t state)
        PmLockNode *t = NULL;
        int ret = false;
        pid_t owner = getpid();
+       const char *state_name = NULL;
 
-       _D("check holdkey block : state of %s", state_st(state)->name);
+       display_plugin_state_get_name(state, &state_name);
+       _D("check holdkey block : state of %s", state_name);
 
        SYS_G_LIST_FOREACH(cond_head[state], elem, t) {
                if (t->pid != owner && t->app_background == false) {
@@ -345,8 +350,10 @@ int check_holdkey_block(enum state_t state)
        GList *elem;
        PmLockNode *t = NULL;
        int ret = 0;
+       const char *state_name = NULL;
 
-       _I("Check holdkey block: state of %s", state_st(state)->name);
+       display_plugin_state_get_name(state, &state_name);
+       _I("Check holdkey block: state of %s", state_name);
 
        if (custom_holdkey_block == true) {
                _I("Custom hold key blocked");
@@ -368,8 +375,10 @@ int delete_condition(enum state_t state)
 {
        GList *elem, *next;
        PmLockNode *t = NULL;
+       const char *state_name = NULL;
 
-       _I("delete condition : state of %s", state_st(state)->name);
+       display_plugin_state_get_name(state, &state_name);
+       _I("delete condition : state of %s", state_name);
 
        if (!cond_head[state])
                return 0;
index ab8100a..1fa0b48 100644 (file)
@@ -74,13 +74,6 @@ static enum state_t get_state(int s_bits)
        }
 }
 
-static bool state_supported(enum state_t st)
-{
-       if (state_st(st)->trans)
-               return true;
-       return false;
-}
-
 static int __pm_lock_internal(pid_t pid, int s_bits, int flag, int timeout)
 {
        int cond;
@@ -89,7 +82,7 @@ static int __pm_lock_internal(pid_t pid, int s_bits, int flag, int timeout)
        if (cond < 0)
                return cond;
 
-       if (!state_supported(cond))
+       if (!display_plugin_state_is_there_default_trans(cond))
                return -ENOTSUP;
 
        cond = SET_COND_REQUEST(cond, PM_REQUEST_LOCK);
@@ -118,7 +111,7 @@ static int __pm_unlock_internal(pid_t pid, int s_bits, int flag)
        if (cond < 0)
                return cond;
 
-       if (!state_supported(cond))
+       if (!display_plugin_state_is_there_default_trans(cond))
                return -ENOTSUP;
 
        cond = SET_COND_REQUEST(cond, PM_REQUEST_UNLOCK);
@@ -153,7 +146,7 @@ static int __pm_change_internal(pid_t pid, int s_bits)
                return -ENOTSUP;
        }
 
-       if (!state_supported(cond))
+       if (!display_plugin_state_is_there_default_trans(cond))
                return -ENOTSUP;
 
        cond = SET_COND_REQUEST(cond, PM_REQUEST_CHANGE);