Display which wifi network we're connected to

This commit is contained in:
Jean-André Santoni 2016-09-22 15:47:14 +02:00 committed by twinaphex
parent fcdc6187cb
commit cd0ec01928
6 changed files with 87 additions and 10 deletions

View File

@ -41,6 +41,7 @@
#include "../../paths.h"
#include "../../runloop.h"
#include "../../intl/intl.h"
#include "../../wifi/wifi_driver.h"
#ifndef BIND_ACTION_GET_VALUE
#define BIND_ACTION_GET_VALUE(cbs, name) \
@ -707,6 +708,22 @@ static void menu_action_setting_disp_set_label_xmb_theme(
}
}
static void menu_action_setting_disp_set_label_wifi_is_online(
file_list_t* list,
unsigned *w, unsigned type, unsigned i,
const char *label,
char *s, size_t len,
const char *entry_label,
const char *path,
char *s2, size_t len2)
{
strlcpy(s2, path, len2);
*w = 19;
if (driver_wifi_ssid_is_online(i))
strlcpy(s, "Online", len);
}
static void menu_action_setting_disp_set_label_xmb_menu_color_theme(
file_list_t* list,
unsigned *w, unsigned type, unsigned i,
@ -1515,6 +1532,10 @@ static int menu_cbs_init_bind_get_string_representation_compare_label(
BIND_ACTION_GET_VALUE(cbs,
menu_action_setting_disp_set_label_xmb_theme);
break;
case MENU_ENUM_LABEL_CONNECT_WIFI:
BIND_ACTION_GET_VALUE(cbs,
menu_action_setting_disp_set_label_wifi_is_online);
break;
case MENU_ENUM_LABEL_XMB_MENU_COLOR_THEME:
BIND_ACTION_GET_VALUE(cbs,
menu_action_setting_disp_set_label_xmb_menu_color_theme);

View File

@ -4674,7 +4674,8 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
{
unsigned i;
struct string_list *ssid_list = string_list_new();
driver_wifi_scan(ssid_list);
driver_wifi_scan();
driver_wifi_get_ssids(ssid_list);
for (i = 0; i < ssid_list->size; i++)
{

View File

@ -17,6 +17,8 @@
#include <file/file_path.h>
#include <compat/strl.h>
static struct string_list* lines;
static void *connmanctl_init(const char *device, uint64_t caps,
unsigned width, unsigned height)
{
@ -40,29 +42,55 @@ static void connmanctl_stop(void *data)
(void)data;
}
static void connmanctl_scan(struct string_list *list)
static void connmanctl_scan()
{
union string_list_elem_attr attr;
attr.i = RARCH_FILETYPE_UNSET;
char line[512];
if (lines)
free(lines);
lines = string_list_new();
pclose(popen("connmanctl scan wifi", "r"));
FILE* serv_file = popen("connmanctl services", "r");
while (fgets (line, 512, serv_file) != NULL)
{
char ssid[20];
strlcpy(ssid, line+4, sizeof(ssid));
string_list_append(list, ssid, attr);
//char ssid[20];
//strlcpy(ssid, line+4, sizeof(ssid));
string_list_append(lines, line, attr);
}
pclose(serv_file);
}
static void connmanctl_get_ssids(struct string_list* ssids)
{
unsigned i;
union string_list_elem_attr attr;
attr.i = RARCH_FILETYPE_UNSET;
for (i = 0; i < lines->size; i++)
{
const char *line = lines->elems[i].data;
char ssid[20];
strlcpy(ssid, line+4, sizeof(ssid));
string_list_append(ssids, ssid, attr);
}
}
static bool connmanctl_ssid_is_online(unsigned i)
{
const char *line = lines->elems[i].data;
return line[2] == 'O';
}
wifi_driver_t wifi_connmanctl = {
connmanctl_init,
connmanctl_free,
connmanctl_start,
connmanctl_stop,
connmanctl_scan,
connmanctl_get_ssids,
connmanctl_ssid_is_online,
"connmanctl",
};

View File

@ -38,15 +38,26 @@ static void nullwifi_stop(void *data)
(void)data;
}
static void nullwifi_scan(struct string_list *list)
static void nullwifi_scan()
{
}
static void nullwifi_get_ssids(struct string_list* ssids)
{
}
static bool nullwifi_ssid_is_online(unsigned i)
{
return false;
}
wifi_driver_t wifi_null = {
nullwifi_init,
nullwifi_free,
nullwifi_start,
nullwifi_stop,
nullwifi_scan,
nullwifi_get_ssids,
nullwifi_ssid_is_online,
"null",
};

View File

@ -96,9 +96,19 @@ bool driver_wifi_start(void)
return wifi_driver_ctl(RARCH_WIFI_CTL_START, NULL);
}
void driver_wifi_scan(struct string_list *list)
void driver_wifi_scan()
{
wifi_driver->scan(list);
wifi_driver->scan();
}
void driver_wifi_get_ssids(struct string_list* ssids)
{
wifi_driver->get_ssids(ssids);
}
bool driver_wifi_ssid_is_online(unsigned i)
{
return wifi_driver->ssid_is_online(i);
}
bool wifi_driver_ctl(enum rarch_wifi_ctl_state state, void *data)

View File

@ -53,7 +53,9 @@ typedef struct wifi_driver
bool (*start)(void *data);
void (*stop)(void *data);
void (*scan)(struct string_list *list);
void (*scan)();
void (*get_ssids)(struct string_list *list);
bool (*ssid_is_online)(unsigned i);
const char *ident;
} wifi_driver_t;
@ -94,7 +96,11 @@ void driver_wifi_stop(void);
bool driver_wifi_start(void);
void driver_wifi_scan(struct string_list *list);
void driver_wifi_scan();
void driver_wifi_get_ssids(struct string_list *list);
bool driver_wifi_ssid_is_online(unsigned i);
bool wifi_driver_ctl(enum rarch_wifi_ctl_state state, void *data);