/*
* 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.
*
*/
-
#include <errno.h>
+#include <vconf.h>
+#include <vconf-keys.h>
+
#include "log.h"
#include "util.h"
#include "netdbus.h"
#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) {
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;
}
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) {
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;
}
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) {
} 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);
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;
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);
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);
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;
}