Files
ESPEasy/src/WebServer_WiFiScanner.ino
T
Gijs Noorlander 37538f4124 [Build Size] Replace all TXBuffer += calls where possible
The TXBuffer is a "header only" implementation.
This means it may be compiled "inline" and thus takes quite a bit of compiled code.
This makes the binary larger and slows the ESP down.

Now it is even possible to make core 2.6.3 builds using "minimal OTA".
The "Dev" build is roughly 55k smaller.
2020-02-28 02:28:03 +01:00

104 lines
3.0 KiB
Arduino

#ifdef WEBSERVER_NEW_UI
// ********************************************************************************
// Web Interface Wifi scanner
// ********************************************************************************
void handle_wifiscanner_json() {
checkRAM(F("handle_wifiscanner"));
if (!isLoggedIn()) { return; }
navMenuIndex = MENU_INDEX_TOOLS;
TXBuffer.startJsonStream();
addHtml("[{");
bool firstentry = true;
int n = WiFi.scanNetworks(false, true);
for (int i = 0; i < n; ++i)
{
if (firstentry) { firstentry = false; }
else { addHtml(",{"); }
String authType;
switch (WiFi.encryptionType(i)) {
# ifdef ESP32
case WIFI_AUTH_OPEN: authType = F("open"); break;
case WIFI_AUTH_WEP: authType = F("WEP"); break;
case WIFI_AUTH_WPA_PSK: authType = F("WPA/PSK"); break;
case WIFI_AUTH_WPA2_PSK: authType = F("WPA2/PSK"); break;
case WIFI_AUTH_WPA_WPA2_PSK: authType = F("WPA/WPA2/PSK"); break;
case WIFI_AUTH_WPA2_ENTERPRISE: authType = F("WPA2 Enterprise"); break;
# else // ifdef ESP32
case ENC_TYPE_WEP: authType = F("WEP"); break;
case ENC_TYPE_TKIP: authType = F("WPA/PSK"); break;
case ENC_TYPE_CCMP: authType = F("WPA2/PSK"); break;
case ENC_TYPE_NONE: authType = F("open"); break;
case ENC_TYPE_AUTO: authType = F("WPA/WPA2/PSK"); break;
# endif // ifdef ESP32
default:
break;
}
if (authType.length() > 0) {
stream_next_json_object_value(F("auth"), authType);
}
stream_next_json_object_value(getLabel(LabelType::SSID), WiFi.SSID(i));
stream_next_json_object_value(getLabel(LabelType::BSSID), WiFi.BSSIDstr(i));
stream_next_json_object_value(getLabel(LabelType::CHANNEL), String(WiFi.channel(i)));
stream_last_json_object_value(getLabel(LabelType::WIFI_RSSI), String(WiFi.RSSI(i)));
}
if (firstentry) {
addHtml("}");
}
addHtml("]");
TXBuffer.endStream();
}
#endif // WEBSERVER_NEW_UI
#ifdef WEBSERVER_WIFI_SCANNER
void handle_wifiscanner() {
checkRAM(F("handle_wifiscanner"));
if (!isLoggedIn()) { return; }
WiFiMode_t cur_wifimode = WiFi.getMode();
WifiScan(false);
setWifiMode(cur_wifimode);
navMenuIndex = MENU_INDEX_TOOLS;
TXBuffer.startStream();
sendHeadandTail_stdtemplate(_HEAD);
html_table_class_multirow();
html_TR();
html_table_header(getLabel(LabelType::SSID));
html_table_header(getLabel(LabelType::BSSID));
html_table_header(F("Network info"));
html_table_header(F("RSSI"), 50);
const int8_t scanCompleteStatus = WiFi.scanComplete();
if (scanCompleteStatus <= 0) {
addHtml(F("No Access Points found"));
}
else
{
for (int i = 0; i < scanCompleteStatus; ++i)
{
html_TR_TD();
int32_t rssi = 0;
addHtml(formatScanResult(i, "<TD>", rssi));
html_TD();
getWiFi_RSSI_icon(rssi, 45);
}
}
html_end_table();
sendHeadandTail_stdtemplate(_TAIL);
TXBuffer.endStream();
}
#endif // ifdef WEBSERVER_WIFI_SCANNER