From 8fe8d077bfb6cb8385849ac2cbd67ad4c277f5e0 Mon Sep 17 00:00:00 2001 From: anschrammh Date: Tue, 23 Apr 2019 08:00:26 +0200 Subject: [PATCH] Added new api calls inrelation to the IO's --- src/app/webApi.cpp | 222 ++++++++++++++++++++++++++++++++++++++++++++- src/app/webApi.h | 4 + 2 files changed, 224 insertions(+), 2 deletions(-) diff --git a/src/app/webApi.cpp b/src/app/webApi.cpp index 8f0ec0e..416a711 100644 --- a/src/app/webApi.cpp +++ b/src/app/webApi.cpp @@ -170,7 +170,7 @@ boolean powerInfoApi(WEBServerManager::HttpRequestData &HRD, WiFiClient *wc, voi boolean staWifiInfoApi(WEBServerManager::HttpRequestData &HRD, WiFiClient *wc, void *pData) { SAB *p = (SAB *)pData; - char buffer[200]; + char buffer[300]; IPAddress IP = p->getConnectivityManager().localIP(); sprintf(buffer,"HTTP/1.1 200 OK\r\nContent-Type: application/json\r\n\r\n{ \"status\" : \"ok\", \"RSSI\" : \"%d\", \"local IP\" : \"%u.%u.%u.%u\", \"mac\" : \"%s\" }", p->getConnectivityManager().RSSI(), IP[0], IP[1], IP[2], IP[3], p->getConnectivityManager().macAddress().c_str()); @@ -182,7 +182,7 @@ boolean staWifiInfoApi(WEBServerManager::HttpRequestData &HRD, WiFiClient *wc, v boolean systemInfoApi(WEBServerManager::HttpRequestData &HRD, WiFiClient *wc, void *pData) { SAB *p = (SAB *)pData; - char buffer[200]; + char buffer[300]; uint32_t freeMem; uint16_t biggestContigMemBlock; uint8_t frag; @@ -192,3 +192,221 @@ boolean systemInfoApi(WEBServerManager::HttpRequestData &HRD, WiFiClient *wc, vo wc->print(buffer); return true; } + +boolean ioGetLevelApi(WEBServerManager::HttpRequestData &HRD, WiFiClient *wc, void *pData) +{ + SAB *p = (SAB *)pData; + boolean ioState[8] = {0}; + char buffer[300] = ""; + char helperBuffer[20] = ""; + + p->getIoManager().getPcf().digitalReadAll(ioState);//We retrieve the IO state + + if(HRD.getParams.count() == 0)//We send every IO state + { + sprintf(buffer,"HTTP/1.1 200 OK\r\nContent-Type: application/json\r\n\r\n{ \"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]); + } + else + { + strcpy(buffer,"HTTP/1.1 200 OK\r\nContent-Type: application/json\r\n\r\n{ \"status\" : \"ok\""); + if(HRD.getParams("P0") != NULL) + { + sprintf(helperBuffer,", \"P0\" : \"%d\"",ioState[0]); + strcat(buffer,helperBuffer); + } + if(HRD.getParams("P1") != NULL) + { + sprintf(helperBuffer,", \"P1\" : \"%d\"",ioState[1]); + strcat(buffer,helperBuffer); + } + if(HRD.getParams("P2") != NULL) + { + sprintf(helperBuffer,", \"P2\" : \"%d\"",ioState[2]); + strcat(buffer,helperBuffer); + } + if(HRD.getParams("P3") != NULL) + { + sprintf(helperBuffer,", \"P3\" : \"%d\"",ioState[3]); + strcat(buffer,helperBuffer); + } + if(HRD.getParams("P4") != NULL) + { + sprintf(helperBuffer,", \"P4\" : \"%d\"",ioState[4]); + strcat(buffer,helperBuffer); + } + if(HRD.getParams("P5") != NULL) + { + sprintf(helperBuffer,", \"P5\" : \"%d\"",ioState[5]); + strcat(buffer,helperBuffer); + } + if(HRD.getParams("P6") != NULL) + { + sprintf(helperBuffer,", \"P6\" : \"%d\"",ioState[6]); + strcat(buffer,helperBuffer); + } + if(HRD.getParams("P7") != NULL) + { + sprintf(helperBuffer,", \"P7\" : \"%d\"",ioState[7]); + strcat(buffer,helperBuffer); + } + strcat(buffer," }"); + } + + wc->print(buffer); + return true; +} + +boolean ioSetLevelApi(WEBServerManager::HttpRequestData &HRD, WiFiClient *wc, void *pData) +{ + SAB *p = (SAB *)pData; + char buffer[300] = ""; + boolean ioState[8] = {0}; + + if(HRD.getParams("P0") != NULL) + { + 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())); + } + if(HRD.getParams("P2") != NULL) + { + 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())); + } + if(HRD.getParams("P4") != NULL) + { + 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())); + } + if(HRD.getParams("P6") != NULL) + { + 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().digitalReadAll(ioState);//We retrieve the IO state + sprintf(buffer,"HTTP/1.1 200 OK\r\nContent-Type: application/json\r\n\r\n{ \"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]); + + wc->print(buffer); + return true; +} + +boolean ioGetModeApi(WEBServerManager::HttpRequestData &HRD, WiFiClient *wc, void *pData) +{ + SAB *p = (SAB *)pData; + boolean ioMode[8] = {0}; + char buffer[300] = ""; + char helperBuffer[20] = ""; + + p->getIoManager().getPcf().getPinModeAll(ioMode);//We retrieve the IO modes aka INPUT or OUTPUT + + if(HRD.getParams.count() == 0)//We send every IO mode + { + sprintf(buffer,"HTTP/1.1 200 OK\r\nContent-Type: application/json\r\n\r\n{ \"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"); + } + else + { + strcpy(buffer,"HTTP/1.1 200 OK\r\nContent-Type: application/json\r\n\r\n{ \"status\" : \"ok\""); + if(HRD.getParams("P0") != NULL) + { + sprintf(helperBuffer,", \"P0\" : \"%s\"",ioMode[0] ? "OUT":"IN"); + strcat(buffer,helperBuffer); + } + if(HRD.getParams("P1") != NULL) + { + sprintf(helperBuffer,", \"P1\" : \"%s\"",ioMode[1] ? "OUT":"IN"); + strcat(buffer,helperBuffer); + } + if(HRD.getParams("P2") != NULL) + { + sprintf(helperBuffer,", \"P2\" : \"%s\"",ioMode[2] ? "OUT":"IN"); + strcat(buffer,helperBuffer); + } + if(HRD.getParams("P3") != NULL) + { + sprintf(helperBuffer,", \"P3\" : \"%s\"",ioMode[3] ? "OUT":"IN"); + strcat(buffer,helperBuffer); + } + if(HRD.getParams("P4") != NULL) + { + sprintf(helperBuffer,", \"P4\" : \"%s\"",ioMode[4] ? "OUT":"IN"); + strcat(buffer,helperBuffer); + } + if(HRD.getParams("P5") != NULL) + { + sprintf(helperBuffer,", \"P5\" : \"%s\"",ioMode[5] ? "OUT":"IN"); + strcat(buffer,helperBuffer); + } + if(HRD.getParams("P6") != NULL) + { + sprintf(helperBuffer,", \"P6\" : \"%s\"",ioMode[6] ? "OUT":"IN"); + strcat(buffer,helperBuffer); + } + if(HRD.getParams("P7") != NULL) + { + sprintf(helperBuffer,", \"P7\" : \"%s\"",ioMode[7] ? "OUT":"IN"); + strcat(buffer,helperBuffer); + } + strcat(buffer," }"); + } + + wc->print(buffer); + return true; +} + +boolean ioSetModeApi(WEBServerManager::HttpRequestData &HRD, WiFiClient *wc, void *pData) +{ + SAB *p = (SAB *)pData; + char buffer[300] = ""; + boolean ioMode[8] = {0}; + + if(HRD.getParams("P0") != NULL) + { + 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); + } + if(HRD.getParams("P2") != NULL) + { + 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); + } + if(HRD.getParams("P4") != NULL) + { + 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); + } + if(HRD.getParams("P6") != NULL) + { + 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().getPinModeAll(ioMode);//We retrieve the IO modes aka INPUT or OUTPUT + sprintf(buffer,"HTTP/1.1 200 OK\r\nContent-Type: application/json\r\n\r\n{ \"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"); + + wc->print(buffer); + return true; +} diff --git a/src/app/webApi.h b/src/app/webApi.h index 52f4f04..d2e7cf3 100644 --- a/src/app/webApi.h +++ b/src/app/webApi.h @@ -25,5 +25,9 @@ boolean apWifiInfoApi(WEBServerManager::HttpRequestData&, WiFiClient*, void*); boolean espRestartApi(WEBServerManager::HttpRequestData&, WiFiClient*, void*); boolean espResetApi(WEBServerManager::HttpRequestData&, WiFiClient*, void*); boolean systemInfoApi(WEBServerManager::HttpRequestData&, WiFiClient*, void*); +boolean ioGetLevelApi(WEBServerManager::HttpRequestData&, WiFiClient*, void*); +boolean ioSetLevelApi(WEBServerManager::HttpRequestData&, WiFiClient*, void*); +boolean ioGetModeApi(WEBServerManager::HttpRequestData&, WiFiClient*, void*); +boolean ioSetModeApi(WEBServerManager::HttpRequestData&, WiFiClient*, void*); #endif