mirror of
https://github.com/fastfetch-cli/fastfetch.git
synced 2026-09-13 10:52:08 +02:00
Wifi (Linux): detect frequency & channel number
This commit is contained in:
@@ -43,6 +43,18 @@ typedef enum {
|
|||||||
continue; \
|
continue; \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static uint16_t freq2channel(uint16_t frequency)
|
||||||
|
{
|
||||||
|
// https://github.com/opetryna/win32wifi/blob/master/win32wifi/Win32Wifi.py#L140
|
||||||
|
// FIXME: Does it work for 6 GHz?
|
||||||
|
if (frequency == 2484)
|
||||||
|
return 14;
|
||||||
|
else if (frequency < 2484)
|
||||||
|
return (uint16_t) (frequency - 2407) / 5;
|
||||||
|
else
|
||||||
|
return (frequency / 5) - 1000;
|
||||||
|
}
|
||||||
|
|
||||||
static const char* detectWifiWithNm(FFWifiResult* item, FFstrbuf* buffer)
|
static const char* detectWifiWithNm(FFWifiResult* item, FFstrbuf* buffer)
|
||||||
{
|
{
|
||||||
FFDBusData dbus;
|
FFDBusData dbus;
|
||||||
@@ -130,6 +142,19 @@ static const char* detectWifiWithNm(FFWifiResult* item, FFstrbuf* buffer)
|
|||||||
item->conn.signalQuality = strengthPercent;
|
item->conn.signalQuality = strengthPercent;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (ffStrEquals(key, "Frequency"))
|
||||||
|
{
|
||||||
|
if (item->conn.frequency == 0)
|
||||||
|
{
|
||||||
|
uint32_t frequency;
|
||||||
|
if (ffDBusGetUint(&dbus, &dictIterator, &frequency))
|
||||||
|
{
|
||||||
|
item->conn.frequency = (uint16_t) frequency;
|
||||||
|
if (item->conn.channel == 0)
|
||||||
|
item->conn.channel = freq2channel(item->conn.frequency);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
else if ((ffStrEquals(key, "Flags") && ffDBusGetUint(&dbus, &dictIterator, &flags)) ||
|
else if ((ffStrEquals(key, "Flags") && ffDBusGetUint(&dbus, &dictIterator, &flags)) ||
|
||||||
(ffStrEquals(key, "WpaFlags") && ffDBusGetUint(&dbus, &dictIterator, &wpaFlags)) ||
|
(ffStrEquals(key, "WpaFlags") && ffDBusGetUint(&dbus, &dictIterator, &wpaFlags)) ||
|
||||||
(ffStrEquals(key, "RsnFlags") && ffDBusGetUint(&dbus, &dictIterator, &rsnFlags))
|
(ffStrEquals(key, "RsnFlags") && ffDBusGetUint(&dbus, &dictIterator, &rsnFlags))
|
||||||
@@ -224,6 +249,13 @@ static const char* detectWifiWithIw(FFWifiResult* item, FFstrbuf* buffer)
|
|||||||
ffStrbufSetStatic(&item->conn.protocol, "802.11n (Wi-Fi 4)");
|
ffStrbufSetStatic(&item->conn.protocol, "802.11n (Wi-Fi 4)");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ffStrbufClear(buffer);
|
||||||
|
if(ffParsePropLines(output.chars, "freq: ", buffer))
|
||||||
|
{
|
||||||
|
item->conn.frequency = (uint16_t) ffStrbufToUInt(buffer, 0);
|
||||||
|
item->conn.channel = freq2channel(item->conn.frequency);
|
||||||
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -269,6 +301,30 @@ static const char* detectWifiWithIoctls(FFWifiResult* item)
|
|||||||
if(ioctl(sock, SIOCGIWRATE, &iwr) >= 0)
|
if(ioctl(sock, SIOCGIWRATE, &iwr) >= 0)
|
||||||
item->conn.txRate = iwr.u.bitrate.value / 1000000.;
|
item->conn.txRate = iwr.u.bitrate.value / 1000000.;
|
||||||
|
|
||||||
|
if(ioctl(sock, SIOCGIWFREQ, &iwr) >= 0)
|
||||||
|
{
|
||||||
|
if (iwr.u.freq.e == 0 && iwr.u.freq.m <= 1000)
|
||||||
|
{
|
||||||
|
item->conn.channel = (uint16_t) iwr.u.freq.m;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// convert it to MHz
|
||||||
|
while (iwr.u.freq.e < 6)
|
||||||
|
{
|
||||||
|
iwr.u.freq.m /= 10;
|
||||||
|
iwr.u.freq.e++;
|
||||||
|
}
|
||||||
|
while (iwr.u.freq.e > 6)
|
||||||
|
{
|
||||||
|
iwr.u.freq.m *= 10;
|
||||||
|
iwr.u.freq.e--;
|
||||||
|
}
|
||||||
|
item->conn.frequency = (uint16_t) iwr.u.freq.m;
|
||||||
|
item->conn.channel = freq2channel(item->conn.frequency);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
struct iw_statistics stats;
|
struct iw_statistics stats;
|
||||||
iwr.u.data.pointer = &stats;
|
iwr.u.data.pointer = &stats;
|
||||||
iwr.u.data.length = sizeof(stats);
|
iwr.u.data.length = sizeof(stats);
|
||||||
|
|||||||
Reference in New Issue
Block a user