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>
_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
*
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())
_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
*
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
_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
*
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
_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
*
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
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;
}
#include <errno.h>
#include "display-plugin.h"
+#include "shared/log-macro.h"
struct display_plugin g_display_plugin;
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
#include <unistd.h>
#include <sys/types.h>
+#include "core.h"
#include "display-config.h"
#include "display-backlight.h"
#include "shared/devices.h"
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;
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__
#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"
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,
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) {
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");
{
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;
}
}
-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;
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);
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);
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);