#include <vconf.h>
#include <system_info.h>
+#include <device/power-internal.h>
/*
* Timeout of 1 second for normal cases, we may have to consider 4 sec for Verizon.
#define MANAGER_DEFAULT_TIMEOUT (5 * 1000)
#define MANAGER_RETRY_TIMEOUT (1 * 1000)
-
-/*
- * Dbus interface info for power off wait timer handling
- */
-#define DEVICED_BUS_NAME "org.tizen.system.deviced"
-#define DEVICED_OBJECT_PATH "/Org/Tizen/System/DeviceD"
-#define DEVICED_INTERFACE_NAME DEVICED_BUS_NAME
-
-#define DEVICED_PATH_POWEROFF DEVICED_OBJECT_PATH"/PowerOff"
-#define DEVICED_INTERFACE_POWEROFF DEVICED_INTERFACE_NAME".PowerOff"
-
-#define DBUS_METHOD_ADD_POWEROFF_WAIT "AddPowerOffWait"
-#define DBUS_METHOD_REMOVE_POWEROFF_WAIT "RemovePowerOffWait"
-#define DBUS_SIGNAL_POWEROFF_STATE "ChangeState"
-
-static void __manager_modem_add_poweroff_wait(ModemPrivateInfo *modem_info);
-
static enum tcore_hook_return on_noti_hook_manager_call_status_idle(Server *server,
CoreObject *source, enum tcore_notification_command command,
unsigned int data_len, void *data, void *user_data)
dbg("done");
}
-static void __manager_modem_poweroff_signal_handler(GDBusConnection *connection,
- const gchar *sender_name, const gchar *object_path,
- const gchar *interface_name, const gchar *signal_name,
- GVariant *parameters, gpointer user_data)
+static void manager_modem_poweroff_handler(const struct device_change_state_info *info, void *user_data)
{
-
ModemPrivateInfo *modem_info = user_data;
TcorePlugin *modem_plugin = NULL;
dbg("enter");
if (G_UNLIKELY(!modem_info))
return;
- if (g_strcmp0(signal_name, DBUS_SIGNAL_POWEROFF_STATE) == 0) {
- modem_plugin = tcore_object_ref_plugin(modem_info->co_modem);
- dbg("poweroff state changed is happened");
- __request_modem_poweroff(modem_plugin);
- }
- dbg("done");
+ modem_info->poweroff_id = info->id;
+ modem_plugin = tcore_object_ref_plugin(modem_info->co_modem);
+ dbg("poweroff state changed is happened");
+ __request_modem_poweroff(modem_plugin);
+
+ dbg("done");
}
-static void __manager_modem_poweroff_subscribe_signal(ModemPrivateInfo *modem_info)
+static void mamager_modem_register_poweroff_handler(ModemPrivateInfo *modem_info)
{
int ret;
char *profile = NULL;
if (profile)
free(profile);
- if (!modem_info->sys_power.conn) {
- GError *error = NULL;
-
- modem_info->sys_power.conn = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error);
- if (modem_info->sys_power.conn == NULL) {
- err("GDBusconnection is NULL: [%s]", error->message);
- g_error_free(error);
- return;
- }
- modem_info->sys_power.set_poweroff_wait = FALSE;
- }
-
- if (!modem_info->sys_power.ca) {
- modem_info->sys_power.ca = g_cancellable_new();
- }
-
- if (modem_info->sys_power.subs_id_power_off) {
- dbg("g_dbus_connection_signal_subscribe() for poweroff_state has been already done.");
- return;
- }
-
- modem_info->sys_power.subs_id_power_off = g_dbus_connection_signal_subscribe(modem_info->sys_power.conn,
- NULL,
- DEVICED_INTERFACE_POWEROFF,
- DBUS_SIGNAL_POWEROFF_STATE,
- DEVICED_PATH_POWEROFF, NULL, G_DBUS_SIGNAL_FLAGS_NONE,
- __manager_modem_poweroff_signal_handler, modem_info, NULL);
-
-
- if (modem_info->sys_power.subs_id_power_off == 0) {
- err("g_dbus_connection_signal_subscribe() is failed.");
- g_object_unref(modem_info->sys_power.conn);
- }
-
- dbg("done");
-
-}
-
-static void __manager_modem_poweroff_unsubscribe_signal(ModemPrivateInfo *modem_info)
-{
- dbg("enter");
-
- if (G_UNLIKELY(!modem_info)) {
- err("Invalid data");
- return;
- }
-
- if (modem_info->sys_power.subs_id_power_off > 0) {
- g_dbus_connection_signal_unsubscribe(modem_info->sys_power.conn, modem_info->sys_power.subs_id_power_off);
- modem_info->sys_power.subs_id_power_off = 0;
- }
-
- if (modem_info->sys_power.ca) {
- g_cancellable_cancel(modem_info->sys_power.ca);
- g_object_unref(modem_info->sys_power.ca);
- }
-
- if (modem_info->sys_power.conn) {
- g_object_unref(modem_info->sys_power.conn);
- modem_info->sys_power.conn = NULL;
- }
-
- modem_info->sys_power.set_poweroff_wait = FALSE;
-
- dbg("done");
-
-}
-
-static void __manager_modem_add_poweroff_wait_cb(GObject *source_object, GAsyncResult *res, gpointer user_data)
-{
- GError *error = NULL;
- GDBusConnection *conn = NULL;
- int result = -1;
- GVariant *dbus_result = NULL;
- ModemPrivateInfo *modem_info = user_data;
-
- dbg("enter");
-
- conn = G_DBUS_CONNECTION(source_object);
- dbus_result = g_dbus_connection_call_finish(conn, res, &error);
- if (error) {
- err("Failed: %s", error->message);
- g_error_free(error);
- } else {
- dbg("PowerOffWait Added Successufully");
- if (modem_info)
- modem_info->sys_power.set_poweroff_wait = TRUE;
- }
-
- if (dbus_result) {
- g_variant_get(dbus_result, "(i)", &result);
- g_variant_unref(dbus_result);
- }
-
- dbg("result : %d", result);
-}
-
-
-static void __manager_modem_add_poweroff_wait(ModemPrivateInfo *modem_info)
-{
- dbg("enter");
-
- if (G_UNLIKELY(!modem_info)) {
- err("Invalid data");
- return;
- }
-
- if (modem_info->sys_power.set_poweroff_wait == TRUE) {
- return;
- }
-
- if (modem_info->sys_power.conn) {
- g_dbus_connection_call(modem_info->sys_power.conn, DEVICED_BUS_NAME,
- DEVICED_PATH_POWEROFF, DEVICED_INTERFACE_POWEROFF, DBUS_METHOD_ADD_POWEROFF_WAIT,
- NULL, NULL, G_DBUS_CALL_FLAGS_NONE,
- MANAGER_DEFAULT_TIMEOUT, modem_info->sys_power.ca,
- __manager_modem_add_poweroff_wait_cb, modem_info);
- }
+ device_power_add_change_state_wait_callback(POWER_STATE_POWEROFF | POWER_STATE_REBOOT, manager_modem_poweroff_handler, modem_info);
dbg("done");
-
- return;
-}
-
-static void __manager_modem_remove_poweroff_wait_cb(GObject *source_object, GAsyncResult *res, gpointer user_data)
-{
- GError *error = NULL;
- GDBusConnection *conn = NULL;
- int result = -1;
- GVariant *dbus_result = NULL;
- ModemPrivateInfo *modem_info = user_data;
-
- dbg("enter");
-
- conn = G_DBUS_CONNECTION(source_object);
- dbus_result = g_dbus_connection_call_finish(conn, res, &error);
- if (error) {
- err("Failed: %s", error->message);
- g_error_free(error);
- } else {
- dbg("PowerOffWait Removed Successufully");
- if (modem_info)
- modem_info->sys_power.set_poweroff_wait = FALSE;
- }
-
- if (dbus_result) {
- g_variant_get(dbus_result, "(i)", &result);
- g_variant_unref(dbus_result);
- }
-
- dbg("result : %d", result);
-}
-
-static void __manager_modem_remove_poweroff_wait(ModemPrivateInfo *modem_info)
-{
- dbg("enter");
-
- if (G_UNLIKELY(!modem_info)) {
- err("Invalid data");
- return;
- }
-
- if (modem_info->sys_power.conn) {
- g_dbus_connection_call(modem_info->sys_power.conn, DEVICED_BUS_NAME,
- DEVICED_PATH_POWEROFF, DEVICED_INTERFACE_POWEROFF, DBUS_METHOD_REMOVE_POWEROFF_WAIT,
- NULL, NULL, G_DBUS_CALL_FLAGS_NONE,
- MANAGER_DEFAULT_TIMEOUT, modem_info->sys_power.ca,
- __manager_modem_remove_poweroff_wait_cb, NULL);
-
- modem_info->sys_power.set_poweroff_wait = FALSE;
- }
-
- return;
}
gboolean manager_modem_initialize_private_info(ModemBoard *mb)
mb->modem_info->co_modem = tcore_plugin_ref_core_object(mb->modem_plugin, CORE_OBJECT_TYPE_MODEM);
mb->modem_info->modem_status = MODEM_STATE_UNKNOWN;
+ /* For executing CP detach process when Device Power off */
+ /* It should be subscribed power off waiting timer to deviced */
+ /* Poweroff timer should be added only one time, in case of modem index (0) */
if (mb->index == MANAGER_MODEM_BOARD_INDEX_0) {
- dbg("__manager_power_subscribe_signal() for modem index (%d)", mb->index);
- __manager_modem_poweroff_subscribe_signal(mb->modem_info);
+ dbg("manager_modem_register_poweroff_handler() for modem index (%d)", mb->index);
+ mamager_modem_register_poweroff_handler(mb->modem_info);
}
dbg("Initialized modem private info");
}
if (mb->index == MANAGER_MODEM_BOARD_INDEX_0) {
- dbg("__manager_power_unsubscribe_signal() for modem index (%d)", mb->index);
- __manager_modem_poweroff_unsubscribe_signal(mb->modem_info);
+ dbg("device_power_remove_change_state_wait_callback() for modem index (%d)", mb->index);
+ device_power_remove_change_state_wait_callback(POWER_STATE_POWEROFF | POWER_STATE_REBOOT);
}
g_free(mb->modem_info);
manager_util_write_to_proc_file(msg, strlen(msg));
g_free(msg);
- /* For executing CP detach process when Device Power off */
- /* It should be subscribed power off waiting timer to deviced */
- /* Poweroff timer should be added only one time, in case of modem index (0) */
- if (mb->index == MANAGER_MODEM_BOARD_INDEX_0) {
- dbg("Should add poweroff timer in case of modem index(0)");
- if (!mb->modem_info->sys_power.set_poweroff_wait) {
- //__manager_power_subscribe_signal(mb->modem_info);
- __manager_modem_add_poweroff_wait(mb->modem_info);
- }
- }
}
break;
if (mb->index == MANAGER_MODEM_BOARD_INDEX_0) {
dbg("Should removed poweroff timer in case of modem index (0)");
- if (mb->modem_info->sys_power.set_poweroff_wait == TRUE) {
- __manager_modem_remove_poweroff_wait(mb->modem_info);
+ if (mb->modem_info->poweroff_id > 0) {
+ device_power_change_state_wait_done(mb->modem_info->poweroff_id);
+ mb->modem_info->poweroff_id = 0;
}
}
}