From 0ecadc9d866e3d9370d36e9dca1ee02d77f1d4e5 Mon Sep 17 00:00:00 2001 From: Patrick Balsiger Date: Thu, 15 Nov 2018 16:04:38 +0100 Subject: [PATCH] move web plugins to sprocket-plugin-web repo, rename utils --- platformio.ini | 3 - src/examples/wifi/WiFiApp.h | 24 ----- src/examples/wifi/main.cpp | 8 +- src/examples/wifiMesh/MeshApp.h | 3 +- src/plugins/WebConfigPlugin.cpp | 51 ----------- src/plugins/WebServerConfig.h | 11 --- src/plugins/WebServerPlugin.cpp | 31 ------- src/utils/print.cpp | 28 ++++++ src/utils/{utils_print.h => print.h} | 4 +- src/utils/utils_print.cpp | 25 ----- src/utils/utils_web.h | 132 --------------------------- 11 files changed, 36 insertions(+), 284 deletions(-) delete mode 100644 src/examples/wifi/WiFiApp.h delete mode 100644 src/plugins/WebConfigPlugin.cpp delete mode 100644 src/plugins/WebServerConfig.h delete mode 100644 src/plugins/WebServerPlugin.cpp create mode 100644 src/utils/print.cpp rename src/utils/{utils_print.h => print.h} (60%) delete mode 100644 src/utils/utils_print.cpp delete mode 100644 src/utils/utils_web.h diff --git a/platformio.ini b/platformio.ini index c8fcf8d..89edae7 100644 --- a/platformio.ini +++ b/platformio.ini @@ -22,10 +22,7 @@ lib_deps = TaskScheduler SPIFFS ESP8266mDNS - ArduinoOTA painlessMesh - ESPAsyncTCP - ESP Async WebServer ;[env:build] ;src_filter = +<*> - diff --git a/src/examples/wifi/WiFiApp.h b/src/examples/wifi/WiFiApp.h deleted file mode 100644 index ab0c1f5..0000000 --- a/src/examples/wifi/WiFiApp.h +++ /dev/null @@ -1,24 +0,0 @@ - -#ifndef __WIFI_APP__ -#define __WIFI_APP__ - -#include -#include -#include -#include -#include - -using namespace std; -using namespace std::placeholders; - -class WiFiApp : public Sprocket { - public: - AsyncWebServer* server; - WiFiApp(SprocketConfig cfg, WebServerConfig webCfg) : Sprocket(cfg) { - server = new AsyncWebServer(webCfg.port); - addPlugin(new WebServerPlugin(webCfg, server)); - addPlugin(new WebConfigPlugin(server)); - } -}; - -#endif \ No newline at end of file diff --git a/src/examples/wifi/main.cpp b/src/examples/wifi/main.cpp index 8e300df..51acb6c 100644 --- a/src/examples/wifi/main.cpp +++ b/src/examples/wifi/main.cpp @@ -1,6 +1,6 @@ #include "config.h" #include "WiFiNet.h" -#include "WiFiApp.h" +#include "Sprocket.h" WiFiNet wifi( SPROCKET_MODE, @@ -10,9 +10,9 @@ WiFiNet wifi( AP_PASSWORD, HOSTNAME, CONNECT_TIMEOUT); -WiFiApp sprocket( - {STARTUP_DELAY, SERIAL_BAUD_RATE}, - {WEB_CONTEXT_PATH, WEB_DOC_ROOT, WEB_DEFAULT_FILE, WEB_SERVER_PORT}); + +Sprocket sprocket( + {STARTUP_DELAY, SERIAL_BAUD_RATE}); void setup() { diff --git a/src/examples/wifiMesh/MeshApp.h b/src/examples/wifiMesh/MeshApp.h index e3a272f..696949d 100644 --- a/src/examples/wifiMesh/MeshApp.h +++ b/src/examples/wifiMesh/MeshApp.h @@ -4,6 +4,7 @@ #include #include #include +#include using namespace std; using namespace std::placeholders; @@ -24,7 +25,7 @@ class MeshApp : public Sprocket // add a task that sends stuff to the mesh heartbeatTask.set(TASK_SECOND * 5, TASK_FOREVER, bind(&MeshApp::heartbeat, this)); addTask(heartbeatTask); - Serial.println("MeshApp activated"); + PRINT_MSG(Serial,"MESH", "MeshApp activated"); return this; } using Sprocket::activate; diff --git a/src/plugins/WebConfigPlugin.cpp b/src/plugins/WebConfigPlugin.cpp deleted file mode 100644 index ba56945..0000000 --- a/src/plugins/WebConfigPlugin.cpp +++ /dev/null @@ -1,51 +0,0 @@ -#ifndef __WEB_CONFIG_PLUGIN_H__ -#define __WEB_CONFIG_PLUGIN_H__ - -#include -#include "TaskSchedulerDeclarations.h" -#include "ArduinoOTA.h" -#include "Plugin.h" -#include -#include - -using namespace std; -using namespace std::placeholders; - - -class WebConfigPlugin : public Plugin { - private: - AsyncWebServer* server; - public: - WebConfigPlugin(AsyncWebServer* webServer){ - server = webServer; - server->serveStatic("/config.json", SPIFFS, "config.json"); - } - void activate(Scheduler* userScheduler){ - server->on("/heap", HTTP_GET, [](AsyncWebServerRequest *request){ - Serial.println("GET /heap"); - request->send(200, "text/plain", String(ESP.getFreeHeap())); - }); - server->on("/restart", HTTP_POST, [](AsyncWebServerRequest *request){ - Serial.println("POST /restart"); - ESP.restart(); - }); - server->on("/config", HTTP_POST, [](AsyncWebServerRequest *request){ - Serial.println("POST /config"); - if(request->hasParam("config", true) && request->hasParam("fileName", true)) { - String inStr = request->getParam("config", true)->value(); - String fileName = request->getParam("fileName", true)->value(); - File f = SPIFFS.open(fileName, "w"); - if (!f) { - Serial.println("file open for write failed"); - } - Serial.println("====== Writing to SPIFFS file ========="); - f.print(inStr); - f.close(); - } - request->redirect("/"); - }); - Serial.println("WebConfig activated"); - } -}; - -#endif \ No newline at end of file diff --git a/src/plugins/WebServerConfig.h b/src/plugins/WebServerConfig.h deleted file mode 100644 index 70c2433..0000000 --- a/src/plugins/WebServerConfig.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef __WEB_SERVER_CONFIG__ -#define __WEB_SERVER_CONFIG__ - -struct WebServerConfig { - const char* contextPath; - const char* docRoot; - const char* defaultFile; - int port; -}; - -#endif \ No newline at end of file diff --git a/src/plugins/WebServerPlugin.cpp b/src/plugins/WebServerPlugin.cpp deleted file mode 100644 index 54bf060..0000000 --- a/src/plugins/WebServerPlugin.cpp +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef __WEB_SERVER_PLUGIN__ -#define __WEB_SERVER_PLUGIN__ - -#include -#include -#include "TaskSchedulerDeclarations.h" -#include "Plugin.h" -#include - -using namespace std; -using namespace std::placeholders; - -class WebServerPlugin : public Plugin { - private: - WebServerConfig config; - AsyncWebServer* server; - public: - WebServerPlugin(WebServerConfig cfg, AsyncWebServer* webServer){ - config = cfg; - server = webServer; - } - void activate(Scheduler* userScheduler){ - server->serveStatic(config.contextPath, SPIFFS, config.docRoot).setDefaultFile(config.defaultFile); - // TODO add auth if configured - // server->setAuthentication("user", "pass"); - server->begin(); - Serial.println("WebServer activated"); - } -}; - -#endif \ No newline at end of file diff --git a/src/utils/print.cpp b/src/utils/print.cpp new file mode 100644 index 0000000..197e64a --- /dev/null +++ b/src/utils/print.cpp @@ -0,0 +1,28 @@ +#include "utils/print.h" + +int FORMAT_BUFFER_SIZE(const char *format, ...) +{ + va_list args; + va_start(args, format); + int result = vsnprintf(NULL, 0, format, args); + va_end(args); + return result + 1; // safe byte for \0 +} +void PRINT_MSG(Print &out, const char *prefix, const char *format, ...) +{ + if (SPROCKET_PRINT) + { + out.print(String(prefix) + String("\t| ")); + char formatString[128], *ptr; + strncpy_P(formatString, format, sizeof(formatString)); // copy in from program mem + // null terminate - leave last char since we might need it in worst case for result's \0 + formatString[sizeof(formatString) - 2] = '\0'; + ptr = &formatString[strlen(formatString) + 1]; // our result buffer... + va_list args; + va_start(args, format); + vsnprintf(ptr, sizeof(formatString) - 1 - strlen(formatString), formatString, args); + va_end(args); + formatString[sizeof(formatString) - 1] = '\0'; + out.println(ptr); + } +} \ No newline at end of file diff --git a/src/utils/utils_print.h b/src/utils/print.h similarity index 60% rename from src/utils/utils_print.h rename to src/utils/print.h index 51ac397..ea76fc4 100644 --- a/src/utils/utils_print.h +++ b/src/utils/print.h @@ -9,7 +9,7 @@ // TODO move to sprocket -int FORMAT_BUFFER_SIZE(const char* format, ...); -void PRINT_MSG(Print &out, const char* prefix, const char* format, ...); +int FORMAT_BUFFER_SIZE(const char *format, ...); +void PRINT_MSG(Print &out, const char *prefix, const char *format, ...); #endif \ No newline at end of file diff --git a/src/utils/utils_print.cpp b/src/utils/utils_print.cpp deleted file mode 100644 index ae6c013..0000000 --- a/src/utils/utils_print.cpp +++ /dev/null @@ -1,25 +0,0 @@ -#include "utils_print.h" - -int FORMAT_BUFFER_SIZE(const char* format, ...) { - va_list args; - va_start(args, format); - int result = vsnprintf(NULL, 0, format, args); - va_end(args); - return result + 1; // safe byte for \0 -} -void PRINT_MSG(Print &out, const char* prefix, const char* format, ...) { - if(SPROCKET_PRINT){ - out.print(String(prefix) + String("\t| ")); - char formatString[128], *ptr; - strncpy_P( formatString, format, sizeof(formatString) ); // copy in from program mem - // null terminate - leave last char since we might need it in worst case for result's \0 - formatString[ sizeof(formatString)-2 ]='\0'; - ptr=&formatString[ strlen(formatString)+1 ]; // our result buffer... - va_list args; - va_start (args,format); - vsnprintf(ptr, sizeof(formatString)-1-strlen(formatString), formatString, args ); - va_end (args); - formatString[ sizeof(formatString)-1 ]='\0'; - out.println(ptr); - } -} \ No newline at end of file diff --git a/src/utils/utils_web.h b/src/utils/utils_web.h deleted file mode 100644 index 0ff8d4a..0000000 --- a/src/utils/utils_web.h +++ /dev/null @@ -1,132 +0,0 @@ -#ifndef __WebUtils_H___ -#define __WebUtils_H___ - -#include -#include -#include -#include - -class WebUtils { - public: - static String getRequestParameterOrDefault(AsyncWebServerRequest *request, String param, String defaultValue, bool isPost = true){ - if(request->hasParam(param, isPost)) { - return request->getParam(param, isPost)->value(); - } - return defaultValue; - } - static String parseFrame(AwsEventType type, void * arg, uint8_t *data, size_t len) { - String msg = ""; - if(type == WS_EVT_DATA){ - AwsFrameInfo * info = (AwsFrameInfo*)arg; - if(info->opcode == WS_TEXT){ - for(size_t i=0; i < info->len; i++) { - msg += (char) data[i]; - } - } else { - char buff[3]; - for(size_t i=0; i < info->len; i++) { - sprintf(buff, "%02x ", (uint8_t) data[i]); - msg += buff ; - } - } - - } - return msg; - } - static String parseFrameAsString(AwsEventType type, void * arg, uint8_t *data, size_t len, int start = 0) { - String msg = ""; - if(type == WS_EVT_DATA){ - AwsFrameInfo * info = (AwsFrameInfo*)arg; - //if(info->final && info->index == 0 && info->len == len){ - if(info->opcode == WS_TEXT){ - for(size_t i=start; i < info->len; i++) { - msg += (char) data[i]; - } - } else { - char buff[3]; - for(size_t i=start; i < info->len; i++) { - sprintf(buff, "%02x ", (uint8_t) data[i]); - msg += buff ; - } - } - - //} - } - return msg; - } - /* static void onWsEvent(AsyncWebSocket * server, AsyncWebSocketClient * client, AwsEventType type, void * arg, uint8_t *data, size_t len) { - if(type == WS_EVT_CONNECT){ - Serial.printf("ws[%s][%u] connect\n", server->url(), client->id()); - client->printf("Hello Client %u :)", client->id()); - client->ping(); - } else if(type == WS_EVT_DISCONNECT){ - Serial.printf("ws[%s][%u] disconnect: %u\n", server->url(), client->id()); - } else if(type == WS_EVT_ERROR){ - Serial.printf("ws[%s][%u] error(%u): %s\n", server->url(), client->id(), *((uint16_t*)arg), (char*)data); - } else if(type == WS_EVT_PONG){ - Serial.printf("ws[%s][%u] pong[%u]: %s\n", server->url(), client->id(), len, (len)?(char*)data:""); - } else if(type == WS_EVT_DATA){ - AwsFrameInfo * info = (AwsFrameInfo*)arg; - String msg = ""; - //the whole message is in a single frame and we got all of it's data - if(info->final && info->index == 0 && info->len == len){ - Serial.printf("ws[%s][%u] %s-message[%llu]: ", server->url(), client->id(), (info->opcode == WS_TEXT)?"text":"binary", info->len); - - if(info->opcode == WS_TEXT){ - for(size_t i=0; i < info->len; i++) { - msg += (char) data[i]; - } - } else { - char buff[3]; - for(size_t i=0; i < info->len; i++) { - sprintf(buff, "%02x ", (uint8_t) data[i]); - msg += buff ; - } - } - Serial.printf("%s\n",msg.c_str()); - - if(info->opcode == WS_TEXT) - client->text("I got your text message"); - else - client->binary("I got your binary message"); - } - //message is comprised of multiple frames or the frame is split into multiple packets - else { - if(info->index == 0){ - if(info->num == 0) - Serial.printf("ws[%s][%u] %s-message start\n", server->url(), client->id(), (info->message_opcode == WS_TEXT)?"text":"binary"); - Serial.printf("ws[%s][%u] frame[%u] start[%llu]\n", server->url(), client->id(), info->num, info->len); - } - - Serial.printf("ws[%s][%u] frame[%u] %s[%llu - %llu]: ", server->url(), client->id(), info->num, (info->message_opcode == WS_TEXT)?"text":"binary", info->index, info->index + len); - - if(info->opcode == WS_TEXT){ - for(size_t i=0; i < info->len; i++) { - msg += (char) data[i]; - } - } else { - char buff[3]; - for(size_t i=0; i < info->len; i++) { - sprintf(buff, "%02x ", (uint8_t) data[i]); - msg += buff ; - } - } - Serial.printf("%s\n",msg.c_str()); - - if((info->index + len) == info->len){ - Serial.printf("ws[%s][%u] frame[%u] end[%llu]\n", server->url(), client->id(), info->num, info->len); - if(info->final){ - Serial.printf("ws[%s][%u] %s-message end\n", server->url(), client->id(), (info->message_opcode == WS_TEXT)?"text":"binary"); - if(info->message_opcode == WS_TEXT) - client->text("I got your text message"); - else - client->binary("I got your binary message"); - } - } - } - } - } */ - -}; - -#endif \ No newline at end of file