Apply device internal API for handling poweroff 75/275675/1 accepted/tizen_6.5_unified tizen_6.5 accepted/tizen/6.5/unified/20220602.131731 submit/tizen_6.5/20220531.085836
authorYoungjae Cho <y0.cho@samsung.com>
Thu, 19 May 2022 08:10:06 +0000 (17:10 +0900)
committeryoungjae cho <y0.cho@samsung.com>
Mon, 30 May 2022 02:20:46 +0000 (02:20 +0000)
Change-Id: I9e988c63a217e98255b00cb6d2f6754de2459ae1
Signed-off-by: Youngjae Cho <y0.cho@samsung.com>
CMakeLists.txt
include/manager_modem.h
packaging/tel-plugin-manager.spec
src/manager_modem.c

index cf1affe..0f9c094 100644 (file)
@@ -20,6 +20,7 @@ pkg_check_modules(pkgs REQUIRED
        vconf
        openssl1.1
        tfeature
+       capi-system-device
        capi-system-info
 )
 
index f91b868..2f3917a 100644 (file)
@@ -27,18 +27,10 @@ extern "C" {
 
 #include <gio/gio.h>
 
-struct system_power_info {
-       GDBusConnection *conn;
-       GCancellable *ca;
-       guint subs_id_power_off;
-       int state;
-       gboolean set_poweroff_wait;
-};
-
 struct manager_modem_private_info {
        CoreObject *co_modem;
        enum modem_state modem_status;
-       struct system_power_info sys_power;
+       int poweroff_id;
 };
 
 gboolean manager_modem_initialize_private_info(ModemBoard *mb);
index f6b7aa3..5c2d76d 100644 (file)
@@ -20,6 +20,7 @@ BuildRequires:  pkgconfig(openssl1.1)
 BuildRequires:  pkgconfig(tfeature)
 BuildRequires:  pkgconfig(cynara-client)
 BuildRequires:  pkgconfig(cynara-session)
+BuildRequires:  pkgconfig(capi-system-device)
 BuildRequires:  pkgconfig(capi-system-info)
 
 Requires(post): /sbin/ldconfig
index 985d02c..29edd52 100644 (file)
@@ -41,6 +41,7 @@
 
 #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)
@@ -261,12 +245,8 @@ static void __request_modem_poweroff(TcorePlugin *modem_plugin)
        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");
@@ -274,16 +254,16 @@ static void __manager_modem_poweroff_signal_handler(GDBusConnection *connection,
        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;
@@ -313,179 +293,9 @@ static void __manager_modem_poweroff_subscribe_signal(ModemPrivateInfo *modem_in
        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)
@@ -504,9 +314,12 @@ 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");
@@ -524,8 +337,8 @@ void manager_modem_clear_private_info(ModemBoard *mb)
        }
 
        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);
@@ -571,16 +384,6 @@ enum tcore_manager_return manager_modem_process_notification(Manager *manager,
                        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;
 
@@ -593,8 +396,9 @@ enum tcore_manager_return manager_modem_process_notification(Manager *manager,
                        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;
                                }
                        }
                }