Check already powered during Wi-Fi enable/disable
[framework/connectivity/net-config.git] / src / wifi-power.c
index 6eb0fea..15ac07c 100644 (file)
 static gboolean power_in_progress = FALSE;
 static gboolean fm_waiting = FALSE;
 
-static gboolean __netconfig_wifi_enable_technology(void)
+static void __netconfig_wifi_technology_reply(DBusPendingCall *call, void *data)
 {
-       DBusMessage *reply = NULL;
-       char param1[] = "string:Powered";
-       char param2[] = "variant:boolean:true";
-       char *param_array[] = {NULL, NULL, NULL};
+       DBusMessage *message;
 
-       param_array[0] = param1;
-       param_array[1] = param2;
+       message = dbus_pending_call_steal_reply(call);
 
-       reply = netconfig_invoke_dbus_method(CONNMAN_SERVICE, CONNMAN_WIFI_TECHNOLOGY_PREFIX,
-                       CONNMAN_TECHNOLOGY_INTERFACE, "SetProperty", param_array);
+       if (dbus_message_get_type(message) == DBUS_MESSAGE_TYPE_ERROR) {
+               ERR("%s", dbus_message_get_error_name(message));
 
-       if (reply == NULL) {
-               ERR("Error! Request failed");
-               return FALSE;
+               if (dbus_message_is_error(message,
+                               CONNMAN_ERROR_INTERFACE ".AlreadyEnabled") == TRUE) {
+                       netconfig_wifi_update_power_state(TRUE);
+                       power_in_progress = FALSE;
+               } else if (dbus_message_is_error(message,
+                               CONNMAN_ERROR_INTERFACE ".AlreadyDisabled") == TRUE) {
+                       netconfig_wifi_update_power_state(FALSE);
+                       power_in_progress = FALSE;
+               }
+       } else {
+               DBG("Successfully requested");
        }
 
-       dbus_message_unref(reply);
+       dbus_message_unref(message);
+       dbus_pending_call_unref(call);
+}
 
-       return TRUE;
+static gboolean __netconfig_wifi_enable_technology(void)
+{
+       gboolean reply = FALSE;
+       char param0[] = "string:Powered";
+       char param1[] = "variant:boolean:true";
+       char *param_array[] = { NULL, NULL, NULL };
+
+       param_array[0] = param0;
+       param_array[1] = param1;
+
+       reply = netconfig_invoke_dbus_method_nonblock(CONNMAN_SERVICE,
+                       CONNMAN_WIFI_TECHNOLOGY_PREFIX, CONNMAN_TECHNOLOGY_INTERFACE,
+                       "SetProperty", param_array, __netconfig_wifi_technology_reply);
+
+       if (reply != TRUE)
+               ERR("Fail to enable Wi-Fi");
+
+       return reply;
 }
 
 static gboolean __netconfig_wifi_disable_technology(void)
 {
-       DBusMessage *reply = NULL;
-       char param1[] = "string:Powered";
-       char param2[] = "variant:boolean:false";
-       char *param_array[] = {NULL, NULL, NULL};
+       gboolean reply = FALSE;
+       char param0[] = "string:Powered";
+       char param1[] = "variant:boolean:false";
+       char *param_array[] = { NULL, NULL, NULL };
 
-       param_array[0] = param1;
-       param_array[1] = param2;
+       param_array[0] = param0;
+       param_array[1] = param1;
 
-       reply = netconfig_invoke_dbus_method(CONNMAN_SERVICE, CONNMAN_WIFI_TECHNOLOGY_PREFIX,
-                       CONNMAN_TECHNOLOGY_INTERFACE, "SetProperty", param_array);
+       reply = netconfig_invoke_dbus_method_nonblock(CONNMAN_SERVICE,
+                       CONNMAN_WIFI_TECHNOLOGY_PREFIX, CONNMAN_TECHNOLOGY_INTERFACE,
+                       "SetProperty", param_array, __netconfig_wifi_technology_reply);
 
-       if (reply == NULL) {
-               ERR("Error! Request failed");
-               return FALSE;
-       }
+       if (reply != TRUE)
+               ERR("Fail to disable Wi-Fi");
 
-       dbus_message_unref(reply);
-
-       return TRUE;
+       return reply;
 }
 
 static gboolean __netconfig_wifi_load_driver(void)