diff --git a/Makefile.common b/Makefile.common
index ccf5cecbef..e6fbe9e152 100644
--- a/Makefile.common
+++ b/Makefile.common
@@ -783,12 +783,14 @@ ifeq ($(HAVE_BLUETOOTH), 1)
endif
ifeq ($(HAVE_LAKKA), 1)
- OBJ += wifi/drivers/connmanctl.o
+ OBJ += network/drivers_wifi/connmanctl.o
OBJ += misc/cpufreq/cpufreq.o
endif
ifeq ($(HAVE_WIFI), 1)
- OBJ += wifi/drivers/nmcli.o
+ OBJ += network/wifi_driver.o
+ OBJ += tasks/task_wifi.o
+ OBJ += network/drivers_wifi/nmcli.o
DEFINES += -DHAVE_WIFI
endif
@@ -2084,8 +2086,7 @@ ifeq ($(HAVE_NETWORKING), 1)
tasks/task_netplay_lan_scan.o \
tasks/task_netplay_nat_traversal.o \
tasks/task_bluetooth.o \
- tasks/task_wifi.o \
- tasks/task_pl_thumbnail_download.o \
+ tasks/task_pl_thumbnail_download.o \
tasks/task_netplay_find_content.o
ifeq ($(HAVE_MENU_COMMON), 1)
diff --git a/driver.c b/driver.c
index 54d7e702ce..37cb7d36c8 100644
--- a/driver.c
+++ b/driver.c
@@ -27,7 +27,11 @@
#include "verbosity.h"
#include "bluetooth/bluetooth_driver.h"
-#include "wifi/wifi_driver.h"
+#ifdef HAVE_NETWORKING
+#ifdef HAVE_WIFI
+#include "network/wifi_driver.h"
+#endif
+#endif
#include "led/led_driver.h"
#include "midi_driver.h"
#include "gfx/video_driver.h"
@@ -68,33 +72,6 @@ const bluetooth_driver_t *bluetooth_drivers[] = {
NULL,
};
-wifi_driver_t wifi_null = {
- NULL, /* init */
- NULL, /* free */
- NULL, /* start */
- NULL, /* stop */
- NULL, /* enable */
- NULL, /* connection_info */
- NULL, /* scan */
- NULL, /* get_ssids */
- NULL, /* ssid_is_online */
- NULL, /* connect_ssid */
- NULL, /* disconnect_ssid */
- NULL, /* tether_start_stop */
- "null",
-};
-
-const wifi_driver_t *wifi_drivers[] = {
-#ifdef HAVE_LAKKA
- &wifi_connmanctl,
-#endif
-#ifdef HAVE_WIFI
- &wifi_nmcli,
-#endif
- &wifi_null,
- NULL,
-};
-
static void retro_frame_null(const void *data, unsigned width,
unsigned height, size_t pitch) { }
void retro_input_poll_null(void) { }
@@ -228,6 +205,7 @@ static const void *find_driver_nonempty(
return bluetooth_drivers[i];
}
}
+#ifdef HAVE_WIFI
else if (string_is_equal(label, "wifi_driver"))
{
if (wifi_drivers[i])
@@ -238,6 +216,7 @@ static const void *find_driver_nonempty(
return wifi_drivers[i];
}
}
+#endif
return NULL;
}
@@ -580,8 +559,10 @@ void drivers_init(
if (flags & DRIVER_BLUETOOTH_MASK)
bluetooth_driver_ctl(RARCH_BLUETOOTH_CTL_INIT, NULL);
+#ifdef HAVE_WIFI
if ((flags & DRIVER_WIFI_MASK))
wifi_driver_ctl(RARCH_WIFI_CTL_INIT, NULL);
+#endif
if (flags & DRIVER_LOCATION_MASK)
{
@@ -729,8 +710,10 @@ void driver_uninit(int flags)
if ((flags & DRIVER_BLUETOOTH_MASK))
bluetooth_driver_ctl(RARCH_BLUETOOTH_CTL_DEINIT, NULL);
+#ifdef HAVE_WIFI
if ((flags & DRIVER_WIFI_MASK))
wifi_driver_ctl(RARCH_WIFI_CTL_DEINIT, NULL);
+#endif
if (flags & DRIVER_LED)
led_driver_free();
@@ -841,7 +824,9 @@ void retroarch_deinit_drivers(struct retro_callbacks *cbs)
camera_st->data = NULL;
bluetooth_driver_ctl(RARCH_BLUETOOTH_CTL_DESTROY, NULL);
+#ifdef HAVE_WIFI
wifi_driver_ctl(RARCH_WIFI_CTL_DESTROY, NULL);
+#endif
cbs->frame_cb = retro_frame_null;
cbs->poll_cb = retro_input_poll_null;
diff --git a/griffin/griffin.c b/griffin/griffin.c
index cf27d2bd5b..464f621ec1 100644
--- a/griffin/griffin.c
+++ b/griffin/griffin.c
@@ -1266,8 +1266,15 @@ BLUETOOTH
/*============================================================
WIFI
============================================================ */
+#ifdef HAVE_WIFI
+#include "../network/wifi_driver.c"
+
#ifdef HAVE_LAKKA
-#include "../wifi/drivers/connmanctl.c"
+#include "../network/drivers_wifi/connmanctl.c"
+#endif
+
+#include "../tasks/task_wifi.c"
+
#endif
/*============================================================
@@ -1312,7 +1319,6 @@ NETPLAY
#include "../tasks/task_netplay_lan_scan.c"
#include "../tasks/task_netplay_nat_traversal.c"
#include "../tasks/task_bluetooth.c"
-#include "../tasks/task_wifi.c"
#include "../tasks/task_netplay_find_content.c"
#include "../tasks/task_pl_thumbnail_download.c"
#endif
diff --git a/menu/cbs/menu_cbs_get_value.c b/menu/cbs/menu_cbs_get_value.c
index c5daf8f39c..70fb87bbad 100644
--- a/menu/cbs/menu_cbs_get_value.c
+++ b/menu/cbs/menu_cbs_get_value.c
@@ -43,7 +43,6 @@
#include "../../paths.h"
#include "../../verbosity.h"
#include "../../bluetooth/bluetooth_driver.h"
-#include "../../wifi/wifi_driver.h"
#include "../../playlist.h"
#include "../../manual_content_scan.h"
#include "../misc/cpufreq/cpufreq.h"
@@ -51,6 +50,7 @@
#ifdef HAVE_NETWORKING
#include "../../network/netplay/netplay.h"
+#include "../../network/wifi_driver.h"
#endif
#ifdef HAVE_CHEEVOS
@@ -982,6 +982,7 @@ static void menu_action_setting_disp_set_label_bluetooth_is_connected(
strlcpy(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_BT_CONNECTED), len);
}
+#if defined(HAVE_NETWORKING) && defined(HAVE_WIFI)
static void menu_action_setting_disp_set_label_wifi_is_online(
file_list_t* list,
unsigned *w, unsigned type, unsigned i,
@@ -996,6 +997,7 @@ static void menu_action_setting_disp_set_label_wifi_is_online(
if (driver_wifi_ssid_is_online(i))
strlcpy(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_ONLINE), len);
}
+#endif
static void menu_action_setting_disp_set_label_menu_disk_index(
file_list_t* list,
@@ -1769,8 +1771,10 @@ static int menu_cbs_init_bind_get_string_representation_compare_label(
menu_action_setting_disp_set_label_bluetooth_is_connected);
break;
case MENU_ENUM_LABEL_CONNECT_WIFI:
+#if defined(HAVE_NETWORKING) && defined(HAVE_WIFI)
BIND_ACTION_GET_VALUE(cbs,
menu_action_setting_disp_set_label_wifi_is_online);
+#endif
break;
case MENU_ENUM_LABEL_CHEAT_NUM_PASSES:
#ifdef HAVE_CHEATS
diff --git a/menu/cbs/menu_cbs_ok.c b/menu/cbs/menu_cbs_ok.c
index 14694f295b..7f51d884b5 100644
--- a/menu/cbs/menu_cbs_ok.c
+++ b/menu/cbs/menu_cbs_ok.c
@@ -38,7 +38,6 @@
#include "../../config.def.h"
#include "../../config.def.keybinds.h"
-#include "../../wifi/wifi_driver.h"
#include "../../driver.h"
#include "../menu_driver.h"
@@ -83,7 +82,9 @@
#ifdef HAVE_NETWORKING
#include "../../network/netplay/netplay.h"
-#include "../../wifi/wifi_driver.h"
+#ifdef HAVE_WIFI
+#include "../../network/wifi_driver.h"
+#endif
#endif
#ifdef __WINRT__
@@ -2900,6 +2901,7 @@ static int action_ok_bluetooth(const char *path, const char *label,
}
#ifdef HAVE_NETWORKING
+#ifdef HAVE_WIFI
static void menu_input_wifi_cb(void *userdata, const char *passphrase)
{
unsigned idx = menu_input_dialog_get_kb_idx();
@@ -2915,6 +2917,35 @@ static void menu_input_wifi_cb(void *userdata, const char *passphrase)
menu_input_dialog_end();
}
+
+static int action_ok_wifi(const char *path, const char *label_setting,
+ unsigned type, size_t idx, size_t entry_idx)
+{
+ wifi_network_scan_t* scan = driver_wifi_get_ssids();
+ if (idx >= RBUF_LEN(scan->net_list))
+ return -1;
+
+ if (scan->net_list[idx].saved_password)
+ {
+ /* No need to ask for a password, should be stored */
+ task_push_wifi_connect(NULL, &scan->net_list[idx]);
+ return 0;
+ }
+ else
+ {
+ /* Show password input dialog */
+ menu_input_ctx_line_t line;
+ line.label = "Passphrase";
+ line.label_setting = label_setting;
+ line.type = type;
+ line.idx = (unsigned)idx;
+ line.cb = menu_input_wifi_cb;
+ if (!menu_input_dialog_start(&line))
+ return -1;
+ return 0;
+ }
+}
+#endif
#endif
static void menu_input_st_string_cb_rename_entry(void *userdata,
@@ -3234,35 +3265,6 @@ static int action_ok_shader_preset_remove_game(const char *path,
}
#endif
-#ifdef HAVE_NETWORKING
-static int action_ok_wifi(const char *path, const char *label_setting,
- unsigned type, size_t idx, size_t entry_idx)
-{
- wifi_network_scan_t* scan = driver_wifi_get_ssids();
- if (idx >= RBUF_LEN(scan->net_list))
- return -1;
-
- if (scan->net_list[idx].saved_password)
- {
- /* No need to ask for a password, should be stored */
- task_push_wifi_connect(NULL, &scan->net_list[idx]);
- return 0;
- }
- else
- {
- /* Show password input dialog */
- menu_input_ctx_line_t line;
- line.label = "Passphrase";
- line.label_setting = label_setting;
- line.type = type;
- line.idx = (unsigned)idx;
- line.cb = menu_input_wifi_cb;
- if (!menu_input_dialog_start(&line))
- return -1;
- return 0;
- }
-}
-#endif
static int action_ok_video_filter_remove(const char *path,
const char *label, unsigned type, size_t idx, size_t entry_idx)
@@ -5551,9 +5553,11 @@ DEFAULT_ACTION_OK_FUNC(action_ok_subsystem_list, ACTION_OK_DL_SUBSYSTEM_SETTINGS
DEFAULT_ACTION_OK_FUNC(action_ok_database_manager_list, ACTION_OK_DL_DATABASE_MANAGER_LIST)
DEFAULT_ACTION_OK_FUNC(action_ok_bluetooth_list, ACTION_OK_DL_BLUETOOTH_SETTINGS_LIST)
#ifdef HAVE_NETWORKING
+#ifdef HAVE_WIFI
DEFAULT_ACTION_OK_FUNC(action_ok_wifi_list, ACTION_OK_DL_WIFI_SETTINGS_LIST)
DEFAULT_ACTION_OK_FUNC(action_ok_wifi_networks_list, ACTION_OK_DL_WIFI_NETWORKS_LIST)
#endif
+#endif
DEFAULT_ACTION_OK_FUNC(action_ok_cursor_manager_list, ACTION_OK_DL_CURSOR_MANAGER_LIST)
DEFAULT_ACTION_OK_FUNC(action_ok_compressed_archive_push, ACTION_OK_DL_COMPRESSED_ARCHIVE_PUSH)
DEFAULT_ACTION_OK_FUNC(action_ok_compressed_archive_push_detect_core, ACTION_OK_DL_COMPRESSED_ARCHIVE_PUSH_DETECT_CORE)
@@ -5701,6 +5705,7 @@ static int action_ok_open_picker(const char *path,
}
#ifdef HAVE_NETWORKING
+#ifdef HAVE_WIFI
static void wifi_menu_refresh_callback(retro_task_t *task,
void *task_data,
void *user_data, const char *error)
@@ -5716,6 +5721,7 @@ static int action_ok_wifi_disconnect(const char *path,
task_push_wifi_disconnect(wifi_menu_refresh_callback);
return true;
}
+#endif
static int action_ok_netplay_connect_room(const char *path,
const char *label, unsigned type, size_t idx, size_t entry_idx)
@@ -7967,9 +7973,11 @@ static int menu_cbs_init_bind_ok_compare_label(menu_file_list_cbs_t *cbs,
{MENU_ENUM_LABEL_UPDATER_SETTINGS, action_ok_updater_list},
{MENU_ENUM_LABEL_BLUETOOTH_SETTINGS, action_ok_bluetooth_list},
#ifdef HAVE_NETWORKING
+#ifdef HAVE_WIFI
{MENU_ENUM_LABEL_WIFI_SETTINGS, action_ok_wifi_list},
{MENU_ENUM_LABEL_WIFI_NETWORK_SCAN, action_ok_wifi_networks_list},
{MENU_ENUM_LABEL_WIFI_DISCONNECT, action_ok_wifi_disconnect},
+#endif
{MENU_ENUM_LABEL_CONNECT_NETPLAY_ROOM, action_ok_netplay_connect_room},
#endif
{MENU_ENUM_LABEL_NETWORK_HOSTING_SETTINGS, action_ok_network_hosting_list},
@@ -8444,7 +8452,9 @@ static int menu_cbs_init_bind_ok_compare_type(menu_file_list_cbs_t *cbs,
break;
case MENU_WIFI:
#ifdef HAVE_NETWORKING
+#ifdef HAVE_WIFI
BIND_ACTION_OK(cbs, action_ok_wifi);
+#endif
#endif
break;
case MENU_NETPLAY_LAN_SCAN:
diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c
index 008558ecb8..913d16ffeb 100644
--- a/menu/menu_displaylist.c
+++ b/menu/menu_displaylist.c
@@ -111,7 +111,9 @@
#include "../performance_counters.h"
#include "../core_info.h"
#include "../bluetooth/bluetooth_driver.h"
-#include "../wifi/wifi_driver.h"
+#if defined(HAVE_NETWORKING) && defined(HAVE_WIFI)
+#include "../network/wifi_driver.h"
+#endif
#include "../tasks/task_content.h"
#include "../tasks/tasks_internal.h"
#include "../dynamic.h"
@@ -4947,7 +4949,7 @@ static void bluetooth_scan_callback(retro_task_t *task,
}
#endif
-#ifdef HAVE_NETWORKING
+#if defined(HAVE_NETWORKING) && defined(HAVE_WIFI)
static void wifi_scan_callback(retro_task_t *task,
void *task_data,
void *user_data, const char *error)
@@ -5854,6 +5856,7 @@ unsigned menu_displaylist_build_list(
#endif
break;
case DISPLAYLIST_WIFI_SETTINGS_LIST:
+#if defined(HAVE_NETWORKING) && defined(HAVE_WIFI)
{
bool wifi_enabled = settings->bools.wifi_enabled;
bool connected = driver_wifi_connection_info(NULL);
@@ -5888,9 +5891,10 @@ unsigned menu_displaylist_build_list(
count++;
}
}
+#endif
break;
case DISPLAYLIST_WIFI_NETWORKS_LIST:
-#ifdef HAVE_NETWORKING
+#if defined(HAVE_NETWORKING) && defined(HAVE_WIFI)
if (!string_is_equal(settings->arrays.wifi_driver, "null"))
{
wifi_network_scan_t *scan = driver_wifi_get_ssids();
diff --git a/menu/menu_setting.c b/menu/menu_setting.c
index 1372abfbfa..d6984103d2 100644
--- a/menu/menu_setting.c
+++ b/menu/menu_setting.c
@@ -82,7 +82,6 @@
#include "../list_special.h"
#include "../audio/audio_driver.h"
#include "../bluetooth/bluetooth_driver.h"
-#include "../wifi/wifi_driver.h"
#include "../midi_driver.h"
#include "../location_driver.h"
#include "../record/record_driver.h"
@@ -106,6 +105,9 @@
#ifdef HAVE_NETWORKING
#include "../network/netplay/netplay.h"
+#ifdef HAVE_WIFI
+#include "../network/wifi_driver.h"
+#endif
#endif
#ifdef HAVE_VIDEO_LAYOUT
@@ -8155,10 +8157,12 @@ static void general_write_handler(rarch_setting_t *setting)
break;
case MENU_ENUM_LABEL_WIFI_ENABLED:
#ifdef HAVE_NETWORKING
+#ifdef HAVE_WIFI
if (*setting->value.target.boolean)
task_push_wifi_enable(NULL);
else
task_push_wifi_disable(NULL);
+#endif
#endif
break;
case MENU_ENUM_LABEL_CORE_INFO_CACHE_ENABLE:
@@ -8426,11 +8430,13 @@ static void bluetooth_enable_toggle_change_handler(rarch_setting_t *setting)
*setting->value.target.boolean);
}
+#ifdef HAVE_WIFI
static void localap_enable_toggle_change_handler(rarch_setting_t *setting)
{
driver_wifi_tether_start_stop(*setting->value.target.boolean,
LAKKA_LOCALAP_PATH);
}
+#endif
static void timezone_change_handler(rarch_setting_t *setting)
{
@@ -9715,7 +9721,7 @@ static bool setting_append_list(
break;
case SETTINGS_LIST_DRIVERS:
{
- unsigned i;
+ unsigned i, j = 0;
struct string_options_entry string_options_entries[12];
START_GROUP(list, list_info, &group_info, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_DRIVER_SETTINGS), parent_group);
@@ -9726,89 +9732,113 @@ static bool setting_append_list(
START_SUB_GROUP(list, list_info, "State", &group_info,
&subgroup_info, parent_group);
- string_options_entries[0].target = settings->arrays.input_driver;
- string_options_entries[0].len = sizeof(settings->arrays.input_driver);
- string_options_entries[0].name_enum_idx = MENU_ENUM_LABEL_INPUT_DRIVER;
- string_options_entries[0].SHORT_enum_idx = MENU_ENUM_LABEL_VALUE_INPUT_DRIVER;
- string_options_entries[0].default_value = config_get_default_input();
- string_options_entries[0].values = config_get_input_driver_options();
+ string_options_entries[j].target = settings->arrays.input_driver;
+ string_options_entries[j].len = sizeof(settings->arrays.input_driver);
+ string_options_entries[j].name_enum_idx = MENU_ENUM_LABEL_INPUT_DRIVER;
+ string_options_entries[j].SHORT_enum_idx = MENU_ENUM_LABEL_VALUE_INPUT_DRIVER;
+ string_options_entries[j].default_value = config_get_default_input();
+ string_options_entries[j].values = config_get_input_driver_options();
- string_options_entries[1].target = settings->arrays.input_joypad_driver;
- string_options_entries[1].len = sizeof(settings->arrays.input_joypad_driver);
- string_options_entries[1].name_enum_idx = MENU_ENUM_LABEL_JOYPAD_DRIVER;
- string_options_entries[1].SHORT_enum_idx = MENU_ENUM_LABEL_VALUE_JOYPAD_DRIVER;
- string_options_entries[1].default_value = config_get_default_joypad();
- string_options_entries[1].values = config_get_joypad_driver_options();
+ j++;
- string_options_entries[2].target = settings->arrays.video_driver;
- string_options_entries[2].len = sizeof(settings->arrays.video_driver);
- string_options_entries[2].name_enum_idx = MENU_ENUM_LABEL_VIDEO_DRIVER;
- string_options_entries[2].SHORT_enum_idx = MENU_ENUM_LABEL_VALUE_VIDEO_DRIVER;
- string_options_entries[2].default_value = config_get_default_video();
- string_options_entries[2].values = config_get_video_driver_options();
+ string_options_entries[j].target = settings->arrays.input_joypad_driver;
+ string_options_entries[j].len = sizeof(settings->arrays.input_joypad_driver);
+ string_options_entries[j].name_enum_idx = MENU_ENUM_LABEL_JOYPAD_DRIVER;
+ string_options_entries[j].SHORT_enum_idx = MENU_ENUM_LABEL_VALUE_JOYPAD_DRIVER;
+ string_options_entries[j].default_value = config_get_default_joypad();
+ string_options_entries[j].values = config_get_joypad_driver_options();
- string_options_entries[3].target = settings->arrays.audio_driver;
- string_options_entries[3].len = sizeof(settings->arrays.audio_driver);
- string_options_entries[3].name_enum_idx = MENU_ENUM_LABEL_AUDIO_DRIVER;
- string_options_entries[3].SHORT_enum_idx = MENU_ENUM_LABEL_VALUE_AUDIO_DRIVER;
- string_options_entries[3].default_value = config_get_default_audio();
- string_options_entries[3].values = config_get_audio_driver_options();
+ j++;
- string_options_entries[4].target = settings->arrays.audio_resampler;
- string_options_entries[4].len = sizeof(settings->arrays.audio_resampler);
- string_options_entries[4].name_enum_idx = MENU_ENUM_LABEL_AUDIO_RESAMPLER_DRIVER;
- string_options_entries[4].SHORT_enum_idx = MENU_ENUM_LABEL_VALUE_AUDIO_RESAMPLER_DRIVER;
- string_options_entries[4].default_value = config_get_default_audio_resampler();
- string_options_entries[4].values = config_get_audio_resampler_driver_options();
+ string_options_entries[j].target = settings->arrays.video_driver;
+ string_options_entries[j].len = sizeof(settings->arrays.video_driver);
+ string_options_entries[j].name_enum_idx = MENU_ENUM_LABEL_VIDEO_DRIVER;
+ string_options_entries[j].SHORT_enum_idx = MENU_ENUM_LABEL_VALUE_VIDEO_DRIVER;
+ string_options_entries[j].default_value = config_get_default_video();
+ string_options_entries[j].values = config_get_video_driver_options();
- string_options_entries[5].target = settings->arrays.camera_driver;
- string_options_entries[5].len = sizeof(settings->arrays.camera_driver);
- string_options_entries[5].name_enum_idx = MENU_ENUM_LABEL_CAMERA_DRIVER;
- string_options_entries[5].SHORT_enum_idx = MENU_ENUM_LABEL_VALUE_CAMERA_DRIVER;
- string_options_entries[5].default_value = config_get_default_camera();
- string_options_entries[5].values = config_get_camera_driver_options();
+ j++;
- string_options_entries[6].target = settings->arrays.bluetooth_driver;
- string_options_entries[6].len = sizeof(settings->arrays.bluetooth_driver);
- string_options_entries[6].name_enum_idx = MENU_ENUM_LABEL_BLUETOOTH_DRIVER;
- string_options_entries[6].SHORT_enum_idx = MENU_ENUM_LABEL_VALUE_BLUETOOTH_DRIVER;
- string_options_entries[6].default_value = config_get_default_bluetooth();
- string_options_entries[6].values = config_get_bluetooth_driver_options();
+ string_options_entries[j].target = settings->arrays.audio_driver;
+ string_options_entries[j].len = sizeof(settings->arrays.audio_driver);
+ string_options_entries[j].name_enum_idx = MENU_ENUM_LABEL_AUDIO_DRIVER;
+ string_options_entries[j].SHORT_enum_idx = MENU_ENUM_LABEL_VALUE_AUDIO_DRIVER;
+ string_options_entries[j].default_value = config_get_default_audio();
+ string_options_entries[j].values = config_get_audio_driver_options();
- string_options_entries[7].target = settings->arrays.wifi_driver;
- string_options_entries[7].len = sizeof(settings->arrays.wifi_driver);
- string_options_entries[7].name_enum_idx = MENU_ENUM_LABEL_WIFI_DRIVER;
- string_options_entries[7].SHORT_enum_idx = MENU_ENUM_LABEL_VALUE_WIFI_DRIVER;
- string_options_entries[7].default_value = config_get_default_wifi();
- string_options_entries[7].values = config_get_wifi_driver_options();
+ j++;
- string_options_entries[8].target = settings->arrays.location_driver;
- string_options_entries[8].len = sizeof(settings->arrays.location_driver);
- string_options_entries[8].name_enum_idx = MENU_ENUM_LABEL_LOCATION_DRIVER;
- string_options_entries[8].SHORT_enum_idx = MENU_ENUM_LABEL_VALUE_LOCATION_DRIVER;
- string_options_entries[8].default_value = config_get_default_location();
- string_options_entries[8].values = config_get_location_driver_options();
+ string_options_entries[j].target = settings->arrays.audio_resampler;
+ string_options_entries[j].len = sizeof(settings->arrays.audio_resampler);
+ string_options_entries[j].name_enum_idx = MENU_ENUM_LABEL_AUDIO_RESAMPLER_DRIVER;
+ string_options_entries[j].SHORT_enum_idx = MENU_ENUM_LABEL_VALUE_AUDIO_RESAMPLER_DRIVER;
+ string_options_entries[j].default_value = config_get_default_audio_resampler();
+ string_options_entries[j].values = config_get_audio_resampler_driver_options();
- string_options_entries[9].target = settings->arrays.menu_driver;
- string_options_entries[9].len = sizeof(settings->arrays.menu_driver);
- string_options_entries[9].name_enum_idx = MENU_ENUM_LABEL_MENU_DRIVER;
- string_options_entries[9].SHORT_enum_idx = MENU_ENUM_LABEL_VALUE_MENU_DRIVER;
- string_options_entries[9].default_value = config_get_default_menu();
- string_options_entries[9].values = config_get_menu_driver_options();
+ j++;
- string_options_entries[10].target = settings->arrays.record_driver;
- string_options_entries[10].len = sizeof(settings->arrays.record_driver);
- string_options_entries[10].name_enum_idx = MENU_ENUM_LABEL_RECORD_DRIVER;
- string_options_entries[10].SHORT_enum_idx = MENU_ENUM_LABEL_VALUE_RECORD_DRIVER;
- string_options_entries[10].default_value = config_get_default_record();
- string_options_entries[10].values = config_get_record_driver_options();
+ string_options_entries[j].target = settings->arrays.camera_driver;
+ string_options_entries[j].len = sizeof(settings->arrays.camera_driver);
+ string_options_entries[j].name_enum_idx = MENU_ENUM_LABEL_CAMERA_DRIVER;
+ string_options_entries[j].SHORT_enum_idx = MENU_ENUM_LABEL_VALUE_CAMERA_DRIVER;
+ string_options_entries[j].default_value = config_get_default_camera();
+ string_options_entries[j].values = config_get_camera_driver_options();
- string_options_entries[11].target = settings->arrays.midi_driver;
- string_options_entries[11].len = sizeof(settings->arrays.midi_driver);
- string_options_entries[11].name_enum_idx = MENU_ENUM_LABEL_MIDI_DRIVER;
- string_options_entries[11].SHORT_enum_idx = MENU_ENUM_LABEL_VALUE_MIDI_DRIVER;
- string_options_entries[11].default_value = config_get_default_midi();
- string_options_entries[11].values = config_get_midi_driver_options();
+ j++;
+
+ string_options_entries[j].target = settings->arrays.bluetooth_driver;
+ string_options_entries[j].len = sizeof(settings->arrays.bluetooth_driver);
+ string_options_entries[j].name_enum_idx = MENU_ENUM_LABEL_BLUETOOTH_DRIVER;
+ string_options_entries[j].SHORT_enum_idx = MENU_ENUM_LABEL_VALUE_BLUETOOTH_DRIVER;
+ string_options_entries[j].default_value = config_get_default_bluetooth();
+ string_options_entries[j].values = config_get_bluetooth_driver_options();
+
+ j++;
+
+#ifdef HAVE_WIFI
+ string_options_entries[j].target = settings->arrays.wifi_driver;
+ string_options_entries[j].len = sizeof(settings->arrays.wifi_driver);
+ string_options_entries[j].name_enum_idx = MENU_ENUM_LABEL_WIFI_DRIVER;
+ string_options_entries[j].SHORT_enum_idx = MENU_ENUM_LABEL_VALUE_WIFI_DRIVER;
+ string_options_entries[j].default_value = config_get_default_wifi();
+ string_options_entries[j].values = config_get_wifi_driver_options();
+
+ j++;
+#endif
+
+ string_options_entries[j].target = settings->arrays.location_driver;
+ string_options_entries[j].len = sizeof(settings->arrays.location_driver);
+ string_options_entries[j].name_enum_idx = MENU_ENUM_LABEL_LOCATION_DRIVER;
+ string_options_entries[j].SHORT_enum_idx = MENU_ENUM_LABEL_VALUE_LOCATION_DRIVER;
+ string_options_entries[j].default_value = config_get_default_location();
+ string_options_entries[j].values = config_get_location_driver_options();
+
+ j++;
+
+ string_options_entries[j].target = settings->arrays.menu_driver;
+ string_options_entries[j].len = sizeof(settings->arrays.menu_driver);
+ string_options_entries[j].name_enum_idx = MENU_ENUM_LABEL_MENU_DRIVER;
+ string_options_entries[j].SHORT_enum_idx = MENU_ENUM_LABEL_VALUE_MENU_DRIVER;
+ string_options_entries[j].default_value = config_get_default_menu();
+ string_options_entries[j].values = config_get_menu_driver_options();
+
+ j++;
+
+ string_options_entries[j].target = settings->arrays.record_driver;
+ string_options_entries[j].len = sizeof(settings->arrays.record_driver);
+ string_options_entries[j].name_enum_idx = MENU_ENUM_LABEL_RECORD_DRIVER;
+ string_options_entries[j].SHORT_enum_idx = MENU_ENUM_LABEL_VALUE_RECORD_DRIVER;
+ string_options_entries[j].default_value = config_get_default_record();
+ string_options_entries[j].values = config_get_record_driver_options();
+
+ j++;
+
+ string_options_entries[j].target = settings->arrays.midi_driver;
+ string_options_entries[j].len = sizeof(settings->arrays.midi_driver);
+ string_options_entries[j].name_enum_idx = MENU_ENUM_LABEL_MIDI_DRIVER;
+ string_options_entries[j].SHORT_enum_idx = MENU_ENUM_LABEL_VALUE_MIDI_DRIVER;
+ string_options_entries[j].default_value = config_get_default_midi();
+ string_options_entries[j].values = config_get_midi_driver_options();
for (i = 0; i < ARRAY_SIZE(string_options_entries); i++)
{
@@ -19525,6 +19555,7 @@ static bool setting_append_list(
SD_FLAG_NONE);
(*list)[list_info->index - 1].change_handler = bluetooth_enable_toggle_change_handler;
+#ifdef HAVE_WIFI
CONFIG_BOOL(
list, list_info,
&settings->bools.localap_enable,
@@ -19540,6 +19571,7 @@ static bool setting_append_list(
general_read_handler,
SD_FLAG_NONE);
(*list)[list_info->index - 1].change_handler = localap_enable_toggle_change_handler;
+#endif
CONFIG_STRING_OPTIONS(
list, list_info,
diff --git a/wifi/drivers/connmanctl.c b/network/drivers_wifi/connmanctl.c
similarity index 97%
rename from wifi/drivers/connmanctl.c
rename to network/drivers_wifi/connmanctl.c
index 7f0d6fd068..155e68fb57 100644
--- a/wifi/drivers/connmanctl.c
+++ b/network/drivers_wifi/connmanctl.c
@@ -65,10 +65,11 @@ static void connmanctl_stop(void *data)
(void)data;
}
-static void connmanctl_refresh_services(connman_t *connman) {
+static void connmanctl_refresh_services(connman_t *connman)
+{
char line[512];
FILE *serv_file = popen("connmanctl services", "r");
-
+
if (connman->scan.net_list)
RBUF_FREE(connman->scan.net_list);
@@ -295,11 +296,12 @@ static bool connmanctl_connection_info(void *data, wifi_network_info_t *netinfo)
return false;
}
-static bool connmanctl_disconnect_ssid(void *data, const wifi_network_info_t* netinfo)
+static bool connmanctl_disconnect_ssid(void *data,
+ const wifi_network_info_t* netinfo)
{
connman_t *connman = (connman_t*)data;
- /* TODO:Check whether this network is actually connected */
+ /* TODO/FIXME: Check whether this network is actually connected */
snprintf(connman->command, sizeof(connman->command),
"connmanctl disconnect %s 2>&1",
@@ -321,12 +323,12 @@ static bool connmanctl_connect_ssid(
char settings_dir[PATH_MAX_LENGTH] = {0};
char settings_path[PATH_MAX_LENGTH] = {0};
char netid[160] = {0};
- FILE *settings_file = NULL;
connman_t *connman = (connman_t*)data;
settings_t *settings = config_get_ptr();
static struct string_list* list = NULL;
#ifdef HAVE_GFX_WIDGETS
- bool widgets_active = connman->connmanctl_widgets_supported;
+ bool widgets_active =
+ connman->connmanctl_widgets_supported;
#endif
strlcat(netid, netinfo->netid, sizeof(netid));
strlcat(settings_dir, LAKKA_CONNMAN_DIR, sizeof(settings_dir));
@@ -339,7 +341,7 @@ static bool connmanctl_connect_ssid(
if (!netinfo->saved_password)
{
- settings_file = fopen(settings_path, "w");
+ FILE *settings_file = fopen(settings_path, "w");
if (!settings_file)
return false;
fprintf(settings_file, "[%s]\n", netid);
@@ -362,14 +364,12 @@ static bool connmanctl_connect_ssid(
else
{
/* No need for pass, config should be there already, verify it */
- settings_file = fopen(settings_path, "r");
- if (!settings_file)
+ if (!path_is_valid(settings_path))
{
/* Usually a mismatch between connman state and config, reload */
system("systemctl restart connman.service");
return false;
}
- fclose(settings_file);
}
if (connmanctl_tether_status(connman))
diff --git a/wifi/drivers/nmcli.c b/network/drivers_wifi/nmcli.c
similarity index 83%
rename from wifi/drivers/nmcli.c
rename to network/drivers_wifi/nmcli.c
index bc779cb0dc..6efe9dfdb8 100644
--- a/wifi/drivers/nmcli.c
+++ b/network/drivers_wifi/nmcli.c
@@ -52,24 +52,22 @@ static void nmcli_free(void *data)
static bool nmcli_start(void *data)
{
- (void)data;
return true;
}
-static void nmcli_stop(void *data)
-{
- (void)data;
-}
+static void nmcli_stop(void *data) { }
static bool nmcli_enable(void* data, bool enabled)
{
- // semantics here are broken: nmcli_enable(..., false) is called
- // on startup which is probably not what we want.
+ /* semantics here are broken: nmcli_enable(..., false) is called
+ * on startup which is probably not what we want. */
-// if (enabled)
-// pclose(popen("nmcli radio wifi on", "r"));
-// else
-// pclose(popen("nmcli radio wifi off", "r"));
+#if 0
+ if (enabled)
+ pclose(popen("nmcli radio wifi on", "r"));
+ else
+ pclose(popen("nmcli radio wifi off", "r"));
+#endif
return true;
}
@@ -78,12 +76,12 @@ static bool nmcli_connection_info(void *data, wifi_network_info_t *netinfo)
{
FILE *cmd_file = NULL;
char line[512];
- (void)data;
if (!netinfo)
return false;
cmd_file = popen("nmcli -f NAME c show --active | tail -n+2", "r");
+
if (fgets(line, sizeof(line), cmd_file))
{
strlcpy(netinfo->ssid, line, sizeof(netinfo->ssid));
@@ -96,9 +94,9 @@ static bool nmcli_connection_info(void *data, wifi_network_info_t *netinfo)
static void nmcli_scan(void *data)
{
+ char line[512];
nmcli_t *nmcli = (nmcli_t*)data;
FILE *cmd_file = NULL;
- char line[512];
nmcli->scan.scan_time = time(NULL);
@@ -144,7 +142,8 @@ static bool nmcli_ssid_is_online(void *data, unsigned idx)
return nmcli->scan.net_list[idx].connected;
}
-static bool nmcli_connect_ssid(void *data, const wifi_network_info_t *netinfo)
+static bool nmcli_connect_ssid(void *data,
+ const wifi_network_info_t *netinfo)
{
nmcli_t *nmcli = (nmcli_t*)data;
char cmd[256];
@@ -153,11 +152,10 @@ static bool nmcli_connect_ssid(void *data, const wifi_network_info_t *netinfo)
if (!nmcli || !netinfo)
return false;
- snprintf(cmd, sizeof(cmd), "nmcli dev wifi connect \"%s\" password \"%s\" 2>&1",
+ snprintf(cmd, sizeof(cmd),
+ "nmcli dev wifi connect \"%s\" password \"%s\" 2>&1",
netinfo->ssid, netinfo->passphrase);
- ret = pclose(popen(cmd, "r"));
-
- if (ret == 0)
+ if ((ret = pclose(popen(cmd, "r"))) == 0)
{
for (i = 0; i < RBUF_LEN(nmcli->scan.net_list); i++)
{
@@ -169,23 +167,17 @@ static bool nmcli_connect_ssid(void *data, const wifi_network_info_t *netinfo)
return true;
}
-static bool nmcli_disconnect_ssid(void *data, const wifi_network_info_t *netinfo)
+static bool nmcli_disconnect_ssid(void *data,
+ const wifi_network_info_t *netinfo)
{
char cmd[256];
- (void)data;
-
snprintf(cmd, sizeof(cmd), "nmcli c down \"%s\"", netinfo->ssid);
pclose(popen(cmd, "r"));
return true;
}
-static void nmcli_tether_start_stop(void* data, bool start, char* configfile)
-{
- (void)data;
- (void)start;
- (void)configfile;
-}
+static void nmcli_tether_start_stop(void *a, bool b, char *c) { }
wifi_driver_t wifi_nmcli = {
nmcli_init,
diff --git a/network/wifi_driver.c b/network/wifi_driver.c
new file mode 100644
index 0000000000..70eed13eb1
--- /dev/null
+++ b/network/wifi_driver.c
@@ -0,0 +1,245 @@
+/* RetroArch - A frontend for libretro.
+ * Copyright (C) 2010-2014 - Hans-Kristian Arntzen
+ * Copyright (C) 2011-2021 - Daniel De Matteis
+ *
+ * RetroArch is free software: you can redistribute it and/or modify it under the terms
+ * of the GNU General Public License as published by the Free Software Found-
+ * ation, either version 3 of the License, or (at your option) any later version.
+ *
+ * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with RetroArch.
+ * If not, see .
+ */
+
+#include
+
+#ifdef HAVE_CONFIG_H
+#include "../config.h"
+#endif
+
+#include "../driver.h"
+#include "../list_special.h"
+#include "../retroarch.h"
+#include "../runloop.h"
+#include "../verbosity.h"
+
+#include "wifi_driver.h"
+
+wifi_driver_t wifi_null = {
+ NULL, /* init */
+ NULL, /* free */
+ NULL, /* start */
+ NULL, /* stop */
+ NULL, /* enable */
+ NULL, /* connection_info */
+ NULL, /* scan */
+ NULL, /* get_ssids */
+ NULL, /* ssid_is_online */
+ NULL, /* connect_ssid */
+ NULL, /* disconnect_ssid */
+ NULL, /* tether_start_stop */
+ "null",
+};
+
+const wifi_driver_t *wifi_drivers[] = {
+#ifdef HAVE_LAKKA
+ &wifi_connmanctl,
+#endif
+#ifdef HAVE_WIFI
+ &wifi_nmcli,
+#endif
+ &wifi_null,
+ NULL,
+};
+
+static wifi_driver_state_t wifi_driver_st = {0}; /* double alignment */
+
+wifi_driver_state_t *wifi_state_get_ptr(void)
+{
+ return &wifi_driver_st;
+}
+
+/**
+ * config_get_wifi_driver_options:
+ *
+ * Get an enumerated list of all wifi driver names,
+ * separated by '|'.
+ *
+ * Returns: string listing of all wifi driver names,
+ * separated by '|'.
+ **/
+const char* config_get_wifi_driver_options(void)
+{
+ return char_list_new_special(STRING_LIST_WIFI_DRIVERS, NULL);
+}
+
+void driver_wifi_scan(void)
+{
+ wifi_driver_state_t *wifi_st = &wifi_driver_st;
+ if (wifi_st && wifi_st->drv)
+ wifi_st->drv->scan(wifi_st->data);
+}
+
+bool driver_wifi_enable(bool enabled)
+{
+ wifi_driver_state_t *wifi_st = &wifi_driver_st;
+ if (wifi_st && wifi_st->drv)
+ return wifi_st->drv->enable(wifi_st->data, enabled);
+ return false;
+}
+
+bool driver_wifi_connection_info(wifi_network_info_t *netinfo)
+{
+ wifi_driver_state_t *wifi_st = &wifi_driver_st;
+ if (wifi_st && wifi_st->drv)
+ return wifi_st->drv->connection_info(wifi_st->data, netinfo);
+ return false;
+}
+
+wifi_network_scan_t* driver_wifi_get_ssids(void)
+{
+ wifi_driver_state_t *wifi_st = &wifi_driver_st;
+ if (wifi_st && wifi_st->drv)
+ return wifi_st->drv->get_ssids(wifi_st->data);
+ return NULL;
+}
+
+bool driver_wifi_ssid_is_online(unsigned i)
+{
+ wifi_driver_state_t *wifi_st = &wifi_driver_st;
+ if (wifi_st && wifi_st->drv)
+ return wifi_st->drv->ssid_is_online(wifi_st->data, i);
+ return false;
+}
+
+bool driver_wifi_connect_ssid(const wifi_network_info_t* net)
+{
+ wifi_driver_state_t *wifi_st = &wifi_driver_st;
+ if (wifi_st && wifi_st->drv)
+ return wifi_st->drv->connect_ssid(wifi_st->data, net);
+ return false;
+}
+
+bool driver_wifi_disconnect_ssid(const wifi_network_info_t* net)
+{
+ wifi_driver_state_t *wifi_st = &wifi_driver_st;
+ if (wifi_st && wifi_st->drv)
+ return wifi_st->drv->disconnect_ssid(wifi_st->data, net);
+ return false;
+}
+
+void driver_wifi_tether_start_stop(bool start, char* configfile)
+{
+ wifi_driver_state_t *wifi_st = &wifi_driver_st;
+ if (wifi_st && wifi_st->drv)
+ wifi_st->drv->tether_start_stop(wifi_st->data, start, configfile);
+}
+
+bool wifi_driver_ctl(enum rarch_wifi_ctl_state state, void *data)
+{
+ wifi_driver_state_t *wifi_st = &wifi_driver_st;
+ settings_t *settings = config_get_ptr();
+
+ switch (state)
+ {
+ case RARCH_WIFI_CTL_DESTROY:
+ wifi_st->active = false;
+ wifi_st->drv = NULL;
+ wifi_st->data = NULL;
+ break;
+ case RARCH_WIFI_CTL_SET_ACTIVE:
+ wifi_st->active = true;
+ break;
+ case RARCH_WIFI_CTL_FIND_DRIVER:
+ {
+ const char *prefix = "wifi driver";
+ int i = (int)driver_find_index(
+ "wifi_driver",
+ settings->arrays.wifi_driver);
+
+ if (i >= 0)
+ wifi_st->drv = (const wifi_driver_t*)wifi_drivers[i];
+ else
+ {
+ if (verbosity_is_enabled())
+ {
+ unsigned d;
+ RARCH_ERR("Couldn't find any %s named \"%s\"\n", prefix,
+ settings->arrays.wifi_driver);
+ RARCH_LOG_OUTPUT("Available %ss are:\n", prefix);
+ for (d = 0; wifi_drivers[d]; d++)
+ RARCH_LOG_OUTPUT("\t%s\n", wifi_drivers[d]->ident);
+
+ RARCH_WARN("Going to default to first %s...\n", prefix);
+ }
+
+ wifi_st->drv = (const wifi_driver_t*)wifi_drivers[0];
+
+ if (!wifi_st->drv)
+ retroarch_fail(1, "find_wifi_driver()");
+ }
+ }
+ break;
+ case RARCH_WIFI_CTL_UNSET_ACTIVE:
+ wifi_st->active = false;
+ break;
+ case RARCH_WIFI_CTL_IS_ACTIVE:
+ return wifi_st->active;
+ case RARCH_WIFI_CTL_DEINIT:
+ if (wifi_st->data && wifi_st->drv)
+ {
+ if (wifi_st->drv->free)
+ wifi_st->drv->free(wifi_st->data);
+ }
+
+ wifi_st->data = NULL;
+ break;
+ case RARCH_WIFI_CTL_STOP:
+ if ( wifi_st->drv
+ && wifi_st->drv->stop
+ && wifi_st->data)
+ wifi_st->drv->stop(wifi_st->data);
+ break;
+ case RARCH_WIFI_CTL_START:
+ if ( wifi_st->drv
+ && wifi_st->data
+ && wifi_st->drv->start)
+ {
+ bool wifi_allow = settings->bools.wifi_allow;
+ if (wifi_allow)
+ return wifi_st->drv->start(wifi_st->data);
+ }
+ return false;
+ case RARCH_WIFI_CTL_INIT:
+ /* Resource leaks will follow if wifi is initialized twice. */
+ if (wifi_st->data)
+ return false;
+
+ wifi_driver_ctl(RARCH_WIFI_CTL_FIND_DRIVER, NULL);
+
+ if (wifi_st->drv && wifi_st->drv->init)
+ {
+ wifi_st->data = wifi_st->drv->init();
+
+ if (wifi_st->data)
+ {
+ wifi_st->drv->enable(wifi_st->data,
+ settings->bools.wifi_enabled);
+ }
+ else
+ {
+ RARCH_ERR("Failed to initialize wifi driver. Will continue without wifi.\n");
+ wifi_driver_ctl(RARCH_WIFI_CTL_UNSET_ACTIVE, NULL);
+ }
+ }
+
+ break;
+ default:
+ break;
+ }
+
+ return false;
+}
diff --git a/wifi/wifi_driver.h b/network/wifi_driver.h
similarity index 95%
rename from wifi/wifi_driver.h
rename to network/wifi_driver.h
index cc71b11236..00db66d3d2 100644
--- a/wifi/wifi_driver.h
+++ b/network/wifi_driver.h
@@ -48,7 +48,7 @@ typedef struct wifi_network_info
bool connected;
bool saved_password;
char netid[160]; /* Do not use, internal */
- /* TODO Add signal strength & other info */
+ /* TODO/FIXME - Add signal strength & other info */
} wifi_network_info_t;
typedef struct wifi_network_scan
@@ -78,6 +78,13 @@ typedef struct wifi_driver
const char *ident;
} wifi_driver_t;
+typedef struct
+{
+ const wifi_driver_t *drv;
+ void *data;
+ bool active;
+} wifi_driver_state_t;
+
extern wifi_driver_t wifi_connmanctl;
extern wifi_driver_t wifi_nmcli;
diff --git a/retroarch.c b/retroarch.c
index 8bb251ab16..78d404601b 100644
--- a/retroarch.c
+++ b/retroarch.c
@@ -181,6 +181,9 @@
#ifdef HAVE_NETWORKING
#include "network/netplay/netplay.h"
#include "network/netplay/netplay_private.h"
+#ifdef HAVE_WIFI
+#include "network/wifi_driver.h"
+#endif
#endif
#ifdef HAVE_THREADS
@@ -211,7 +214,6 @@
#include "gfx/video_crt_switch.h"
#endif
#include "bluetooth/bluetooth_driver.h"
-#include "wifi/wifi_driver.h"
#include "misc/cpufreq/cpufreq.h"
#include "led/led_driver.h"
#include "midi_driver.h"
@@ -438,8 +440,6 @@ struct rarch_state
const bluetooth_driver_t *bluetooth_driver;
void *bluetooth_data;
- const wifi_driver_t *wifi_driver;
- void *wifi_data;
char *connect_host; /* Netplay hostname passed from CLI */
struct retro_perf_counter *perf_counters_rarch[MAX_COUNTERS];
@@ -486,7 +486,6 @@ struct rarch_state
bool rarch_block_config_read;
#endif
bool bluetooth_driver_active;
- bool wifi_driver_active;
bool main_ui_companion_is_on_foreground;
};
@@ -10066,176 +10065,6 @@ bool bluetooth_driver_ctl(enum rarch_bluetooth_ctl_state state, void *data)
return false;
}
-/* WIFI DRIVER */
-
-/**
- * config_get_wifi_driver_options:
- *
- * Get an enumerated list of all wifi driver names,
- * separated by '|'.
- *
- * Returns: string listing of all wifi driver names,
- * separated by '|'.
- **/
-const char* config_get_wifi_driver_options(void)
-{
- return char_list_new_special(STRING_LIST_WIFI_DRIVERS, NULL);
-}
-
-void driver_wifi_scan(void)
-{
- struct rarch_state *p_rarch = &rarch_st;
- p_rarch->wifi_driver->scan(p_rarch->wifi_data);
-}
-
-bool driver_wifi_enable(bool enabled)
-{
- struct rarch_state *p_rarch = &rarch_st;
- return p_rarch->wifi_driver->enable(p_rarch->wifi_data, enabled);
-}
-
-bool driver_wifi_connection_info(wifi_network_info_t *netinfo)
-{
- struct rarch_state *p_rarch = &rarch_st;
- return p_rarch->wifi_driver->connection_info(p_rarch->wifi_data, netinfo);
-}
-
-wifi_network_scan_t* driver_wifi_get_ssids(void)
-{
- struct rarch_state *p_rarch = &rarch_st;
- return p_rarch->wifi_driver->get_ssids(p_rarch->wifi_data);
-}
-
-bool driver_wifi_ssid_is_online(unsigned i)
-{
- struct rarch_state *p_rarch = &rarch_st;
- return p_rarch->wifi_driver->ssid_is_online(p_rarch->wifi_data, i);
-}
-
-bool driver_wifi_connect_ssid(const wifi_network_info_t* net)
-{
- struct rarch_state *p_rarch = &rarch_st;
- return p_rarch->wifi_driver->connect_ssid(p_rarch->wifi_data, net);
-}
-
-bool driver_wifi_disconnect_ssid(const wifi_network_info_t* net)
-{
- struct rarch_state *p_rarch = &rarch_st;
- return p_rarch->wifi_driver->disconnect_ssid(p_rarch->wifi_data, net);
-}
-
-void driver_wifi_tether_start_stop(bool start, char* configfile)
-{
- struct rarch_state *p_rarch = &rarch_st;
- p_rarch->wifi_driver->tether_start_stop(p_rarch->wifi_data, start, configfile);
-}
-
-bool wifi_driver_ctl(enum rarch_wifi_ctl_state state, void *data)
-{
- struct rarch_state *p_rarch = &rarch_st;
- settings_t *settings = config_get_ptr();
-
- switch (state)
- {
- case RARCH_WIFI_CTL_DESTROY:
- p_rarch->wifi_driver_active = false;
- p_rarch->wifi_driver = NULL;
- p_rarch->wifi_data = NULL;
- break;
- case RARCH_WIFI_CTL_SET_ACTIVE:
- p_rarch->wifi_driver_active = true;
- break;
- case RARCH_WIFI_CTL_FIND_DRIVER:
- {
- const char *prefix = "wifi driver";
- int i = (int)driver_find_index(
- "wifi_driver",
- settings->arrays.wifi_driver);
-
- if (i >= 0)
- p_rarch->wifi_driver = (const wifi_driver_t*)wifi_drivers[i];
- else
- {
- if (verbosity_is_enabled())
- {
- unsigned d;
- RARCH_ERR("Couldn't find any %s named \"%s\"\n", prefix,
- settings->arrays.wifi_driver);
- RARCH_LOG_OUTPUT("Available %ss are:\n", prefix);
- for (d = 0; wifi_drivers[d]; d++)
- RARCH_LOG_OUTPUT("\t%s\n", wifi_drivers[d]->ident);
-
- RARCH_WARN("Going to default to first %s...\n", prefix);
- }
-
- p_rarch->wifi_driver = (const wifi_driver_t*)wifi_drivers[0];
-
- if (!p_rarch->wifi_driver)
- retroarch_fail(1, "find_wifi_driver()");
- }
- }
- break;
- case RARCH_WIFI_CTL_UNSET_ACTIVE:
- p_rarch->wifi_driver_active = false;
- break;
- case RARCH_WIFI_CTL_IS_ACTIVE:
- return p_rarch->wifi_driver_active;
- case RARCH_WIFI_CTL_DEINIT:
- if (p_rarch->wifi_data && p_rarch->wifi_driver)
- {
- if (p_rarch->wifi_driver->free)
- p_rarch->wifi_driver->free(p_rarch->wifi_data);
- }
-
- p_rarch->wifi_data = NULL;
- break;
- case RARCH_WIFI_CTL_STOP:
- if ( p_rarch->wifi_driver
- && p_rarch->wifi_driver->stop
- && p_rarch->wifi_data)
- p_rarch->wifi_driver->stop(p_rarch->wifi_data);
- break;
- case RARCH_WIFI_CTL_START:
- if ( p_rarch->wifi_driver
- && p_rarch->wifi_data
- && p_rarch->wifi_driver->start)
- {
- bool wifi_allow = settings->bools.wifi_allow;
- if (wifi_allow)
- return p_rarch->wifi_driver->start(p_rarch->wifi_data);
- }
- return false;
- case RARCH_WIFI_CTL_INIT:
- /* Resource leaks will follow if wifi is initialized twice. */
- if (p_rarch->wifi_data)
- return false;
-
- wifi_driver_ctl(RARCH_WIFI_CTL_FIND_DRIVER, NULL);
-
- if (p_rarch->wifi_driver && p_rarch->wifi_driver->init)
- {
- p_rarch->wifi_data = p_rarch->wifi_driver->init();
-
- if (p_rarch->wifi_data)
- {
- p_rarch->wifi_driver->enable(p_rarch->wifi_data,
- settings->bools.wifi_enabled);
- }
- else
- {
- RARCH_ERR("Failed to initialize wifi driver. Will continue without wifi.\n");
- wifi_driver_ctl(RARCH_WIFI_CTL_UNSET_ACTIVE, NULL);
- }
- }
-
- break;
- default:
- break;
- }
-
- return false;
-}
-
/* UI COMPANION */
void ui_companion_set_foreground(unsigned enable)
@@ -12505,7 +12334,9 @@ bool retroarch_main_init(int argc, char *argv[])
retroarch_fail(1, "find_camera_driver()");
bluetooth_driver_ctl(RARCH_BLUETOOTH_CTL_FIND_DRIVER, NULL);
+#ifdef HAVE_WIFI
wifi_driver_ctl(RARCH_WIFI_CTL_FIND_DRIVER, NULL);
+#endif
location_driver_find_driver(settings,
"location driver", verbosity_enabled);
#ifdef HAVE_MENU
diff --git a/tasks/task_wifi.c b/tasks/task_wifi.c
index b1195f745e..e55e17c702 100644
--- a/tasks/task_wifi.c
+++ b/tasks/task_wifi.c
@@ -23,8 +23,8 @@
#include "tasks_internal.h"
#include "../msg_hash.h"
+#include "../network/wifi_driver.h"
#include "../verbosity.h"
-#include "../wifi/wifi_driver.h"
#define FUNC_PUSH_TASK(funcname, handlerfunc, message) \
bool funcname(retro_task_callback_t cb) \