extern "C" {
#endif
+#include <stdint.h>
#include <glib.h>
#include <gio/gio.h>
*/
int device_power_poweroff(void);
-enum sleep_ready {
- DEVICE_SLEEP_READY,
- DEVICE_WAKEUP_READY = DEVICE_SLEEP_READY,
- DEVICE_SLEEP_NOT_READY,
+enum {
+ POWER_STATE_MIN_INDEX = 4,
+ POWER_STATE_NORMAL_INDEX = POWER_STATE_MIN_INDEX,
+ POWER_STATE_SLEEP_INDEX,
+ POWER_STATE_POWEROFF_INDEX,
+ POWER_STATE_REBOOT_INDEX,
+ POWER_STATE_MAX_INDEX,
};
-enum device_siginfo {
- DEVICE_SIG_SLEEP_SHORTKEY,
- DEVICE_SIG_WAKEUP_SHORTKEY,
- DEVICE_SIG_UNKNOWN,
+#define POWER_STATE_NORMAL (1ULL << POWER_STATE_NORMAL_INDEX)
+#define POWER_STATE_SLEEP (1ULL << POWER_STATE_SLEEP_INDEX)
+#define POWER_STATE_POWEROFF (1ULL << POWER_STATE_POWEROFF_INDEX)
+#define POWER_STATE_REBOOT (1ULL << POWER_STATE_REBOOT_INDEX)
+#define POWER_STATE_ALL ((1ULL << POWER_STATE_MAX_INDEX) - (1ULL << POWER_STATE_MIN_INDEX))
+
+#define SIGNAME_CHANGE_STATE_TO_NORMAL "ChangeStateToNormal"
+#define SIGNAME_CHANGE_STATE_TO_SLEEP "ChangeStateToSleep"
+#define SIGNAME_CHANGE_STATE_TO_POWEROFF "ChangeStateToPowerOff"
+#define SIGNAME_CHANGE_STATE_TO_REBOOT "ChangeStateToReboot"
+
+struct device_change_state_info {
+ uint64_t prev_state;
+ uint64_t next_state;
+ int reason;
};
-/* This callback is invoked when system is going to sleep.
- * There can be only one callbacks per process.
- * Return DEVICE_SLEEP_READY to notify system that I am ready to sleep
- * when siginfo == DEVICE_SIG_SLEEP_SHORTKEY. */
-typedef int (*sleep_callback) (guint64 sig_time_ms, enum device_siginfo siginfo, void *user_data);
+typedef int (*change_state_callback) (const struct device_change_state_info *info, void *user_data);
-/* return DEVICE_ERROR_NONE on success */
-int device_power_add_sleep_callback(sleep_callback cb, void *user_data);
-void device_power_remove_sleep_callback(void);
+int device_power_add_change_state_wait_callback(uint64_t state_bits, change_state_callback cb, void *user_data);
+void device_power_remove_change_state_wait_callback(uint64_t state_bits);
#ifdef __cplusplus
}