diff --git a/src/app/webApi.cpp b/src/app/webApi.cpp index 49bf63c..a7061a8 100644 --- a/src/app/webApi.cpp +++ b/src/app/webApi.cpp @@ -400,38 +400,38 @@ boolean ioSetLevelApi(WEBServer::HttpRequestData &HRD, WiFiClient *wc if(HRD.getParams("P0") != NULL) { - p->getIoManager().getPcf().digitalWrite(PCF8574::P0,atoi(HRD.getParams("P0")->getString())); + p->getIOManager().getPcf().digitalWrite(PCF8574::P0,atoi(HRD.getParams("P0")->getString())); } if(HRD.getParams("P1") != NULL) { - p->getIoManager().getPcf().digitalWrite(PCF8574::P1,atoi(HRD.getParams("P1")->getString())); + p->getIOManager().getPcf().digitalWrite(PCF8574::P1,atoi(HRD.getParams("P1")->getString())); } if(HRD.getParams("P2") != NULL) { - p->getIoManager().getPcf().digitalWrite(PCF8574::P2,atoi(HRD.getParams("P2")->getString())); + p->getIOManager().getPcf().digitalWrite(PCF8574::P2,atoi(HRD.getParams("P2")->getString())); } if(HRD.getParams("P3") != NULL) { - p->getIoManager().getPcf().digitalWrite(PCF8574::P3,atoi(HRD.getParams("P3")->getString())); + p->getIOManager().getPcf().digitalWrite(PCF8574::P3,atoi(HRD.getParams("P3")->getString())); } if(HRD.getParams("P4") != NULL) { - p->getIoManager().getPcf().digitalWrite(PCF8574::P4,atoi(HRD.getParams("P4")->getString())); + p->getIOManager().getPcf().digitalWrite(PCF8574::P4,atoi(HRD.getParams("P4")->getString())); } if(HRD.getParams("P5") != NULL) { - p->getIoManager().getPcf().digitalWrite(PCF8574::P5,atoi(HRD.getParams("P5")->getString())); + p->getIOManager().getPcf().digitalWrite(PCF8574::P5,atoi(HRD.getParams("P5")->getString())); } if(HRD.getParams("P6") != NULL) { - p->getIoManager().getPcf().digitalWrite(PCF8574::P6,atoi(HRD.getParams("P6")->getString())); + p->getIOManager().getPcf().digitalWrite(PCF8574::P6,atoi(HRD.getParams("P6")->getString())); } if(HRD.getParams("P7") != NULL) { - p->getIoManager().getPcf().digitalWrite(PCF8574::P7,atoi(HRD.getParams("P7")->getString())); + p->getIOManager().getPcf().digitalWrite(PCF8574::P7,atoi(HRD.getParams("P7")->getString())); } - p->getIoManager().getPcf().digitalReadAll(ioState);//We retrieve the IO state + 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)); @@ -447,7 +447,7 @@ boolean ioGetModeApi(WEBServer::HttpRequestData &HRD, WiFiClient *wc, char helperBuffer[20] = ""; const char * const IN = "IN", * const OUT = "OUT"; - p->getIoManager().getPcf().getPinModeAll(ioMode);//We retrieve the IO modes aka INPUT or OUTPUT + p->getIOManager().getPcf().getPinModeAll(ioMode);//We retrieve the IO modes aka INPUT or OUTPUT if(HRD.getParams.count() == 0)//We send every IO mode { @@ -521,38 +521,38 @@ boolean ioSetModeApi(WEBServer::HttpRequestData &HRD, WiFiClient *wc, if(HRD.getParams("P0") != NULL) { - p->getIoManager().getPcf().pinMode(PCF8574::P0,strcmp(HRD.getParams("P0")->getString(), IN) == 0 ? INPUT:OUTPUT); + p->getIOManager().getPcf().pinMode(PCF8574::P0,strcmp(HRD.getParams("P0")->getString(), IN) == 0 ? INPUT:OUTPUT); } if(HRD.getParams("P1") != NULL) { - p->getIoManager().getPcf().pinMode(PCF8574::P1,strcmp(HRD.getParams("P1")->getString(), IN) == 0 ? INPUT:OUTPUT); + p->getIOManager().getPcf().pinMode(PCF8574::P1,strcmp(HRD.getParams("P1")->getString(), IN) == 0 ? INPUT:OUTPUT); } if(HRD.getParams("P2") != NULL) { - p->getIoManager().getPcf().pinMode(PCF8574::P2,strcmp(HRD.getParams("P2")->getString(), IN) == 0 ? INPUT:OUTPUT); + p->getIOManager().getPcf().pinMode(PCF8574::P2,strcmp(HRD.getParams("P2")->getString(), IN) == 0 ? INPUT:OUTPUT); } if(HRD.getParams("P3") != NULL) { - p->getIoManager().getPcf().pinMode(PCF8574::P3,strcmp(HRD.getParams("P3")->getString(), IN) == 0 ? INPUT:OUTPUT); + p->getIOManager().getPcf().pinMode(PCF8574::P3,strcmp(HRD.getParams("P3")->getString(), IN) == 0 ? INPUT:OUTPUT); } if(HRD.getParams("P4") != NULL) { - p->getIoManager().getPcf().pinMode(PCF8574::P4,strcmp(HRD.getParams("P4")->getString(), IN) == 0 ? INPUT:OUTPUT); + p->getIOManager().getPcf().pinMode(PCF8574::P4,strcmp(HRD.getParams("P4")->getString(), IN) == 0 ? INPUT:OUTPUT); } if(HRD.getParams("P5") != NULL) { - p->getIoManager().getPcf().pinMode(PCF8574::P5,strcmp(HRD.getParams("P5")->getString(), IN) == 0 ? INPUT:OUTPUT); + p->getIOManager().getPcf().pinMode(PCF8574::P5,strcmp(HRD.getParams("P5")->getString(), IN) == 0 ? INPUT:OUTPUT); } if(HRD.getParams("P6") != NULL) { - p->getIoManager().getPcf().pinMode(PCF8574::P6,strcmp(HRD.getParams("P6")->getString(), IN) == 0 ? INPUT:OUTPUT); + p->getIOManager().getPcf().pinMode(PCF8574::P6,strcmp(HRD.getParams("P6")->getString(), IN) == 0 ? INPUT:OUTPUT); } if(HRD.getParams("P7") != NULL) { - p->getIoManager().getPcf().pinMode(PCF8574::P7,strcmp(HRD.getParams("P7")->getString(), IN) == 0 ? INPUT:OUTPUT); + p->getIOManager().getPcf().pinMode(PCF8574::P7,strcmp(HRD.getParams("P7")->getString(), IN) == 0 ? INPUT:OUTPUT); } - p->getIoManager().getPcf().getPinModeAll(ioMode);//We retrieve the IO modes aka INPUT or OUTPUT + 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)); @@ -563,22 +563,22 @@ boolean ioSetModeApi(WEBServer::HttpRequestData &HRD, WiFiClient *wc, boolean swVersionApi(WEBServer::HttpRequestData &HRD, WiFiClient *wc, void *pData) { (void)HRD; - (void)pData; + SAB *p = (SAB *)pData; char buffer[100] = ""; - sprintf(buffer ,"{\"status\":\"ok\",\"version\":\"%s\"}", SOFT_VERSION); + sprintf(buffer ,"{\"status\":\"ok\",\"version\":\"%s\"}", p->getSoftVersion()); WEBServer::sendHTTPHeader(wc, HttpConstants::httpMIMETypeToString(HttpConstants::APPLICATION_JSON), strlen(buffer)); wc->print(buffer); return true; } -boolean otaUpdateApi(WEBServer::HttpRequestData &HRD, WiFiClient *wc, void *pData) +boolean otaUpdateUploadApi(WEBServer::HttpRequestData &HRD, WiFiClient *wc, void *pData) { (void)HRD; (void)pData; - Serial.printf("OTA Update resquest\n#"); + Serial.printf("OTA Update Upload resquest\n#"); char buffer[30] = ""; size_t read(0), cnt(0); @@ -602,3 +602,58 @@ boolean otaUpdateApi(WEBServer::HttpRequestData &HRD, WiFiClient *wc, return true; } + +boolean otaUpdateRemoteApi(WEBServer::HttpRequestData &HRD, WiFiClient *wc, void *pData) +{ + SAB *p = (SAB *)pData; + + char buffer[100] = ""; + boolean updateDevice(false); + + if(!p->getOTAManager().isEnabled()) + { + strcpy(buffer ,"{\"status\":\"ok\",\"ota\":\"disabled\"}"); + } + else + { + OTAUpdater::UpdateInfo updateInfo = p->getOTAManager().getOTAUpdater().fetchUpdateInfo(p->getSoftVersion()); + + switch(updateInfo.info) + { + case OTAUpdater::UpdateInfo::HTTP_NO_UPDATE : + strcpy(buffer ,"{\"status\":\"ok\",\"ota\":\"enabled\",\"msg\":\"No update available\"}"); + break; + case OTAUpdater::UpdateInfo::HTTP_UPDATE_AUTH_ERROR : + strcpy(buffer ,"{\"status\":\"error\",\"ota\":\"enabled\",\"msg\":\"OTA auth error\"}"); + break; + case OTAUpdater::UpdateInfo::HTTP_UPDATE_AVAILABLE : + //Then we update the firmware + if(HRD.getParams("update") != NULL) + { + sprintf(buffer ,"{\"status\":\"ok\",\"ota\":\"enabled\",\"msg\":\"Updating the device, please wait\",\"version\":\"%s\"}", updateInfo.version); + updateDevice = true; + } + else //This means, we only want to get the new version number + { + sprintf(buffer ,"{\"status\":\"ok\",\"ota\":\"enabled\",\"msg\":\"Update available\",\"version\":\"%s\"}", updateInfo.version); + } + break; + case OTAUpdater::UpdateInfo::HTTP_UPDATE_REACH_ERROR : + strcpy(buffer ,"{\"status\":\"error\",\"ota\":\"enabled\",\"msg\":\"OTA reach error\"}"); + break; + default: + strcpy(buffer ,"{\"status\":\"error\",\"ota\":\"enabled\",\"msg\":\"Undefined error\"}"); + break; + } + } + + WEBServer::sendHTTPHeader(wc, HttpConstants::httpMIMETypeToString(HttpConstants::APPLICATION_JSON), strlen(buffer)); + wc->print(buffer); + + if(updateDevice) + { + p->getOTAManager().getOTAUpdater().update(p->getSoftVersion()); + } + + return true; +} diff --git a/src/app/webApi.h b/src/app/webApi.h index b0bea69..1cc4569 100644 --- a/src/app/webApi.h +++ b/src/app/webApi.h @@ -31,6 +31,7 @@ boolean ioSetLevelApi(WEBServer::HttpRequestData&, WiFiClient*, void* boolean ioGetModeApi(WEBServer::HttpRequestData&, WiFiClient*, void*); boolean ioSetModeApi(WEBServer::HttpRequestData&, WiFiClient*, void*); boolean swVersionApi(WEBServer::HttpRequestData&, WiFiClient*, void*); -boolean otaUpdateApi(WEBServer::HttpRequestData&, WiFiClient*, void*); +boolean otaUpdateUploadApi(WEBServer::HttpRequestData&, WiFiClient*, void*); +boolean otaUpdateRemoteApi(WEBServer::HttpRequestData&, WiFiClient*, void*); #endif