diff --git a/.gitignore b/.gitignore index 89cc49c..3b8da3a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,2 @@ .pio -.vscode/.browse.c_cpp.db* -.vscode/c_cpp_properties.json -.vscode/launch.json -.vscode/ipch +.vscode \ No newline at end of file diff --git a/include/pages.h b/include/pages.h index 74f0175..40b2b62 100644 --- a/include/pages.h +++ b/include/pages.h @@ -11,5 +11,6 @@ void sendResponseTrailer(AsyncResponseStream *response); void sendButton(AsyncResponseStream *response, const char *title, const char *action, const char *css = ""); void sendTableRow(AsyncResponseStream *response, const char *name, uint32_t value); + void sendDebugForm(AsyncResponseStream *response, String slaveId, String reg, String function); #endif /* PAGES_H */ \ No newline at end of file diff --git a/src/pages.cpp b/src/pages.cpp index a8f4012..d8555a2 100644 --- a/src/pages.cpp +++ b/src/pages.cpp @@ -7,6 +7,7 @@ void setupPages(AsyncWebServer *server, ModbusClientRTU *rtu, ModbusBridgeWiFi * sendResponseHeader(response, "Main"); sendButton(response, "Status", "status"); sendButton(response, "Config", "config"); + sendButton(response, "Debug", "debug"); sendButton(response, "Reboot", "reboot", "r"); sendResponseTrailer(response); request->send(response); @@ -54,7 +55,7 @@ void setupPages(AsyncWebServer *server, ModbusClientRTU *rtu, ModbusBridgeWiFi * "" "" ""); - response->printf("", config->getTcpPort()); + response->printf("", config->getTcpPort()); response->print("" "" "" @@ -70,7 +71,7 @@ void setupPages(AsyncWebServer *server, ModbusClientRTU *rtu, ModbusBridgeWiFi * "" "" ""); - response->printf("", config->getDataBits()); + response->printf("", config->getDataBits()); response->print("" "" "" @@ -141,6 +142,49 @@ void setupPages(AsyncWebServer *server, ModbusClientRTU *rtu, ModbusBridgeWiFi * } request->redirect("/"); }); + server->on("/debug", HTTP_GET, [](AsyncWebServerRequest *request){ + dbgln("[webserver] GET /debug"); + auto *response = request->beginResponseStream("text/html"); + sendResponseHeader(response, "Debug"); + sendDebugForm(response, "1", "1", "3"); + sendButton(response, "Back", "/"); + sendResponseTrailer(response); + request->send(response); + }); + server->on("/debug", HTTP_POST, [rtu](AsyncWebServerRequest *request){ + dbgln("[webserver] POST /debug"); + String slaveId = "1"; + if (request->hasParam("slave", true)){ + slaveId = request->getParam("slave", true)->value(); + } + String reg = "1"; + if (request->hasParam("reg", true)){ + reg = request->getParam("reg", true)->value(); + } + String func = "3"; + if (request->hasParam("func", true)){ + func = request->getParam("func", true)->value(); + } + ModbusMessage answer = rtu->syncRequest(0xdeadbeef, slaveId.toInt(), func.toInt(), reg.toInt(), 1); + auto *response = request->beginResponseStream("text/html"); + sendResponseHeader(response, "Debug"); + if (answer.getError() == SUCCESS){ + auto count = answer[2]; + response->print("Answer: 0x"); + for (size_t i = 0; i < count; i++) + { + response->printf("%02x", answer[i + 3]); + } + response->print(""); + } + else{ + response->printf("Error: %#02x", answer.getError()); + } + sendDebugForm(response, slaveId, reg, func); + sendButton(response, "Back", "/"); + sendResponseTrailer(response); + request->send(response); + }); server->on("/favicon.ico", [](AsyncWebServerRequest *request){ dbgln("[webserver] GET /favicon.ico"); request->send(204);//TODO add favicon @@ -185,6 +229,9 @@ void setupPages(AsyncWebServer *server, ModbusClientRTU *rtu, ModbusBridgeWiFi * "input{" "width:100%;" "}" + ".e{" + "color:red;" + "}" ); response->addHeader("ETag", __DATE__ "" __TIME__); request->send(response); @@ -228,4 +275,48 @@ void sendTableRow(AsyncResponseStream *response, const char *name, uint32_t valu "%s:" "%d" "", name, value); +} + +void sendDebugForm(AsyncResponseStream *response, String slaveId, String reg, String function){ + response->print("
"); + response->print("" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "
" + "" + ""); + response->printf("", slaveId); + response->print("
" + "" + ""); + response->printf("", reg); + response->print("
" + "" + ""); + response->printf("" + "
"); + response->print("" + "
" + "

"); + response->print(""); } \ No newline at end of file