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