diff --git a/src/app/WEBServer.h b/src/app/WEBServer.h index 36ad632..352294f 100644 --- a/src/app/WEBServer.h +++ b/src/app/WEBServer.h @@ -104,7 +104,6 @@ class WEBServer : public TCPServer, public HttpConstants { client->printf("\r\n%s: %s", _httpHeadersDictionary.getParameter(i), _httpHeadersDictionary.getAt(i) ? _httpHeadersDictionary.getAt(i)->getString() : ""); } - //client->print("\r\nAccess-Control-Allow-Origin: *"); client->print("\r\n\r\n"); } diff --git a/src/app/app.ino b/src/app/app.ino index 1b88e85..e577bfd 100644 --- a/src/app/app.ino +++ b/src/app/app.ino @@ -74,6 +74,8 @@ void setup() sab.getRtcManager().setDateTime(sab.getRTC_DS3231().now()); } + sab.getWebServerManager().getWEBServer().addHttpHeader("Access-Control-Allow-Origin", "*"); + sab.getWebServerManager().getWEBServer().addApiRoutine("/sab/web/apitester", &(apiTesterApi), NULL); sab.getWebServerManager().getWEBServer().addApiRoutine("/sab/view/next", &(nextViewApi), &sab, WEBServer::GET); sab.getWebServerManager().getWEBServer().addApiRoutine("/sab/view/reloadcfg", &(reloadViewApi), &sab, WEBServer::GET); diff --git a/src/app/webApi.cpp b/src/app/webApi.cpp index 2c57f21..19247c3 100644 --- a/src/app/webApi.cpp +++ b/src/app/webApi.cpp @@ -2,18 +2,18 @@ #include "webApi.h" #include "tasks.h" -boolean apiTesterApi(WEBServer::HttpRequestData &HRD, WiFiClient* wc, void* pData) +boolean apiTesterApi(WEBServer *ws, WEBServer::HttpRequestData &HRD, WiFiClient* wc, void* pData) { (void)HRD; (void)pData; char buffer[] = "{\"status\":\"ok\",\"API\":\"available\"}"; - WEBServer::sendHTTPHeader(wc, HttpConstants::httpMIMETypeToString(HttpConstants::APPLICATION_JSON), strlen(buffer)); + ws->sendHTTPResponse(wc, HttpConstants::httpMIMETypeToString(HttpConstants::APPLICATION_JSON), strlen(buffer)); wc->print(buffer); return true; } -boolean viewByUIDApi(WEBServer::HttpRequestData &HRD, WiFiClient *wc, void *pData) +boolean viewByUIDApi(WEBServer *ws, WEBServer::HttpRequestData &HRD, WiFiClient *wc, void *pData) { SAB *p = (SAB *)pData; char buffer[200]; @@ -33,12 +33,12 @@ boolean viewByUIDApi(WEBServer::HttpRequestData &HRD, WiFiClient *wc, else strcpy(buffer, "{\"status\":\"failed\",\"message\":\"UID parameter empty\"}"); - WEBServer::sendHTTPHeader(wc, HttpConstants::httpMIMETypeToString(HttpConstants::APPLICATION_JSON), strlen(buffer)); + ws->sendHTTPResponse(wc, HttpConstants::httpMIMETypeToString(HttpConstants::APPLICATION_JSON), strlen(buffer)); wc->print(buffer); return true; } -boolean nextViewApi(WEBServer::HttpRequestData &HRD, WiFiClient *wc, void *pData) +boolean nextViewApi(WEBServer *ws, WEBServer::HttpRequestData &HRD, WiFiClient *wc, void *pData) { (void)HRD; SAB *p = (SAB *)pData; @@ -49,12 +49,12 @@ boolean nextViewApi(WEBServer::HttpRequestData &HRD, WiFiClient *wc, else sprintf(buffer, "{\"status\":\"failed\",\"message\":\"%s\"}", p->getScreenManager().getErrorMessage()); - WEBServer::sendHTTPHeader(wc, HttpConstants::httpMIMETypeToString(HttpConstants::APPLICATION_JSON), strlen(buffer)); + ws->sendHTTPResponse(wc, HttpConstants::httpMIMETypeToString(HttpConstants::APPLICATION_JSON), strlen(buffer)); wc->print(buffer); return true; } -boolean reloadViewApi(WEBServer::HttpRequestData &HRD, WiFiClient *wc, void *pData) +boolean reloadViewApi(WEBServer *ws, WEBServer::HttpRequestData &HRD, WiFiClient *wc, void *pData) { (void)HRD; SAB *p = (SAB *)pData; @@ -65,12 +65,12 @@ boolean reloadViewApi(WEBServer::HttpRequestData &HRD, WiFiClient *wc else strcpy(buffer, "{\"status\":\"failed\",\"message\":\"unable to reload config\"}"); - WEBServer::sendHTTPHeader(wc, HttpConstants::httpMIMETypeToString(HttpConstants::APPLICATION_JSON), strlen(buffer)); + ws->sendHTTPResponse(wc, HttpConstants::httpMIMETypeToString(HttpConstants::APPLICATION_JSON), strlen(buffer)); wc->print(buffer); return true; } -boolean rtcGetTimeApi(WEBServer::HttpRequestData &HRD, WiFiClient *wc, void *pData) +boolean rtcGetTimeApi(WEBServer *ws, WEBServer::HttpRequestData &HRD, WiFiClient *wc, void *pData) { (void)HRD; SAB *p = (SAB *)pData; @@ -78,13 +78,13 @@ boolean rtcGetTimeApi(WEBServer::HttpRequestData &HRD, WiFiClient *wc DateTime d = p->getRtcManager().getDateTime(); sprintf(buffer, "{\"status\":\"ok\",\"date\":\"%d/%d/%d\",\"time\":\"%d:%d:%d\"}", d.day(), d.month(), d.year(), d.hour(), d.minute(), d.second()); - WEBServer::sendHTTPHeader(wc, HttpConstants::httpMIMETypeToString(HttpConstants::APPLICATION_JSON), strlen(buffer)); + ws->sendHTTPResponse(wc, HttpConstants::httpMIMETypeToString(HttpConstants::APPLICATION_JSON), strlen(buffer)); wc->print(buffer); return true; } -boolean rtcSetTimeApi(WEBServer::HttpRequestData &HRD, WiFiClient *wc, void *pData) +boolean rtcSetTimeApi(WEBServer *ws, WEBServer::HttpRequestData &HRD, WiFiClient *wc, void *pData) { SAB *p = (SAB *)pData; char buffer[200]; @@ -128,12 +128,12 @@ boolean rtcSetTimeApi(WEBServer::HttpRequestData &HRD, WiFiClient *wc { strcpy(buffer,"{\"status\":\"failed\",\"message\":\"datetime parameter is empty\"}"); } - WEBServer::sendHTTPHeader(wc, HttpConstants::httpMIMETypeToString(HttpConstants::APPLICATION_JSON), strlen(buffer)); + ws->sendHTTPResponse(wc, HttpConstants::httpMIMETypeToString(HttpConstants::APPLICATION_JSON), strlen(buffer)); wc->print(buffer); return true; } -boolean sdCardActionApi(WEBServer::HttpRequestData &HRD, WiFiClient *wc, void *pData) +boolean sdCardActionApi(WEBServer *ws, WEBServer::HttpRequestData &HRD, WiFiClient *wc, void *pData) { SdCardApiPacket *pV = (SdCardApiPacket*)pData; SAB *p = (SAB *)pV->pSab; @@ -176,19 +176,19 @@ boolean sdCardActionApi(WEBServer::HttpRequestData &HRD, WiFiClient * } } - WEBServer::sendHTTPHeader(wc, HttpConstants::httpMIMETypeToString(HttpConstants::APPLICATION_JSON), strlen(buffer)); + ws->sendHTTPResponse(wc, HttpConstants::httpMIMETypeToString(HttpConstants::APPLICATION_JSON), strlen(buffer)); wc->print(buffer); return true; } -boolean espRestartApi(WEBServer::HttpRequestData &HRD, WiFiClient *wc, void *pData) +boolean espRestartApi(WEBServer *ws, WEBServer::HttpRequestData &HRD, WiFiClient *wc, void *pData) { SAB *sab = (SAB*)pData; char buffer[200]; sprintf(buffer,"{\"status\":\"ok\",\"message\":\"module %s in 10 seconds\"}",strstr(HRD.httpResource,"reset") == NULL ? "restarting" : "resetting"); - WEBServer::sendHTTPHeader(wc, HttpConstants::httpMIMETypeToString(HttpConstants::APPLICATION_JSON), strlen(buffer)); + ws->sendHTTPResponse(wc, HttpConstants::httpMIMETypeToString(HttpConstants::APPLICATION_JSON), strlen(buffer)); wc->print(buffer); sab->getTaskSchedulerManager().addTask(sab->getTaskSchedulerManager().findFreeTaskId(), TaskSchedulerManagerHelper::Schedule::scheduleBuilder() @@ -199,12 +199,12 @@ boolean espRestartApi(WEBServer::HttpRequestData &HRD, WiFiClient *wc return true; } -boolean espResetApi(WEBServer::HttpRequestData &HRD, WiFiClient *wc, void *pData) +boolean espResetApi(WEBServer *ws, WEBServer::HttpRequestData &HRD, WiFiClient *wc, void *pData) { - return espRestartApi(HRD, wc, pData); + return espRestartApi(ws, HRD, wc, pData); } -boolean sdCardSizeApi(WEBServer::HttpRequestData &HRD, WiFiClient *wc, void *pData) +boolean sdCardSizeApi(WEBServer *ws, WEBServer::HttpRequestData &HRD, WiFiClient *wc, void *pData) { (void)HRD; SAB *p = (SAB *)pData; @@ -215,12 +215,12 @@ boolean sdCardSizeApi(WEBServer::HttpRequestData &HRD, WiFiClient *wc else sprintf(buffer,"{\"status\":\"ok\",\"card\":\"present\",\"size\":\"%.2f\",\"unit\":\"GByte\"}",size); - WEBServer::sendHTTPHeader(wc, HttpConstants::httpMIMETypeToString(HttpConstants::APPLICATION_JSON), strlen(buffer)); + ws->sendHTTPResponse(wc, HttpConstants::httpMIMETypeToString(HttpConstants::APPLICATION_JSON), strlen(buffer)); wc->print(buffer); return true; } -boolean staWifiInfoApi(WEBServer::HttpRequestData &HRD, WiFiClient *wc, void *pData) +boolean staWifiInfoApi(WEBServer *ws, WEBServer::HttpRequestData &HRD, WiFiClient *wc, void *pData) { (void)HRD; SAB *p = (SAB *)pData; @@ -229,12 +229,12 @@ boolean staWifiInfoApi(WEBServer::HttpRequestData &HRD, WiFiClient *w sprintf(buffer,"{\"status\":\"ok\",\"RSSI\":%d,\"RSSI2\":%d,\"local IP\":\"%u.%u.%u.%u\",\"MAC\":\"%s\"}", p->getConnectivityManager().RSSI(), p->getConnectivityManager().RSSIPercent(), IP[0], IP[1], IP[2], IP[3], p->getConnectivityManager().macAddress().c_str()); - WEBServer::sendHTTPHeader(wc, HttpConstants::httpMIMETypeToString(HttpConstants::APPLICATION_JSON), strlen(buffer)); + ws->sendHTTPResponse(wc, HttpConstants::httpMIMETypeToString(HttpConstants::APPLICATION_JSON), strlen(buffer)); wc->print(buffer); return true; } -boolean apWifiInfoApi(WEBServer::HttpRequestData &HRD, WiFiClient *wc, void *pData) +boolean apWifiInfoApi(WEBServer *ws, WEBServer::HttpRequestData &HRD, WiFiClient *wc, void *pData) { SAB *p = (SAB *)pData; char buffer[300]; @@ -260,17 +260,17 @@ boolean apWifiInfoApi(WEBServer::HttpRequestData &HRD, WiFiClient *wc p->getConnectivityManager().softAPPSK().c_str()); } - WEBServer::sendHTTPHeader(wc, HttpConstants::httpMIMETypeToString(HttpConstants::APPLICATION_JSON), strlen(buffer)); + ws->sendHTTPResponse(wc, HttpConstants::httpMIMETypeToString(HttpConstants::APPLICATION_JSON), strlen(buffer)); wc->print(buffer); return true; } -boolean apScannerApi(WEBServer::HttpRequestData &HRD, WiFiClient *wc, void *pData) +boolean apScannerApi(WEBServer *ws, WEBServer::HttpRequestData &HRD, WiFiClient *wc, void *pData) { (void)HRD; (void)pData; uint8_t number = WiFi.scanNetworks(); - WEBServer::sendHTTPHeader(wc, HttpConstants::httpMIMETypeToString(HttpConstants::APPLICATION_JSON)); + ws->sendHTTPResponse(wc, HttpConstants::httpMIMETypeToString(HttpConstants::APPLICATION_JSON)); wc->print("["); for(uint8_t i(0); i < number; i++) @@ -282,7 +282,7 @@ boolean apScannerApi(WEBServer::HttpRequestData &HRD, WiFiClient *wc, return true; } -boolean systemInfoApi(WEBServer::HttpRequestData &HRD, WiFiClient *wc, void *pData) +boolean systemInfoApi(WEBServer *ws, WEBServer::HttpRequestData &HRD, WiFiClient *wc, void *pData) { (void)HRD; SAB *p = (SAB *)pData; @@ -294,13 +294,13 @@ boolean systemInfoApi(WEBServer::HttpRequestData &HRD, WiFiClient *wc TimeSpan ts(p->getUpTime()); sprintf(buffer, "{\"status\":\"ok\",\"version\":\"%s\",\"CPU freq\":%u,\"free RAM\":%u,\"heap frag\":%u,\"max block\":%u,\"nb views\":%u,\"up time\":{\"days\":%d,\"hours\":%d,\"minutes\":%d,\"seconds\":%d},\"temperature\":{\"level\":%.2f, \"unit\":\"°C\"}}", p->getSoftVersion(), ESP.getCpuFreqMHz(), freeMem, frag, biggestContigMemBlock, p->getScreenManager().getViewCount(), ts.days(), ts.hours(), ts.minutes(), ts.seconds(), p->getRTC_DS3231().getTemperature()); - WEBServer::sendHTTPHeader(wc, HttpConstants::httpMIMETypeToString(HttpConstants::APPLICATION_JSON), strlen(buffer)); + ws->sendHTTPResponse(wc, HttpConstants::httpMIMETypeToString(HttpConstants::APPLICATION_JSON), strlen(buffer)); wc->print(buffer); return true; } -boolean powerInfoApi(WEBServer::HttpRequestData &HRD, WiFiClient *wc, void *pData) +boolean powerInfoApi(WEBServer *ws, WEBServer::HttpRequestData &HRD, WiFiClient *wc, void *pData) { (void)HRD; SAB *p = (SAB *)pData; @@ -309,12 +309,12 @@ boolean powerInfoApi(WEBServer::HttpRequestData &HRD, WiFiClient *wc, sprintf(buffer,"{\"status\":\"ok\",\"power type\":\"%s\",\"level\":\"%u\",\"unit\":\"%%\"}", pi.powerType == PowerManager::USB ? "USB" : "BAT", pi.level); - WEBServer::sendHTTPHeader(wc, HttpConstants::httpMIMETypeToString(HttpConstants::APPLICATION_JSON), strlen(buffer)); + ws->sendHTTPResponse(wc, HttpConstants::httpMIMETypeToString(HttpConstants::APPLICATION_JSON), strlen(buffer)); wc->print(buffer); return true; } /* Changing the MCU frequency on the fly isn"t supported anymore by the SDK. -boolean powerSettingsApi(WEBServer::HttpRequestData &HRD, WiFiClient *wc, void *pData) +boolean powerSettingsApi(WEBServer *ws, WEBServer::HttpRequestData &HRD, WiFiClient *wc, void *pData) { SAB *p = (SAB *)pData; char buffer[300]; @@ -341,14 +341,14 @@ boolean powerSettingsApi(WEBServer::HttpRequestData &HRD, WiFiClient strcpy(buffer, "{\"status\":\"error\",\"message\":\"Parameter FREQ expected\"}"); } - WEBServer::sendHTTPHeader(wc, HttpConstants::httpMIMETypeToString(HttpConstants::APPLICATION_JSON), strlen(buffer)); + ws->sendHTTPResponse(wc, HttpConstants::httpMIMETypeToString(HttpConstants::APPLICATION_JSON), strlen(buffer)); wc->print(buffer); return true; } */ -boolean ioGetLevelApi(WEBServer::HttpRequestData &HRD, WiFiClient *wc, void *pData) +boolean ioGetLevelApi(WEBServer *ws, WEBServer::HttpRequestData &HRD, WiFiClient *wc, void *pData) { boolean *ioState = (boolean *)pData; char buffer[300] = ""; @@ -404,12 +404,12 @@ boolean ioGetLevelApi(WEBServer::HttpRequestData &HRD, WiFiClient *wc strcat(buffer,"}"); } - WEBServer::sendHTTPHeader(wc, HttpConstants::httpMIMETypeToString(HttpConstants::APPLICATION_JSON), strlen(buffer)); + ws->sendHTTPResponse(wc, HttpConstants::httpMIMETypeToString(HttpConstants::APPLICATION_JSON), strlen(buffer)); wc->print(buffer); return true; } -boolean ioSetLevelApi(WEBServer::HttpRequestData &HRD, WiFiClient *wc, void *pData) +boolean ioSetLevelApi(WEBServer *ws, WEBServer::HttpRequestData &HRD, WiFiClient *wc, void *pData) { SAB *p = (SAB *)pData; char buffer[300] = ""; @@ -451,12 +451,12 @@ boolean ioSetLevelApi(WEBServer::HttpRequestData &HRD, WiFiClient *wc p->getIOManager().getPcf().digitalReadAll(ioState);//We retrieve the IO state sprintf(buffer,"{\"status\":\"ok\",\"P0\":\"%d\",\"P1\":\"%d\",\"P2\":\"%d\",\"P3\":\"%d\",\"P4\":\"%d\",\"P5\":\"%d\",\"P6\":\"%d\",\"P7\":\"%d\"}",ioState[0],ioState[1],ioState[2],ioState[3],ioState[4],ioState[5],ioState[6],ioState[7]); - WEBServer::sendHTTPHeader(wc, HttpConstants::httpMIMETypeToString(HttpConstants::APPLICATION_JSON), strlen(buffer)); + ws->sendHTTPResponse(wc, HttpConstants::httpMIMETypeToString(HttpConstants::APPLICATION_JSON), strlen(buffer)); wc->print(buffer); return true; } -boolean ioGetModeApi(WEBServer::HttpRequestData &HRD, WiFiClient *wc, void *pData) +boolean ioGetModeApi(WEBServer *ws, WEBServer::HttpRequestData &HRD, WiFiClient *wc, void *pData) { SAB *p = (SAB *)pData; boolean ioMode[8] = {0}; @@ -524,12 +524,12 @@ boolean ioGetModeApi(WEBServer::HttpRequestData &HRD, WiFiClient *wc, strcat(buffer," }"); } - WEBServer::sendHTTPHeader(wc, HttpConstants::httpMIMETypeToString(HttpConstants::APPLICATION_JSON), strlen(buffer)); + ws->sendHTTPResponse(wc, HttpConstants::httpMIMETypeToString(HttpConstants::APPLICATION_JSON), strlen(buffer)); wc->print(buffer); return true; } -boolean ioSetModeApi(WEBServer::HttpRequestData &HRD, WiFiClient *wc, void *pData) +boolean ioSetModeApi(WEBServer *ws, WEBServer::HttpRequestData &HRD, WiFiClient *wc, void *pData) { SAB *p = (SAB *)pData; char buffer[300] = ""; @@ -572,12 +572,12 @@ boolean ioSetModeApi(WEBServer::HttpRequestData &HRD, WiFiClient *wc, p->getIOManager().getPcf().getPinModeAll(ioMode);//We retrieve the IO modes aka INPUT or OUTPUT sprintf(buffer,"{\"status\":\"ok\",\"P0\":\"%s\",\"P1\":\"%s\",\"P2\":\"%s\",\"P3\":\"%s\",\"P4\":\"%s\",\"P5\":\"%s\",\"P6\":\"%s\",\"P7\":\"%s\"}",ioMode[0] ? OUT:IN,ioMode[1] ? OUT:IN,ioMode[2] ? OUT:IN,ioMode[3] ? OUT:IN,ioMode[4] ? OUT:IN,ioMode[5] ? OUT:IN,ioMode[6] ? OUT:IN,ioMode[7] ? OUT:IN); - WEBServer::sendHTTPHeader(wc, HttpConstants::httpMIMETypeToString(HttpConstants::APPLICATION_JSON), strlen(buffer)); + ws->sendHTTPResponse(wc, HttpConstants::httpMIMETypeToString(HttpConstants::APPLICATION_JSON), strlen(buffer)); wc->print(buffer); return true; } -boolean otaUpdateUploadApi(WEBServer::HttpRequestData &HRD, WiFiClient *wc, void *pData) +boolean otaUpdateUploadApi(WEBServer *ws, WEBServer::HttpRequestData &HRD, WiFiClient *wc, void *pData) { (void)HRD; (void)pData; @@ -600,13 +600,13 @@ boolean otaUpdateUploadApi(WEBServer::HttpRequestData &HRD, WiFiClien } Serial.println("#"); - WEBServer::sendHTTPHeader(wc, HttpConstants::httpMIMETypeToString(HttpConstants::TEXT_PLAIN), 2); + ws->sendHTTPResponse(wc, HttpConstants::httpMIMETypeToString(HttpConstants::TEXT_PLAIN), 2); wc->print("OK"); return true; } -boolean otaUpdateRemoteApi(WEBServer::HttpRequestData &HRD, WiFiClient *wc, void *pData) +boolean otaUpdateRemoteApi(WEBServer *ws, WEBServer::HttpRequestData &HRD, WiFiClient *wc, void *pData) { SAB *p = (SAB *)pData; @@ -650,7 +650,7 @@ boolean otaUpdateRemoteApi(WEBServer::HttpRequestData &HRD, WiFiClien } } - WEBServer::sendHTTPHeader(wc, HttpConstants::httpMIMETypeToString(HttpConstants::APPLICATION_JSON), strlen(buffer)); + ws->sendHTTPResponse(wc, HttpConstants::httpMIMETypeToString(HttpConstants::APPLICATION_JSON), strlen(buffer)); wc->print(buffer); if(updateDevice) diff --git a/src/app/webApi.h b/src/app/webApi.h index 8671a2a..a92d65b 100644 --- a/src/app/webApi.h +++ b/src/app/webApi.h @@ -3,34 +3,34 @@ #include "SAB.h" #include "views.h" -boolean apiTesterApi(WEBServer::HttpRequestData&, WiFiClient*, void*); -boolean nextViewApi(WEBServer::HttpRequestData&, WiFiClient*, void*); -boolean reloadViewApi(WEBServer::HttpRequestData&, WiFiClient*, void*); -boolean viewByUIDApi(WEBServer::HttpRequestData&, WiFiClient*, void*); -boolean rtcGetTimeApi(WEBServer::HttpRequestData&, WiFiClient*, void*); -boolean rtcSetTimeApi(WEBServer::HttpRequestData&, WiFiClient*, void*); -boolean sdCardSizeApi(WEBServer::HttpRequestData&, WiFiClient*, void*); +boolean apiTesterApi(WEBServer*, WEBServer::HttpRequestData&, WiFiClient*, void*); +boolean nextViewApi(WEBServer*, WEBServer::HttpRequestData&, WiFiClient*, void*); +boolean reloadViewApi(WEBServer*, WEBServer::HttpRequestData&, WiFiClient*, void*); +boolean viewByUIDApi(WEBServer*, WEBServer::HttpRequestData&, WiFiClient*, void*); +boolean rtcGetTimeApi(WEBServer*, WEBServer::HttpRequestData&, WiFiClient*, void*); +boolean rtcSetTimeApi(WEBServer*, WEBServer::HttpRequestData&, WiFiClient*, void*); +boolean sdCardSizeApi(WEBServer*, WEBServer::HttpRequestData&, WiFiClient*, void*); typedef struct sdCardApiPacket { SAB *pSab; View1Packet *pView; } SdCardApiPacket; -boolean sdCardActionApi(WEBServer::HttpRequestData&, WiFiClient*, void*); +boolean sdCardActionApi(WEBServer*, WEBServer::HttpRequestData&, WiFiClient*, void*); -boolean apScannerApi(WEBServer::HttpRequestData&, WiFiClient*, void*); -boolean staWifiInfoApi(WEBServer::HttpRequestData&, WiFiClient*, void*); -boolean apWifiInfoApi(WEBServer::HttpRequestData&, WiFiClient*, void*); -boolean espRestartApi(WEBServer::HttpRequestData&, WiFiClient*, void*); -boolean espResetApi(WEBServer::HttpRequestData&, WiFiClient*, void*); -boolean systemInfoApi(WEBServer::HttpRequestData&, WiFiClient*, void*); -boolean powerInfoApi(WEBServer::HttpRequestData&, WiFiClient*, void*); -boolean powerSettingsApi(WEBServer::HttpRequestData&, WiFiClient*, void*); -boolean ioGetLevelApi(WEBServer::HttpRequestData&, WiFiClient*, void*); -boolean ioSetLevelApi(WEBServer::HttpRequestData&, WiFiClient*, void*); -boolean ioGetModeApi(WEBServer::HttpRequestData&, WiFiClient*, void*); -boolean ioSetModeApi(WEBServer::HttpRequestData&, WiFiClient*, void*); -boolean otaUpdateUploadApi(WEBServer::HttpRequestData&, WiFiClient*, void*); -boolean otaUpdateRemoteApi(WEBServer::HttpRequestData&, WiFiClient*, void*); +boolean apScannerApi(WEBServer*, WEBServer::HttpRequestData&, WiFiClient*, void*); +boolean staWifiInfoApi(WEBServer*, WEBServer::HttpRequestData&, WiFiClient*, void*); +boolean apWifiInfoApi(WEBServer*, WEBServer::HttpRequestData&, WiFiClient*, void*); +boolean espRestartApi(WEBServer*, WEBServer::HttpRequestData&, WiFiClient*, void*); +boolean espResetApi(WEBServer*, WEBServer::HttpRequestData&, WiFiClient*, void*); +boolean systemInfoApi(WEBServer*, WEBServer::HttpRequestData&, WiFiClient*, void*); +boolean powerInfoApi(WEBServer*, WEBServer::HttpRequestData&, WiFiClient*, void*); +boolean powerSettingsApi(WEBServer*, WEBServer::HttpRequestData&, WiFiClient*, void*); +boolean ioGetLevelApi(WEBServer*, WEBServer::HttpRequestData&, WiFiClient*, void*); +boolean ioSetLevelApi(WEBServer*, WEBServer::HttpRequestData&, WiFiClient*, void*); +boolean ioGetModeApi(WEBServer*, WEBServer::HttpRequestData&, WiFiClient*, void*); +boolean ioSetModeApi(WEBServer*, WEBServer::HttpRequestData&, WiFiClient*, void*); +boolean otaUpdateUploadApi(WEBServer*, WEBServer::HttpRequestData&, WiFiClient*, void*); +boolean otaUpdateRemoteApi(WEBServer*, WEBServer::HttpRequestData&, WiFiClient*, void*); #endif