#include <vconf-keys.h>
#include <sys/time.h>
#include <libsyscommon/list.h>
+#include <libsyscommon/resource-manager.h>
+#include <system/syscommon-plugin-deviced-common-interface.h>
+#include <system/syscommon-plugin-deviced-display-interface.h>
#include <device/display-internal.h>
#include <hal/device/hal-device-power.h>
#include "lock-detector.h"
#include "display-ops.h"
#include "device-interface.h"
-#include "display-panel.h"
#include "display-config.h"
#include "display-state-transition.h"
if (flags & NORMAL_MODE) {
if (flags & LCD_PANEL_OFF_MODE)
/* standby on */
- display_panel_set_panel_state_by_standby_state(true);
+ syscommon_resman_set_resource_attr_int(SYSCOMMON_RESOURCE_ID(DEVICED_RESOURCE_TYPE_DISPLAY),
+ DEVICED_DISPLAY_ATTR_INT_DPMS_STATE, DEVICED_DPMS_STANDBY);
else
/* normal lcd on */
- display_panel_set_panel_state_by_on_state(flags);
+ syscommon_resman_set_resource_attr_int(SYSCOMMON_RESOURCE_ID(DEVICED_RESOURCE_TYPE_DISPLAY),
+ DEVICED_DISPLAY_ATTR_INT_DPMS_STATE, DEVICED_DPMS_ON);
return 0;
}
static int display_stop(enum device_flags flags)
{
/* NORMAL MODE */
- if (flags & NORMAL_MODE || flags & FORCE_OFF_MODE) {
- display_panel_set_panel_state_by_off_state(flags);
+ if (flags & NORMAL_MODE) {
+ syscommon_resman_set_resource_attr_int(SYSCOMMON_RESOURCE_ID(DEVICED_RESOURCE_TYPE_DISPLAY),
+ DEVICED_DISPLAY_ATTR_INT_DPMS_STATE, DEVICED_DPMS_OFF);
+ return 0;
+ } else if (flags & FORCE_OFF_MODE) {
+ syscommon_resman_set_resource_attr_int(SYSCOMMON_RESOURCE_ID(DEVICED_RESOURCE_TYPE_DISPLAY),
+ DEVICED_DISPLAY_ATTR_INT_DPMS_STATE, DEVICED_DPMS_FORCE_OFF);
return 0;
}
#include "poll.h"
#include "device-interface.h"
#include "display-actor.h"
-#include "display-panel.h"
#include "display-backlight.h"
#include "display-ops.h"
#include "display-config.h"
static inline bool switch_on_lcd(enum device_flags flags)
{
+ int dpms_state;
+ int ret;
+ enum deviced_event reason;
+
if (current_state_in_on())
return false;
- if (display_panel_get_dpms_cached_state() == DPMS_ON)
+ ret = syscommon_resman_get_resource_attr_int(SYSCOMMON_RESOURCE_ID(DEVICED_RESOURCE_TYPE_DISPLAY),
+ DEVICED_DISPLAY_ATTR_INT_DPMS_STATE, &dpms_state);
+ if (ret == 0 && dpms_state == DEVICED_DPMS_ON)
return false;
- if (flags & LCD_ON_BY_POWER_KEY)
+ if (flags & LCD_ON_BY_POWER_KEY) {
broadcast_lcdon_by_powerkey();
- else if (flags & LCD_ON_BY_TOUCH)
+ reason = DEVICED_EVENT_INPUT_POWERKEY;
+ } else if (flags & LCD_ON_BY_TOUCH) {
_I("Display on by Touch_wakeup event");
+ reason = DEVICED_EVENT_TOUCHSCREEN;
+ } else {
+ reason = DEVICED_EVENT_UNKNOWN;
+ }
- display_panel_lcd_on_direct(flags);
+ syscommon_resman_set_resource_attr_uint64_2(SYSCOMMON_RESOURCE_ID(DEVICED_RESOURCE_TYPE_DISPLAY),
+ DEVICED_DISPLAY_ATTR_TUPLE2_SET_DISPLAY_DIRECT, DEVICED_DPMS_ON, reason);
return true;
}
static inline void switch_off_lcd(void)
{
+ int dpms_state;
+ int ret;
+
if (!current_state_in_on())
return;
- if (display_panel_get_dpms_cached_state() == DPMS_OFF)
+ ret = syscommon_resman_get_resource_attr_int(SYSCOMMON_RESOURCE_ID(DEVICED_RESOURCE_TYPE_DISPLAY),
+ DEVICED_DISPLAY_ATTR_INT_DPMS_STATE, &dpms_state);
+ if (ret == 0 && dpms_state == DEVICED_DPMS_OFF)
return;
broadcast_lcdoff_by_powerkey();
- display_panel_lcd_off_procedure(LCD_OFF_BY_POWER_KEY);
+ syscommon_resman_set_resource_attr_uint64_2(SYSCOMMON_RESOURCE_ID(DEVICED_RESOURCE_TYPE_DISPLAY),
+ DEVICED_DISPLAY_ATTR_TUPLE2_SET_DISPLAY_DIRECT, DEVICED_DPMS_OFF, DEVICED_EVENT_INPUT_POWERKEY);
}
static void check_key_combination(struct input_event *pinput)
static int decide_lcdoff(void)
{
+ int dpms_state;
+ int ret;
+
+ ret = syscommon_resman_get_resource_attr_int(SYSCOMMON_RESOURCE_ID(DEVICED_RESOURCE_TYPE_DISPLAY),
+ DEVICED_DISPLAY_ATTR_INT_DPMS_STATE, &dpms_state);
+
+ if (ret < 0)
+ return false;
+
/* It's not needed if it's already LCD off state */
- if (!current_state_in_on() &&
- display_panel_get_dpms_cached_state() != DPMS_ON)
+ if (!current_state_in_on() && dpms_state != DPMS_ON)
return false;
/*
#ifndef __DISPLAY_DPMS_H__
#define __DISPLAY_DPMS_H__
+/**
+ * FIXME: Need to replace it with libsyscommon one, enum deviced_dpms_state.
+ */
enum dpms_state {
DPMS_ON, /* In use */
DPMS_STANDBY, /* Blanked, low power */
bool b;
} resource_attr_data_t;
+static int set_display_attr_data(int resource_id,
+ const struct syscommon_resman_resource_attribute *attr,
+ const void *data, int count)
+{
+ if (!data)
+ return -EINVAL;
+
+ switch (attr->id) {
+ case DEVICED_DISPLAY_ATTR_INT_DPMS_STATE:
+ {
+ enum deviced_dpms_state state = *(enum deviced_dpms_state *) data;
+
+ switch (state) {
+ case DEVICED_DPMS_ON:
+ return display_panel_set_panel_state_by_on_state(0);
+ case DEVICED_DPMS_STANDBY:
+ return display_panel_set_panel_state_by_standby_state(1);
+ case DEVICED_DPMS_OFF:
+ return display_panel_set_panel_state_by_off_state(0);
+ case DEVICED_DPMS_FORCE_OFF:
+ return display_panel_set_panel_state_by_off_state(FORCE_OFF_MODE);
+ default:
+ return 0;
+ }
+ }
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
static int set_tuple2_display_attr_data(int resource_id,
const struct syscommon_resman_resource_attribute *attr,
const void *data1, const void *data2, int count1, int count2)
else
return display_state_transition_do_state_transition(state, EVENT_INPUT);
}
+ case DEVICED_DISPLAY_ATTR_TUPLE2_SET_DISPLAY_DIRECT:
+ {
+ enum deviced_dpms_state state = *(enum deviced_dpms_state *) data1;
+ enum deviced_event reason = *(enum deviced_event *) data2;
+ int flag;
+
+ switch (reason) {
+ case DEVICED_EVENT_INPUT_POWERKEY:
+ flag = LCD_ON_BY_POWER_KEY;
+ break;
+ case DEVICED_EVENT_TOUCHSCREEN:
+ flag = LCD_ON_BY_TOUCH;
+ break;
+ default:
+ flag = 0;
+ break;
+ }
+
+ if (state == DEVICED_DPMS_OFF)
+ display_panel_lcd_off_procedure(flag);
+ else if (state == DEVICED_DPMS_ON)
+ display_panel_lcd_on_direct(flag);
+ return 0;
+ }
+ break;
default:
return -EINVAL;
}
case DEVICED_DISPLAY_ATTR_INT_GET_CURRENT_STATE:
ret = display_state_get_current((enum deviced_display_state *) &attr_data.i32);
break;
+ case DEVICED_DISPLAY_ATTR_INT_DPMS_STATE:
+ attr_data.i32 = display_panel_get_dpms_cached_state();
+ break;
default:
ret = -EINVAL;
break;
.set_2_tuple = set_tuple2_display_attr_data,
.is_supported = syscommon_resman_resource_attr_supported_always,
},
+ }, {
+ .name = "DEVICED_DISPLAY_ATTR_INT_DPMS_STATE",
+ .id = DEVICED_DISPLAY_ATTR_INT_DPMS_STATE,
+ .type = SYSCOMMON_RESMAN_DATA_TYPE_INT,
+ .flag = SYSCOMMON_RESMAN_RESOURCE_FLAG_PUBLIC,
+ .ops = {
+ .set = set_display_attr_data,
+ .get = get_display_attr_data,
+ .is_supported = syscommon_resman_resource_attr_supported_always,
+ },
+ }, {
+ .name = "DEVICED_DISPLAY_ATTR_TUPLE2_SET_DISPLAY_DIRECT",
+ .id = DEVICED_DISPLAY_ATTR_TUPLE2_SET_DISPLAY_DIRECT,
+ .type = SYSCOMMON_RESMAN_DATA_TYPE_UINT64_UINT64,
+ .flag = SYSCOMMON_RESMAN_RESOURCE_FLAG_PUBLIC,
+ .ops = {
+ .set_2_tuple = set_tuple2_display_attr_data,
+ .is_supported = syscommon_resman_resource_attr_supported_always,
+ },
}
};