mirror of
https://github.com/libretro/RetroArch
synced 2025-02-02 05:54:16 +00:00
Allow connecting wifi networks
This commit is contained in:
parent
cd0ec01928
commit
714db40fa0
@ -48,6 +48,7 @@
|
||||
#include "../../runloop.h"
|
||||
#include "../../verbosity.h"
|
||||
#include "../../lakka.h"
|
||||
#include "../../wifi/wifi_driver.h"
|
||||
|
||||
typedef struct
|
||||
{
|
||||
@ -2858,6 +2859,13 @@ static int action_ok_rdb_entry(const char *path,
|
||||
entry_idx, ACTION_OK_DL_RDB_ENTRY);
|
||||
}
|
||||
|
||||
static int action_ok_wifi(const char *path,
|
||||
const char *label, unsigned type, size_t idx, size_t entry_idx)
|
||||
{
|
||||
driver_wifi_connect_ssid(idx);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int action_ok_content_collection_list(const char *path,
|
||||
const char *label, unsigned type, size_t idx, size_t entry_idx)
|
||||
{
|
||||
@ -3891,6 +3899,9 @@ static int menu_cbs_init_bind_ok_compare_type(menu_file_list_cbs_t *cbs,
|
||||
case FILE_TYPE_RDB_ENTRY:
|
||||
BIND_ACTION_OK(cbs, action_ok_rdb_entry);
|
||||
break;
|
||||
case MENU_WIFI:
|
||||
BIND_ACTION_OK(cbs, action_ok_wifi);
|
||||
break;
|
||||
case FILE_TYPE_CURSOR:
|
||||
switch (menu_label_hash)
|
||||
{
|
||||
|
@ -14,6 +14,7 @@
|
||||
*/
|
||||
|
||||
#include "../wifi_driver.h"
|
||||
#include "../../runloop.h"
|
||||
#include <file/file_path.h>
|
||||
#include <compat/strl.h>
|
||||
|
||||
@ -56,8 +57,11 @@ static void connmanctl_scan()
|
||||
FILE* serv_file = popen("connmanctl services", "r");
|
||||
while (fgets (line, 512, serv_file) != NULL)
|
||||
{
|
||||
//char ssid[20];
|
||||
//strlcpy(ssid, line+4, sizeof(ssid));
|
||||
size_t len = strlen(line);
|
||||
if (len > 0 && line[len-1] == '\n') {
|
||||
line[--len] = '\0';
|
||||
}
|
||||
|
||||
string_list_append(lines, line, attr);
|
||||
}
|
||||
pclose(serv_file);
|
||||
@ -84,6 +88,31 @@ static bool connmanctl_ssid_is_online(unsigned i)
|
||||
return line[2] == 'O';
|
||||
}
|
||||
|
||||
static bool connmanctl_connect_ssid(unsigned i)
|
||||
{
|
||||
const char *line = lines->elems[i].data;
|
||||
char service[128];
|
||||
char command[256];
|
||||
char ln[512];
|
||||
strlcpy(service, line+25, sizeof(service));
|
||||
|
||||
strlcat(command, "connmanctl connect ", sizeof(command));
|
||||
strlcat(command, service, sizeof(command));
|
||||
strlcat(command, " 2>&1", sizeof(command));
|
||||
|
||||
printf("%s\n", command);
|
||||
|
||||
FILE* file = popen(command, "r");
|
||||
while (fgets (ln, 512, file) != NULL)
|
||||
{
|
||||
printf("%s\n", ln);
|
||||
runloop_msg_queue_push(ln, 1, 180, true);
|
||||
}
|
||||
pclose(file);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
wifi_driver_t wifi_connmanctl = {
|
||||
connmanctl_init,
|
||||
connmanctl_free,
|
||||
@ -92,5 +121,6 @@ wifi_driver_t wifi_connmanctl = {
|
||||
connmanctl_scan,
|
||||
connmanctl_get_ssids,
|
||||
connmanctl_ssid_is_online,
|
||||
connmanctl_connect_ssid,
|
||||
"connmanctl",
|
||||
};
|
||||
|
@ -51,6 +51,11 @@ static bool nullwifi_ssid_is_online(unsigned i)
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool nullwifi_connect_ssid(unsigned i)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
wifi_driver_t wifi_null = {
|
||||
nullwifi_init,
|
||||
nullwifi_free,
|
||||
@ -59,5 +64,6 @@ wifi_driver_t wifi_null = {
|
||||
nullwifi_scan,
|
||||
nullwifi_get_ssids,
|
||||
nullwifi_ssid_is_online,
|
||||
nullwifi_connect_ssid,
|
||||
"null",
|
||||
};
|
||||
|
@ -111,6 +111,11 @@ bool driver_wifi_ssid_is_online(unsigned i)
|
||||
return wifi_driver->ssid_is_online(i);
|
||||
}
|
||||
|
||||
bool driver_wifi_connect_ssid(unsigned i)
|
||||
{
|
||||
return wifi_driver->connect_ssid(i);
|
||||
}
|
||||
|
||||
bool wifi_driver_ctl(enum rarch_wifi_ctl_state state, void *data)
|
||||
{
|
||||
settings_t *settings = config_get_ptr();
|
||||
|
@ -56,6 +56,7 @@ typedef struct wifi_driver
|
||||
void (*scan)();
|
||||
void (*get_ssids)(struct string_list *list);
|
||||
bool (*ssid_is_online)(unsigned i);
|
||||
bool (*connect_ssid)(unsigned i);
|
||||
|
||||
const char *ident;
|
||||
} wifi_driver_t;
|
||||
@ -102,6 +103,8 @@ void driver_wifi_get_ssids(struct string_list *list);
|
||||
|
||||
bool driver_wifi_ssid_is_online(unsigned i);
|
||||
|
||||
bool driver_wifi_connect_ssid(unsigned i);
|
||||
|
||||
bool wifi_driver_ctl(enum rarch_wifi_ctl_state state, void *data);
|
||||
|
||||
RETRO_END_DECLS
|
||||
|
Loading…
x
Reference in New Issue
Block a user