X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fwifi-firmware.c;h=d9a41f904f879d1ae61f57bd931c785591983ed1;hb=f8dc25aea5d2babe55ff6d3b405928b67bd1f709;hp=621180c3c7c647667b9770d1274bbd08c266427e;hpb=bac43428b002a99c53d84f9e1f2e1026b03b298a;p=platform%2Fcore%2Fconnectivity%2Fnet-config.git diff --git a/src/wifi-firmware.c b/src/wifi-firmware.c index 621180c..d9a41f9 100755 --- a/src/wifi-firmware.c +++ b/src/wifi-firmware.c @@ -1,7 +1,7 @@ /* * Network Configuration Module * - * Copyright (c) 2012-2013 Samsung Electronics Co., Ltd. All rights reserved. + * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,8 +17,10 @@ * */ - #include +#include +#include + #include "log.h" #include "util.h" #include "netdbus.h" @@ -28,79 +30,150 @@ #include "wifi-firmware.h" #include "network-statistics.h" +#define WLAN_DRIVER_SCRIPT "/usr/bin/wlan.sh" +#define WLAN_IFACE_NAME "wlan0" -#define WLAN_P2P_IFACE_NAME "p2p0" +#define WLAN_P2P_IFACE_NAME_TV "p2p0" +#define WLAN_P2P_IFACE_NAME_COMMON "wlan0" +#define WLAN_P2P_IFACE_NAME ((TIZEN_TV) ? (WLAN_P2P_IFACE_NAME_TV) : (WLAN_P2P_IFACE_NAME_COMMON)) static int __netconfig_sta_firmware_start(void) { int rv = 0; + const char *path = WLAN_DRIVER_SCRIPT; + char *const args[] = { "/usr/bin/wlan.sh", "start", NULL }; + char *const envs[] = { NULL }; + + rv = netconfig_execute_file(path, args, envs); + if (rv < 0) + return -EIO; - rv = netconfig_interface_up(WIFI_IFNAME); - if (!rv) + rv = netconfig_interface_up(WLAN_IFACE_NAME); + if (rv != TRUE) return -EIO; - INFO("Successfully loaded wireless device driver"); + DBG("Successfully loaded wireless device driver"); return 0; } static int __netconfig_sta_firmware_stop(void) { - int rv = 0; + const char *path = WLAN_DRIVER_SCRIPT; + char *const args[] = { "/usr/bin/wlan.sh", "stop", NULL }; + char *const envs[] = { NULL }; /* Update statistics before driver remove */ netconfig_wifi_statistics_update_powered_off(); - rv = netconfig_interface_down(WIFI_IFNAME); - if (!rv) + rv = netconfig_interface_down(WLAN_IFACE_NAME); + if (rv != TRUE) + return -EIO; + + rv = netconfig_execute_file(path, args, envs); + if (rv < 0) return -EIO; - INFO("Successfully removed wireless device driver"); + DBG("Successfully removed wireless device driver"); return 0; } - static int __netconfig_p2p_firmware_start(void) { - #if defined TIZEN_P2P_ENABLE int rv = 0; + const char *path = WLAN_DRIVER_SCRIPT; + char *const args[] = { "/usr/bin/wlan.sh", "p2p", NULL }; + char *const envs[] = { NULL }; + + rv = netconfig_execute_file(path, args, envs); + if (rv < 0) + return -EIO; + +#if defined TIZEN_WLAN_USE_P2P_INTERFACE rv = netconfig_interface_up(WLAN_P2P_IFACE_NAME); - if (!rv) + if (rv != TRUE) return -EIO; +#endif - INFO("Successfully up p2p device driver"); - return 0; + DBG("Successfully loaded p2p device driver"); + return 0; #else - INFO("P2P Device is not supported"); return -ENODEV; #endif - } static int __netconfig_p2p_firmware_stop(void) { - #if defined TIZEN_P2P_ENABLE int rv = 0; - rv = netconfig_interface_down(WLAN_P2P_IFACE_NAME); - if (!rv) + const char *path = WLAN_DRIVER_SCRIPT; + char *const args[] = { "/usr/bin/wlan.sh", "stop", NULL }; + char *const envs[] = { NULL }; + + rv = netconfig_interface_down(WLAN_IFACE_NAME); + if (rv != TRUE) + return -EIO; + + rv = netconfig_execute_file(path, args, envs); + if (rv < 0) return -EIO; - INFO("Successfully down p2p device driver"); - return 0; + DBG("Successfully removed p2p device driver"); + return 0; #else - INFO("P2P Device is not supported"); return -ENODEV; #endif +} + +static int __netconfig_softap_firmware_start(void) +{ +#if defined TIZEN_TETHERING_ENABLE + int rv = 0; + const char *path = WLAN_DRIVER_SCRIPT; + char *const args[] = { "/usr/bin/wlan.sh", "softap", NULL }; + char *const envs[] = { NULL }; + rv = netconfig_execute_file(path, args, envs); + if (rv < 0) + return -EIO; + + if (netconfig_interface_up(WLAN_IFACE_NAME) == FALSE) + return -EIO; + + DBG("Successfully loaded softap device driver"); + return 0; +#else + return -ENODEV; +#endif } -static int __netconfig_wifi_firmware_start( - enum netconfig_wifi_firmware type) + +static int __netconfig_softap_firmware_stop(void) { +#if defined TIZEN_TETHERING_ENABLE + int rv = 0; + const char *path = WLAN_DRIVER_SCRIPT; + char *const args[] = { "/usr/bin/wlan.sh", "stop", NULL }; + char *const envs[] = { NULL }; + + rv = netconfig_interface_down(WLAN_IFACE_NAME); + if (rv != TRUE) + return -EIO; - INFO(" %d",type); - if (netconfig_emulator_is_emulated() == TRUE) + rv = netconfig_execute_file(path, args, envs); + if (rv < 0) + return -EIO; + + DBG("Successfully removed softap device driver"); + return 0; +#else + return -ENODEV; +#endif +} + +static int __netconfig_wifi_firmware_start(enum netconfig_wifi_firmware type) +{ + if (emulator_is_emulated() == TRUE) return -EIO; switch (type) { @@ -108,6 +181,8 @@ static int __netconfig_wifi_firmware_start( return __netconfig_sta_firmware_start(); case NETCONFIG_WIFI_P2P: return __netconfig_p2p_firmware_start(); + case NETCONFIG_WIFI_SOFTAP: + return __netconfig_softap_firmware_start(); default: break; } @@ -117,7 +192,7 @@ static int __netconfig_wifi_firmware_start( static int __netconfig_wifi_firmware_stop(enum netconfig_wifi_firmware type) { - if (netconfig_emulator_is_emulated() == TRUE) + if (emulator_is_emulated() == TRUE) return -EIO; switch (type) { @@ -125,6 +200,8 @@ static int __netconfig_wifi_firmware_stop(enum netconfig_wifi_firmware type) return __netconfig_sta_firmware_stop(); case NETCONFIG_WIFI_P2P: return __netconfig_p2p_firmware_stop(); + case NETCONFIG_WIFI_SOFTAP: + return __netconfig_softap_firmware_stop(); default: break; } @@ -145,7 +222,7 @@ int netconfig_wifi_firmware(enum netconfig_wifi_firmware type, gboolean enable) alias = NETCONFIG_WIFI_STA; #endif - INFO("Wi-Fi current firmware %d (type: %d %s)", current_driver, type, + DBG("Wi-Fi current firmware %d (type: %d %s)", current_driver, type, enable == TRUE ? "enable" : "disable"); if (enable == FALSE) { @@ -154,8 +231,7 @@ int netconfig_wifi_firmware(enum netconfig_wifi_firmware type, gboolean enable) } else if (current_driver == alias) { #if defined WLAN_CONCURRENT_MODE - vconf_get_bool(VCONFKEY_TELEPHONY_FLIGHT_MODE, &flight_mode); - + netconfig_vconf_get_bool(VCONFKEY_TELEPHONY_FLIGHT_MODE, &flight_mode); if (flight_mode == 0 && type == NETCONFIG_WIFI_STA && netconfig_is_wifi_direct_on() == TRUE) { netconfig_interface_down(WIFI_IFNAME); @@ -163,9 +239,7 @@ int netconfig_wifi_firmware(enum netconfig_wifi_firmware type, gboolean enable) return -EALREADY; } - if (type == NETCONFIG_WIFI_P2P && - netconfig_wifi_state_get_technology_state() > - NETCONFIG_WIFI_TECH_OFF) { + if (type == NETCONFIG_WIFI_P2P && wifi_state_get_technology_state() > NETCONFIG_WIFI_TECH_OFF) { netconfig_interface_down(WLAN_P2P_IFACE_NAME); return -EALREADY; @@ -202,21 +276,20 @@ int netconfig_wifi_firmware(enum netconfig_wifi_firmware type, gboolean enable) err = __netconfig_wifi_firmware_start(type); if (err < 0) - INFO("Failed to start the Firmware"); + DBG("Failed to execute script file"); else current_driver = alias; return err; } -gboolean netconfig_iface_wifi_start( - NetconfigWifi *wifi, gchar *device, GError **error) +gboolean handle_start(WifiFirmware *firmware, GDBusMethodInvocation *context, const gchar *device) { int err; - g_return_val_if_fail(wifi != NULL, FALSE); + g_return_val_if_fail(firmware != NULL, FALSE); - INFO("Wi-Fi firmware start %s", device != NULL ? device : "null"); + DBG("Wi-Fi firmware start %s", device != NULL ? device : "null"); if (g_strcmp0("p2p", device) == 0) err = netconfig_wifi_firmware(NETCONFIG_WIFI_P2P, TRUE); @@ -227,24 +300,30 @@ gboolean netconfig_iface_wifi_start( if (err < 0) { if (err == -EALREADY) - netconfig_error_already_exists(error); - else - netconfig_error_wifi_driver_failed(error); + netconfig_error_already_exists(context); + else if (g_strcmp0("softap", device) == 0 && err == -EIO && netconfig_is_wifi_direct_on() == FALSE) { + if (netconfig_wifi_firmware(NETCONFIG_WIFI_P2P, FALSE) == 0 && netconfig_wifi_firmware(NETCONFIG_WIFI_SOFTAP, TRUE) == 0) { + wifi_firmware_complete_start(firmware, context); + return TRUE; + } else + netconfig_error_wifi_driver_failed(context); + } else + netconfig_error_wifi_driver_failed(context); return FALSE; } + wifi_firmware_complete_start(firmware, context); return TRUE; } -gboolean netconfig_iface_wifi_stop( - NetconfigWifi *wifi, gchar *device, GError **error) +gboolean handle_stop(WifiFirmware *firmware, GDBusMethodInvocation *context, const gchar *device) { int err; - g_return_val_if_fail(wifi != NULL, FALSE); + g_return_val_if_fail(firmware != NULL, FALSE); - INFO("Wi-Fi firmware stop %s", device != NULL ? device : "null"); + DBG("Wi-Fi firmware stop %s", device != NULL ? device : "null"); if (g_strcmp0("p2p", device) == 0) err = netconfig_wifi_firmware(NETCONFIG_WIFI_P2P, FALSE); @@ -255,12 +334,13 @@ gboolean netconfig_iface_wifi_stop( if (err < 0) { if (err == -EALREADY) - netconfig_error_already_exists(error); + netconfig_error_already_exists(context); else - netconfig_error_wifi_driver_failed(error); + netconfig_error_wifi_driver_failed(context); return FALSE; } + wifi_firmware_complete_stop(firmware, context); return TRUE; }