Wifi: init basic support for Linux

This commit is contained in:
李通洲
2022-12-02 22:34:56 +08:00
parent 911780ba3c
commit 19ec59cca5
3 changed files with 61 additions and 2 deletions
+1 -1
View File
@@ -332,7 +332,7 @@ if(LINUX)
src/detection/terminalshell/terminalshell_linux.c
src/detection/uptime/uptime_linux.c
src/detection/users/users_linux.c
src/detection/wifi/wifi_nosupport.c
src/detection/wifi/wifi_linux.c
src/detection/wmtheme/wmtheme_linux.c
)
elseif(ANDROID)
+1 -1
View File
@@ -74,7 +74,7 @@ All categories not listed here should work without needing a specific implementa
##### Available Modules
```
Title, Separator, OS, Host, Bios, Board, Kernel, Uptime, Processes, Packages, Shell, Resolution, DE, WM, WMTheme, Theme, Icons, Font, Cursor, Terminal, Terminal Font, CPU, CPUUsage, GPU, Memory, Swap, Disk, Battery, Power Adapter, Player, Media, Vulkan, OpenGL, OpenCL, LocalIP, PublicIP, DateTime, Date, Time, Locale, Colors, Break, Custom
Title, Separator, OS, Host, Bios, Board, Kernel, Uptime, Processes, Packages, Shell, Resolution, DE, WM, WMTheme, Theme, Icons, Font, Cursor, Terminal, Terminal Font, CPU, CPUUsage, GPU, Memory, Swap, Disk, Battery, Power Adapter, Player, Media, Vulkan, OpenGL, OpenCL, LocalIP, PublicIP, Wifi, DateTime, Date, Time, Locale, Colors, Break, Custom
```
##### Logos
+59
View File
@@ -0,0 +1,59 @@
#include "wifi.h"
#include "common/io.h"
#include <linux/nl80211.h>
#include <net/if.h>
static const char* detectInf(uint32_t ifIndex, FFWifiResult* wifi)
{
//TODO: play with netlink
FF_UNUSED(ifIndex, wifi);
return "Unimplemented";
}
const char* ffDetectWifi(const FFinstance* instance, FFlist* result)
{
struct if_nameindex* infs = if_nameindex();
if(!infs)
return "if_nameindex() failed";
FFstrbuf path;
ffStrbufInit(&path);
for(struct if_nameindex* i = infs; !(i->if_index == 0 && i->if_name == NULL); ++i)
{
ffStrbufSetF(&path, "/sys/class/net/%s/phy80211", i->if_name);
if(!ffFileExists(path.chars, S_IFDIR))
continue;
FFWifiResult* item = (FFWifiResult*)ffListAdd(result);
ffStrbufInitS(&item->inf.description, i->if_name);
ffStrbufInit(&item->inf.status);
ffStrbufInit(&item->conn.status);
ffStrbufInit(&item->conn.ssid);
ffStrbufInit(&item->conn.macAddress);
ffStrbufInit(&item->conn.phyType);
item->conn.signalQuality = 0.0/0.0;
item->conn.rxRate = 0.0/0.0;
item->conn.txRate = 0.0/0.0;
item->security.enabled = false;
item->security.oneXEnabled = false;
ffStrbufInit(&item->security.algorithm);
ffStrbufSetF(&path, "/sys/class/net/%s/operstate", i->if_name);
if(!ffAppendFileBuffer(path.chars, &item->inf.status) || !ffStrbufEqualS(&item->inf.status, "up"))
continue;
ffStrbufSetF(&path, "/sys/class/net/%s/address", i->if_name);
ffAppendFileBuffer(path.chars, &item->conn.macAddress);
detectInf(i->if_index, item);
}
if_freenameindex(infs);
ffStrbufDestroy(&path);
if(result->length == 0)
return "No wifi interfaces found";
return NULL;
}