diff --git a/src/Clients/KlipperClient.cpp b/src/Clients/KlipperClient.cpp index fd6673c..5d520a4 100644 --- a/src/Clients/KlipperClient.cpp +++ b/src/Clients/KlipperClient.cpp @@ -11,8 +11,8 @@ KlipperClient::KlipperClient(GlobalDataController *globalDataController, DebugCo void KlipperClient::updatePrintClient() { this->globalDataController->getPrinterHostName().toCharArray(this->myServer, 100); - myApiKey = this->globalDataController->getPrinterApiKey(); - myPort = this->globalDataController->getPrinterPort(); + this->globalDataController->getPrinterServer().toCharArray(this->myServerIp, 30); + this->myPort = this->globalDataController->getPrinterPort(); encodedAuth = ""; if (this->globalDataController->getPrinterAuthUser() != "") { String userpass = this->globalDataController->getPrinterAuthUser() + ":" + this->globalDataController->getPrinterAuthPass(); @@ -25,11 +25,8 @@ void KlipperClient::updatePrintClient() { boolean KlipperClient::validate() { boolean rtnValue = false; printerData.error = ""; - if (String(myServer) == "") { - printerData.error += "Server address is required; "; - } - if (myApiKey == "") { - printerData.error += "ApiKey is required; "; + if ((String(this->myServer) == "") && (String(this->myServerIp) == "")) { + printerData.error += "Server address or host name is required; "; } if (printerData.error == "") { rtnValue = true; @@ -40,14 +37,17 @@ boolean KlipperClient::validate() { WiFiClient KlipperClient::getSubmitRequest(String apiGetData) { WiFiClient printClient; printClient.setTimeout(5000); + const char *targetServer = this->myServerIp; + if (String(this->myServerIp) == "") { + targetServer = this->myServer; + } this->debugController->printLn("Getting Klipper Data via GET"); this->debugController->printLn(apiGetData); result = ""; - if (printClient.connect(myServer, myPort)) { //starts client connection, checks for connection + if (printClient.connect(targetServer, myPort)) { //starts client connection, checks for connection printClient.println(apiGetData); - printClient.println("Host: " + String(myServer) + ":" + String(myPort)); - printClient.println("X-Api-Key: " + myApiKey); + printClient.println("Host: " + String(targetServer) + ":" + String(myPort)); if (encodedAuth != "") { printClient.print("Authorization: "); printClient.println("Basic " + encodedAuth); @@ -55,18 +55,18 @@ WiFiClient KlipperClient::getSubmitRequest(String apiGetData) { printClient.println("User-Agent: ArduinoWiFi/1.1"); printClient.println("Connection: close"); if (printClient.println() == 0) { - this->debugController->printLn("Connection to " + String(myServer) + ":" + String(myPort) + " failed."); + this->debugController->printLn("Connection to " + String(targetServer) + ":" + String(myPort) + " failed."); this->debugController->printLn(""); resetPrintData(); - printerData.error = "Connection to " + String(myServer) + ":" + String(myPort) + " failed."; + printerData.error = "Connection to " + String(targetServer) + ":" + String(myPort) + " failed."; return printClient; } } else { - this->debugController->printLn("Connection to Klipper failed: " + String(myServer) + ":" + String(myPort)); //error message if no client connect + this->debugController->printLn("Connection to Klipper failed: " + String(targetServer) + ":" + String(myPort)); //error message if no client connect this->debugController->printLn(""); resetPrintData(); - printerData.error = "Connection to Klipper failed: " + String(myServer) + ":" + String(myPort); + printerData.error = "Connection to Klipper failed: " + String(targetServer) + ":" + String(myPort); return printClient; } @@ -85,7 +85,7 @@ WiFiClient KlipperClient::getSubmitRequest(String apiGetData) { char endOfHeaders[] = "\r\n\r\n"; if (!printClient.find(endOfHeaders)) { this->debugController->printLn("Invalid response"); - printerData.error = "Invalid response from " + String(myServer) + ":" + String(myPort); + printerData.error = "Invalid response from " + String(targetServer) + ":" + String(myPort); printerData.state = ""; } @@ -95,18 +95,21 @@ WiFiClient KlipperClient::getSubmitRequest(String apiGetData) { WiFiClient KlipperClient::getPostRequest(String apiPostData, String apiPostBody) { WiFiClient printClient; printClient.setTimeout(5000); + const char *targetServer = this->myServerIp; + if (String(this->myServerIp) == "") { + targetServer = this->myServer; + } this->debugController->printLn("Getting Klipper Data via POST"); this->debugController->printLn(apiPostData + " | " + apiPostBody); result = ""; - if (printClient.connect(myServer, myPort)) { //starts client connection, checks for connection + if (printClient.connect(targetServer, myPort)) { //starts client connection, checks for connection printClient.println(apiPostData); - printClient.println("Host: " + String(myServer) + ":" + String(myPort)); + printClient.println("Host: " + String(targetServer) + ":" + String(myPort)); printClient.println("Connection: close"); - printClient.println("X-Api-Key: " + myApiKey); if (encodedAuth != "") { - printClient.print("Authorization: "); - printClient.println("Basic " + encodedAuth); + printClient.print("Authorization: "); + printClient.println("Basic " + encodedAuth); } printClient.println("User-Agent: ArduinoWiFi/1.1"); printClient.println("Content-Type: application/json"); @@ -115,18 +118,18 @@ WiFiClient KlipperClient::getPostRequest(String apiPostData, String apiPostBody) printClient.println(); printClient.println(apiPostBody); if (printClient.println() == 0) { - this->debugController->printLn("Connection to " + String(myServer) + ":" + String(myPort) + " failed."); - this->debugController->printLn(""); - resetPrintData(); - printerData.error = "Connection to " + String(myServer) + ":" + String(myPort) + " failed."; - return printClient; + this->debugController->printLn("Connection to " + String(targetServer) + ":" + String(myPort) + " failed."); + this->debugController->printLn(""); + resetPrintData(); + printerData.error = "Connection to " + String(targetServer) + ":" + String(myPort) + " failed."; + return printClient; } } else { - this->debugController->printLn("Connection to Klipper failed: " + String(myServer) + ":" + String(myPort)); //error message if no client connect + this->debugController->printLn("Connection to Klipper failed: " + String(targetServer) + ":" + String(myPort)); //error message if no client connect this->debugController->printLn(""); resetPrintData(); - printerData.error = "Connection to Klipper failed: " + String(myServer) + ":" + String(myPort); + printerData.error = "Connection to Klipper failed: " + String(targetServer) + ":" + String(myPort); return printClient; } @@ -145,7 +148,7 @@ WiFiClient KlipperClient::getPostRequest(String apiPostData, String apiPostBody) char endOfHeaders[] = "\r\n\r\n"; if (!printClient.find(endOfHeaders)) { this->debugController->printLn("Invalid response"); - printerData.error = "Invalid response from " + String(myServer) + ":" + String(myPort); + printerData.error = "Invalid response from " + String(targetServer) + ":" + String(myPort); printerData.state = ""; } @@ -156,6 +159,11 @@ void KlipperClient::getPrinterJobResults() { if (!validate()) { return; } + const char *targetServer = this->myServerIp; + if (String(this->myServerIp) == "") { + targetServer = this->myServer; + } + //**** get the Printer Job status String apiGetData = "GET /printer/objects/query?heater_bed&extruder&webhooks&virtual_sdcard&print_stats&toolhead&display_status"; WiFiClient printClient = getSubmitRequest(apiGetData); @@ -168,8 +176,8 @@ void KlipperClient::getPrinterJobResults() { // Parse JSON object DeserializationError error = deserializeJson(jsonBuffer, printClient); if (error) { - this->debugController->printLn("Klipper Data Parsing failed: " + String(myServer) + ":" + String(myPort)); - printerData.error = "Klipper Data Parsing failed: " + String(myServer) + ":" + String(myPort); + this->debugController->printLn("Klipper Data Parsing failed: " + String(targetServer) + ":" + String(myPort)); + printerData.error = "Klipper Data Parsing failed: " + String(targetServer) + ":" + String(myPort); printerData.state = ""; printerData.isPrinting = false; printerData.toolTemp = ""; diff --git a/src/Clients/KlipperClient.h b/src/Clients/KlipperClient.h index fd077a1..41bf050 100644 --- a/src/Clients/KlipperClient.h +++ b/src/Clients/KlipperClient.h @@ -9,8 +9,8 @@ class KlipperClient : public BasePrinterClient { private: char myServer[100]; + char myServerIp[30]; int myPort = 7125; - String myApiKey = ""; String encodedAuth = ""; boolean pollPsu; const String printerType = "Klipper"; diff --git a/src/Display/BaseDisplayClient.h b/src/Display/BaseDisplayClient.h index f668e2d..f101726 100644 --- a/src/Display/BaseDisplayClient.h +++ b/src/Display/BaseDisplayClient.h @@ -7,6 +7,7 @@ public: virtual void preSetup(); virtual void postSetup(); virtual void handleUpdate(); + virtual void flipDisplayUpdate(); virtual void showBootScreen(); virtual void showApAccessScreen(String apSsid, String apIp); virtual void showWebserverSplashScreen(bool isEnabled); diff --git a/src/Display/NextionDisplay.cpp b/src/Display/NextionDisplay.cpp index 053ca56..4cd1d3d 100644 --- a/src/Display/NextionDisplay.cpp +++ b/src/Display/NextionDisplay.cpp @@ -20,6 +20,10 @@ void NextionDisplay::handleUpdate() { } +void NextionDisplay::flipDisplayUpdate() { + +} + void NextionDisplay::showBootScreen() { String command("version.txt="); command += "\"for " + this->globalDataController->getPrinterClient()->getPrinterType() + " V" + this->globalDataController->getVersion() + "\""; diff --git a/src/Display/NextionDisplay.h b/src/Display/NextionDisplay.h index 6fb8a3a..25545a5 100644 --- a/src/Display/NextionDisplay.h +++ b/src/Display/NextionDisplay.h @@ -18,6 +18,7 @@ public: void preSetup(); void postSetup(); void handleUpdate(); + void flipDisplayUpdate(); void showBootScreen(); void showApAccessScreen(String apSsid, String apIp); void showWebserverSplashScreen(bool isEnabled); diff --git a/src/Display/OledDisplay.cpp b/src/Display/OledDisplay.cpp index 36a8df4..52ba8a2 100644 --- a/src/Display/OledDisplay.cpp +++ b/src/Display/OledDisplay.cpp @@ -46,6 +46,14 @@ void OledDisplay::handleUpdate() { this->ui->update(); } +void OledDisplay::flipDisplayUpdate() { + this->ui->init(); + if (this->globalDataController->isDisplayInverted()) { + this->oledDisplay->flipScreenVertically(); // connections at top of OLED display + } + this->ui->update(); +} + void OledDisplay::showBootScreen() { this->oledDisplay->setTextAlignment(TEXT_ALIGN_CENTER); this->oledDisplay->setContrast(255); // default is 255 diff --git a/src/Display/OledDisplay.h b/src/Display/OledDisplay.h index 57bb63f..4381834 100644 --- a/src/Display/OledDisplay.h +++ b/src/Display/OledDisplay.h @@ -27,6 +27,7 @@ public: void preSetup(); void postSetup(); void handleUpdate(); + void flipDisplayUpdate(); void showBootScreen(); void showApAccessScreen(String apSsid, String apIp); void showWebserverSplashScreen(bool isEnabled); diff --git a/src/Global/GlobalDataController.cpp b/src/Global/GlobalDataController.cpp index 3c1020d..3d042f1 100644 --- a/src/Global/GlobalDataController.cpp +++ b/src/Global/GlobalDataController.cpp @@ -208,7 +208,7 @@ void GlobalDataController::setDisplayClient(BaseDisplayClient *baseDisplayClient this->baseDisplayClient = baseDisplayClient; } -BaseDisplayClient *GlobalDataController::setDisplayClient() { +BaseDisplayClient *GlobalDataController::getDisplayClient() { return this->baseDisplayClient; } diff --git a/src/Global/GlobalDataController.h b/src/Global/GlobalDataController.h index acc48f6..0611fc9 100644 --- a/src/Global/GlobalDataController.h +++ b/src/Global/GlobalDataController.h @@ -64,7 +64,7 @@ public: TimeClient *getTimeClient(); OpenWeatherMapClient *getWeatherClient(); BasePrinterClient *getPrinterClient(); - BaseDisplayClient *setDisplayClient(); + BaseDisplayClient *getDisplayClient(); String getLastReportStatus(); String getVersion(); diff --git a/src/Network/WebServer.cpp b/src/Network/WebServer.cpp index 0ddbf5f..e8146b8 100644 --- a/src/Network/WebServer.cpp +++ b/src/Network/WebServer.cpp @@ -323,13 +323,10 @@ void WebServer::handleUpdateConfig() { this->globalDataController->getPrinterClient()->getPrinterJobResults(); this->globalDataController->getPrinterClient()->getPrinterPsuState(); - /*if (INVERT_DISPLAY != flipOld) { - ui.init(); - if(INVERT_DISPLAY) - display.flipScreenVertically(); - ui.update(); + if (this->globalDataController->isDisplayInverted() != flipOld) { + this->globalDataController->getDisplayClient()->flipDisplayUpdate(); } - checkDisplay();*/ + this->globalDataController->getDisplayClient()->handleUpdate(); this->globalDataController->getTimeClient()->resetLastEpoch(); this->redirectHome(); } @@ -415,11 +412,10 @@ void WebServer::handleConfigure() { this->server->sendContent(html); } else if (printerClient->getPrinterType() == "Klipper") { - // TODO: INVALID JAVASCRIPT HERE - /*html = ""; + this->server->sendContent(html); } else { html = ""; + "

"; + if ((printerClient->getPrinterType() == "Repetier") || (printerClient->getPrinterType() == "Klipper")) { + form += "" + "

" + ""; } - else if (printerClient->getPrinterType() == "Klipper") { - form += "" - "

" - ""; - } else { form += "

"; } - form += "

" - "

"; + form += "

" + "

"; - form.replace("%OCTOKEY%", this->globalDataController->getPrinterApiKey()); - form.replace("%OCTOHOST%", this->globalDataController->getPrinterHostName()); - form.replace("%OCTOADDRESS%", this->globalDataController->getPrinterServer()); - form.replace("%OCTOPORT%", String(this->globalDataController->getPrinterPort())); - form.replace("%OCTOUSER%", this->globalDataController->getPrinterAuthUser()); - form.replace("%OCTOPASS%", this->globalDataController->getPrinterAuthPass()); + form.replace("%PRINTERAPIKEY%", this->globalDataController->getPrinterApiKey()); + form.replace("%PRINTERHOST%", this->globalDataController->getPrinterHostName()); + form.replace("%PRINTERADDRESS%", this->globalDataController->getPrinterServer()); + form.replace("%PRINTERPORT%", String(this->globalDataController->getPrinterPort())); + form.replace("%PRINTERUSER%", this->globalDataController->getPrinterAuthUser()); + form.replace("%PRINTERPASS%", this->globalDataController->getPrinterAuthPass()); this->server->sendContent(form); form = FPSTR(CLOCK_FORM);