PCB lives now in its own git repo https://git.la10cy.net/DeltaLima/CanGrow-12V-PCB
197 lines
7 KiB
C
197 lines
7 KiB
C
/*
|
|
*
|
|
* include/Webserver/Page_wifi.h - wifi page header file
|
|
*
|
|
*
|
|
*
|
|
*/
|
|
|
|
|
|
#include "Page_wifi_HTML.h"
|
|
|
|
String WebPage_wifi_ScanNetworks() {
|
|
const static char LogLoc[] PROGMEM= "[Webserver:wifi:ScanNetworks]";
|
|
String html;
|
|
#ifdef DEBUG
|
|
Log.verbose(F("%s scanning for available networks:" CR), LogLoc);
|
|
#endif
|
|
// https://github.com/mathieucarbou/ESPAsyncWebServer/blob/main/docs/index.md#scanning-for-available-wifi-networks
|
|
int n = WiFi.scanComplete();
|
|
if(n == -2){
|
|
WiFi.scanNetworks(true);
|
|
} else if(n){
|
|
for (int i = 0; i < n; ++i){
|
|
html += F("<option value='");
|
|
html += WiFi.SSID(i);
|
|
html += F("'>");
|
|
html += WiFi.SSID(i);
|
|
html += F("</option>");
|
|
/* dirty hack, arduino-log somehow destroys wifi names in output
|
|
/* so i have to print them oldschool with Serial.println
|
|
*/
|
|
#ifdef DEBUG
|
|
Log.verbose(F("%s - "), LogLoc);
|
|
Serial.println(WiFi.SSID(i));
|
|
#endif
|
|
}
|
|
WiFi.scanDelete();
|
|
if(WiFi.scanComplete() == -2){
|
|
WiFi.scanNetworks(true);
|
|
}
|
|
}
|
|
return html;
|
|
}
|
|
|
|
// https://techtutorialsx.com/2018/07/23/esp32-arduino-http-server-template-processing-with-multiple-placeholders/
|
|
String Proc_WebPage_wifi(const String& var) {
|
|
if(TestHeaderFooter(var)) {
|
|
return AddHeaderFooter(var, 3);
|
|
//CURRENT_SETTINGS
|
|
} else if(var == "CURRENT_SETTINGS") {
|
|
if(strlen(config.wifi.ssid) > 0) {
|
|
return String(Page_wifi_HTML_CURRENT_SETTINGS);
|
|
} else {
|
|
return String();
|
|
}
|
|
} else if(var == "CONFIGWIFI_SSID") {
|
|
return String(config.wifi.ssid);
|
|
} else if(var == "CONFIGWIFI_DHCP") {
|
|
return String(config.wifi.dhcp);
|
|
} else if(var == "CONFIGWIFI_IP") {
|
|
return String(WiFi.localIP().toString());
|
|
} else if(var == "CONFIGWIFI_NETMASK") {
|
|
return String(WiFi.subnetMask().toString());
|
|
} else if(var == "CONFIGWIFI_GATEWAY") {
|
|
return String(WiFi.gatewayIP().toString());
|
|
} else if(var == "CONFIGWIFI_DNS") {
|
|
return String(WiFi.dnsIP().toString());
|
|
} else if(var == "WIFI_LIST") {
|
|
return String(WebPage_wifi_ScanNetworks());
|
|
} else {
|
|
return String();
|
|
}
|
|
}
|
|
|
|
|
|
String Proc_WebPage_wifi_POST(const String& var) {
|
|
if(var == "SAVE_MSG") {
|
|
return String(Common_HTML_SAVE_MSG);
|
|
} else {
|
|
return Proc_WebPage_wifi(var);
|
|
}
|
|
}
|
|
|
|
String Proc_WebPage_wifi_POST_ERR(const String& var) {
|
|
if(var == "SAVE_MSG") {
|
|
return String(Common_HTML_SAVE_MSG_ERR);
|
|
} else {
|
|
return Proc_WebPage_wifi(var);
|
|
}
|
|
}
|
|
|
|
void WebPage_wifi(AsyncWebServerRequest *request) {
|
|
const static char LogLoc[] PROGMEM = "[Webserver:wifi]";
|
|
|
|
if(request->method() == HTTP_POST) {
|
|
if(request->hasParam("config.wifi.ssid", true)) {
|
|
const AsyncWebParameter* p_ssid = request->getParam("config.wifi.ssid", true);
|
|
strlcpy(config.wifi.ssid, p_ssid->value().c_str(), sizeof(config.wifi.ssid));
|
|
|
|
}
|
|
|
|
if(request->hasParam("config.wifi.password", true)) {
|
|
const AsyncWebParameter* p_password = request->getParam("config.wifi.password", true);
|
|
strlcpy(config.wifi.password, p_password->value().c_str(), sizeof(config.wifi.password));
|
|
}
|
|
|
|
|
|
if(
|
|
(request->hasParam("config.wifi.ip0", true)) &&
|
|
(request->hasParam("config.wifi.ip1", true)) &&
|
|
(request->hasParam("config.wifi.ip2", true)) &&
|
|
(request->hasParam("config.wifi.ip3", true))) {
|
|
|
|
const AsyncWebParameter* p_ip0 = request->getParam("config.wifi.ip0", true);
|
|
const AsyncWebParameter* p_ip1 = request->getParam("config.wifi.ip1", true);
|
|
const AsyncWebParameter* p_ip2 = request->getParam("config.wifi.ip2", true);
|
|
const AsyncWebParameter* p_ip3 = request->getParam("config.wifi.ip3", true);
|
|
|
|
config.wifi.ip[0] = p_ip0->value().toInt();
|
|
config.wifi.ip[1] = p_ip1->value().toInt();
|
|
config.wifi.ip[2] = p_ip2->value().toInt();
|
|
config.wifi.ip[3] = p_ip3->value().toInt();
|
|
}
|
|
|
|
|
|
if(
|
|
(request->hasParam("config.wifi.netmask0", true)) &&
|
|
(request->hasParam("config.wifi.netmask1", true)) &&
|
|
(request->hasParam("config.wifi.netmask2", true)) &&
|
|
(request->hasParam("config.wifi.netmask3", true))) {
|
|
|
|
const AsyncWebParameter* p_netmask0 = request->getParam("config.wifi.netmask0", true);
|
|
const AsyncWebParameter* p_netmask1 = request->getParam("config.wifi.netmask1", true);
|
|
const AsyncWebParameter* p_netmask2 = request->getParam("config.wifi.netmask2", true);
|
|
const AsyncWebParameter* p_netmask3 = request->getParam("config.wifi.netmask3", true);
|
|
|
|
config.wifi.netmask[0] = p_netmask0->value().toInt();
|
|
config.wifi.netmask[1] = p_netmask1->value().toInt();
|
|
config.wifi.netmask[2] = p_netmask2->value().toInt();
|
|
config.wifi.netmask[3] = p_netmask3->value().toInt();
|
|
}
|
|
|
|
if(
|
|
(request->hasParam("config.wifi.gateway0", true)) &&
|
|
(request->hasParam("config.wifi.gateway1", true)) &&
|
|
(request->hasParam("config.wifi.gateway2", true)) &&
|
|
(request->hasParam("config.wifi.gateway3", true))) {
|
|
|
|
const AsyncWebParameter* p_gateway0 = request->getParam("config.wifi.gateway0", true);
|
|
const AsyncWebParameter* p_gateway1 = request->getParam("config.wifi.gateway1", true);
|
|
const AsyncWebParameter* p_gateway2 = request->getParam("config.wifi.gateway2", true);
|
|
const AsyncWebParameter* p_gateway3 = request->getParam("config.wifi.gateway3", true);
|
|
|
|
config.wifi.gateway[0] = p_gateway0->value().toInt();
|
|
config.wifi.gateway[1] = p_gateway1->value().toInt();
|
|
config.wifi.gateway[2] = p_gateway2->value().toInt();
|
|
config.wifi.gateway[3] = p_gateway3->value().toInt();
|
|
}
|
|
|
|
if(
|
|
(request->hasParam("config.wifi.dns0", true)) &&
|
|
(request->hasParam("config.wifi.dns1", true)) &&
|
|
(request->hasParam("config.wifi.dns2", true)) &&
|
|
(request->hasParam("config.wifi.dns3", true))) {
|
|
|
|
const AsyncWebParameter* p_dns0 = request->getParam("config.wifi.dns0", true);
|
|
const AsyncWebParameter* p_dns1 = request->getParam("config.wifi.dns1", true);
|
|
const AsyncWebParameter* p_dns2 = request->getParam("config.wifi.dns2", true);
|
|
const AsyncWebParameter* p_dns3 = request->getParam("config.wifi.dns3", true);
|
|
|
|
config.wifi.dns[0] = p_dns0->value().toInt();
|
|
config.wifi.dns[1] = p_dns1->value().toInt();
|
|
config.wifi.dns[2] = p_dns2->value().toInt();
|
|
config.wifi.dns[3] = p_dns3->value().toInt();
|
|
}
|
|
|
|
if(request->hasParam("config.wifi.dhcp", true)) {
|
|
const AsyncWebParameter* p_dhcp = request->getParam("config.wifi.dhcp", true);
|
|
|
|
config.wifi.dhcp = p_dhcp->value().toInt();
|
|
}
|
|
|
|
if(SaveConfig()) {
|
|
// we need a restart to apply the new settings
|
|
needRestart = true;
|
|
Log.notice(F("%s config saved" CR), LogLoc);
|
|
request->send_P(200, TEXT_HTML, Page_wifi_HTML, Proc_WebPage_wifi_POST);
|
|
} else {
|
|
Log.error(F("%s ERROR while saving config" CR), LogLoc);
|
|
request->send_P(200, TEXT_HTML, Page_wifi_HTML, Proc_WebPage_wifi_POST_ERR);
|
|
}
|
|
|
|
} else {
|
|
request->send_P(200, TEXT_HTML, Page_wifi_HTML, Proc_WebPage_wifi);
|
|
}
|
|
|
|
}
|