diff --git a/src/modules/wifi/option.h b/src/modules/wifi/option.h index 0dcad05fd..305a95a47 100644 --- a/src/modules/wifi/option.h +++ b/src/modules/wifi/option.h @@ -8,4 +8,6 @@ typedef struct FFWifiOptions { FFModuleBaseInfo moduleInfo; FFModuleArgs moduleArgs; + + FFColorRangeConfig percent; } FFWifiOptions; diff --git a/src/modules/wifi/wifi.c b/src/modules/wifi/wifi.c index 489063f60..16774f932 100644 --- a/src/modules/wifi/wifi.c +++ b/src/modules/wifi/wifi.c @@ -4,7 +4,7 @@ #include "modules/wifi/wifi.h" #include "util/stringUtils.h" -#define FF_WIFI_NUM_FORMAT_ARGS 10 +#define FF_WIFI_NUM_FORMAT_ARGS 11 void ffPrintWifi(FFWifiOptions* options) { @@ -30,22 +30,56 @@ void ffPrintWifi(FFWifiOptions* options) if(options->moduleArgs.outputFormat.length == 0) { ffPrintLogoAndKey(FF_WIFI_MODULE_NAME, moduleIndex, &options->moduleArgs, FF_PRINT_TYPE_DEFAULT); + + FF_STRBUF_AUTO_DESTROY buffer = ffStrbufCreate(); if(item->conn.ssid.length) { - ffStrbufWriteTo(&item->conn.ssid, stdout); - if(item->conn.protocol.length) - printf(" - %s", item->conn.protocol.chars); - if(item->conn.security.length) - printf(" - %s", item->conn.security.chars); - putchar('\n'); + if(item->conn.signalQuality == item->conn.signalQuality) + { + if(instance.config.display.percentType & FF_PERCENTAGE_TYPE_BAR_BIT) + { + ffPercentAppendBar(&buffer, item->conn.signalQuality, options->percent, &options->moduleArgs); + ffStrbufAppendC(&buffer, ' '); + } + } + + if (!(instance.config.display.percentType & FF_PERCENTAGE_TYPE_HIDE_OTHERS_BIT)) + { + ffStrbufAppend(&buffer, &item->conn.ssid); + + if(item->conn.protocol.length) + { + ffStrbufAppendS(&buffer, " - "); + ffStrbufAppend(&buffer, &item->conn.protocol); + } + if(item->conn.security.length) + { + ffStrbufAppendS(&buffer, " - "); + ffStrbufAppend(&buffer, &item->conn.security); + } + ffStrbufAppendC(&buffer, ' '); + } + + if(item->conn.signalQuality == item->conn.signalQuality) + { + if(instance.config.display.percentType & FF_PERCENTAGE_TYPE_NUM_BIT) + ffPercentAppendNum(&buffer, item->conn.signalQuality, options->percent, buffer.length > 0, &options->moduleArgs); + } + + ffStrbufTrimRight(&buffer, ' '); } else { - puts(item->inf.status.chars); + ffStrbufAppend(&buffer, &item->inf.status); } + ffStrbufPutTo(&buffer, stdout); } else { + FF_STRBUF_AUTO_DESTROY percentNum = ffStrbufCreate(); + ffPercentAppendNum(&percentNum, item->conn.signalQuality, options->percent, false, &options->moduleArgs); + FF_STRBUF_AUTO_DESTROY percentBar = ffStrbufCreate(); + ffPercentAppendBar(&percentBar, item->conn.signalQuality, options->percent, &options->moduleArgs); FF_PRINT_FORMAT_CHECKED(FF_WIFI_MODULE_NAME, moduleIndex, &options->moduleArgs, FF_PRINT_TYPE_DEFAULT, FF_WIFI_NUM_FORMAT_ARGS, ((FFformatarg[]){ {FF_FORMAT_ARG_TYPE_STRBUF, &item->inf.description, "inf-desc"}, {FF_FORMAT_ARG_TYPE_STRBUF, &item->inf.status, "inf-status"}, @@ -53,10 +87,11 @@ void ffPrintWifi(FFWifiOptions* options) {FF_FORMAT_ARG_TYPE_STRBUF, &item->conn.ssid, "ssid"}, {FF_FORMAT_ARG_TYPE_STRBUF, &item->conn.macAddress, "mac-address"}, {FF_FORMAT_ARG_TYPE_STRBUF, &item->conn.protocol, "protocol"}, - {FF_FORMAT_ARG_TYPE_DOUBLE, &item->conn.signalQuality, "signal-quality"}, + {FF_FORMAT_ARG_TYPE_DOUBLE, &percentNum, "signal-quality"}, {FF_FORMAT_ARG_TYPE_DOUBLE, &item->conn.rxRate, "rx-rate"}, {FF_FORMAT_ARG_TYPE_DOUBLE, &item->conn.txRate, "tx-rate"}, {FF_FORMAT_ARG_TYPE_STRBUF, &item->conn.security, "security"}, + {FF_FORMAT_ARG_TYPE_STRBUF, &percentBar, "signal-quality-bar"}, })); } @@ -77,6 +112,9 @@ bool ffParseWifiCommandOptions(FFWifiOptions* options, const char* key, const ch if (ffOptionParseModuleArgs(key, subKey, value, &options->moduleArgs)) return true; + if (ffPercentParseCommandOptions(key, subKey, value, &options->percent)) + return true; + return false; } @@ -93,6 +131,9 @@ void ffParseWifiJsonObject(FFWifiOptions* options, yyjson_val* module) if (ffJsonConfigParseModuleArgs(key, val, &options->moduleArgs)) continue; + if (ffPercentParseJsonObject(key, val, &options->percent)) + continue; + ffPrintError(FF_WIFI_MODULE_NAME, 0, &options->moduleArgs, FF_PRINT_TYPE_DEFAULT, "Unknown JSON key %s", key); } } @@ -103,6 +144,8 @@ void ffGenerateWifiJsonConfig(FFWifiOptions* options, yyjson_mut_doc* doc, yyjso ffInitWifiOptions(&defaultOptions); ffJsonConfigGenerateModuleArgsConfig(doc, module, &defaultOptions.moduleArgs, &options->moduleArgs); + + ffPercentGenerateJsonConfig(doc, module, defaultOptions.percent, options->percent); } void ffGenerateWifiJsonResult(FF_MAYBE_UNUSED FFWifiOptions* options, yyjson_mut_doc* doc, yyjson_mut_val* module) @@ -156,10 +199,11 @@ void ffPrintWifiHelpFormat(void) "Connection SSID - ssid", "Connection BSSID - bssid", "Connection protocol - protocol", - "Connection signal quality (percentage) - signal-quality", + "Connection signal quality (percentage num) - signal-quality", "Connection RX rate - rx-rate", "Connection TX rate - tx-rate", "Connection Security algorithm - security", + "Connection signal quality (percentage bar) - signal-quality-bar", })); } @@ -177,6 +221,8 @@ void ffInitWifiOptions(FFWifiOptions* options) ffGenerateWifiJsonConfig ); ffOptionInitModuleArg(&options->moduleArgs); + + options->percent = (FFColorRangeConfig) { 50, 20 }; } void ffDestroyWifiOptions(FFWifiOptions* options)