void (*exit) (void *data);
int (*start) (void);
int (*stop) (void);
+ int (*status) (void);
+};
+
+enum device_ops_status {
+ DEVICE_OPS_STATUS_UNINIT,
+ DEVICE_OPS_STATUS_START,
+ DEVICE_OPS_STATUS_STOP,
+ DEVICE_OPS_STATUS_MAX,
};
void devices_init(void *data);
return -EINVAL;
}
+static inline int device_get_status(struct device_ops *dev)
+{
+ if (dev && dev->status)
+ return dev->status();
+
+ return -EINVAL;
+}
+
extern const struct device_ops edbus_device_ops;
extern const struct device_ops display_device_ops;
extern const struct device_ops sysnoti_device_ops;
static void reset_timeout(int timeout);
static int get_lcd_timeout_from_settings();
+static enum device_ops_status status = DEVICE_OPS_STATUS_UNINIT;
+
int pm_cur_state;
int pm_old_state;
Ecore_Timer *timeout_src_id;
int lock_state = -1;
struct itimerval val;
+ if (status != DEVICE_OPS_STATUS_START) {
+ LOGERR("display is not started!");
+ return -EINVAL;
+ }
+
if (pm_cur_state != pm_old_state && pm_cur_state != S_SLEEP) {
set_setting_pmstate(pm_cur_state);
device_notify(DEVICE_NOTIFIER_LCD, pm_cur_state);
* Power manager Main
*
*/
-static void start_pm_main(void *data)
+static void display_init(void *data)
{
int ret, i;
unsigned int flags = (WITHOUT_STARTNOTI | FLAG_X_DPMS);
}
start_battinfo_gathering(30);
}
+ status = DEVICE_OPS_STATUS_START;
}
-static void end_pm_main(void *data)
+static void display_exit(void *data)
{
int i;
+ status = DEVICE_OPS_STATUS_STOP;
end_battinfo_gathering();
for (i = i - 1; i >= INIT_SETTING; i--) {
LOGINFO("Stop power manager");
}
+static int display_status(void)
+{
+ return status;
+}
+
const struct device_ops display_device_ops = {
- .init = start_pm_main,
- .exit = end_pm_main,
+ .init = display_init,
+ .exit = display_exit,
+ .status = display_status,
};
/**
#include "util.h"
#include "core.h"
#include "poll.h"
+#include "core/devices.h"
#define SHIFT_UNLOCK 4
#define SHIFT_UNLOCK_PARAMETER 12
int ret;
int clilen = sizeof(clientaddr);
+ if (device_get_status(&display_device_ops) != DEVICE_OPS_STATUS_START) {
+ LOGERR("display is not started!");
+ return EINA_FALSE;
+ }
+
if (g_pm_callback == NULL) {
return EINA_FALSE;
}
{
int ret;
+ display_device_ops.exit(NULL);
system("/usr/lib/system-server/shutdown.sh &");
sync();
heynoti_publish(POWEROFF_NOTI_NAME);
pm_change_internal(getpid(), LCD_NORMAL);
+ display_device_ops.exit(NULL);
system("/etc/rc.d/rc.shutdown &");
sync();