From 6d74b4ca0cd597cfeb686d793ecb647c35a9bbd5 Mon Sep 17 00:00:00 2001 From: Robert Stein Date: Mon, 14 Dec 2020 11:15:10 +0100 Subject: [PATCH] Simplify printer classes for code reuse and to prevent doubles --- src/Clients/BasePrinterClient.h | 2 + src/Clients/BasePrinterClientImpl.cpp | 135 ++++++++++++++++++ src/Clients/BasePrinterClientImpl.h | 67 +++++++++ src/Clients/DuetClient.cpp | 175 +++-------------------- src/Clients/DuetClient.h | 65 +-------- src/Clients/KlipperClient.cpp | 195 ++++---------------------- src/Clients/KlipperClient.h | 65 +-------- 7 files changed, 267 insertions(+), 437 deletions(-) create mode 100644 src/Clients/BasePrinterClientImpl.cpp create mode 100644 src/Clients/BasePrinterClientImpl.h diff --git a/src/Clients/BasePrinterClient.h b/src/Clients/BasePrinterClient.h index 8726ece..7f3b48c 100644 --- a/src/Clients/BasePrinterClient.h +++ b/src/Clients/BasePrinterClient.h @@ -1,6 +1,8 @@ #pragma once #include #include +#include +#include "Debug.h" class BasePrinterClient { public: diff --git a/src/Clients/BasePrinterClientImpl.cpp b/src/Clients/BasePrinterClientImpl.cpp new file mode 100644 index 0000000..b110181 --- /dev/null +++ b/src/Clients/BasePrinterClientImpl.cpp @@ -0,0 +1,135 @@ +#include "BasePrinterClientImpl.h" + +BasePrinterClientImpl::BasePrinterClientImpl(String printerType, GlobalDataController *globalDataController, DebugController *debugController) { + this->globalDataController = globalDataController; + this->debugController = debugController; + this->printerType = printerType; +} + +// Reset all PrinterData +void BasePrinterClientImpl::resetPrintData() { + this->printerData.averagePrintTime = ""; + this->printerData.estimatedPrintTime = ""; + this->printerData.fileName = ""; + this->printerData.fileSize = ""; + this->printerData.lastPrintTime = ""; + this->printerData.progressCompletion = ""; + this->printerData.progressFilepos = ""; + this->printerData.progressPrintTime = ""; + this->printerData.progressPrintTimeLeft = ""; + this->printerData.state = ""; + this->printerData.toolTemp = ""; + this->printerData.toolTargetTemp = ""; + this->printerData.filamentLength = ""; + this->printerData.bedTemp = ""; + this->printerData.bedTargetTemp = ""; + this->printerData.isPrinting = false; + this->printerData.isPSUoff = false; + this->printerData.error = ""; +} + +String BasePrinterClientImpl::getAveragePrintTime(){ + return printerData.averagePrintTime; +} + +String BasePrinterClientImpl::getEstimatedPrintTime() { + return printerData.estimatedPrintTime; +} + +String BasePrinterClientImpl::getFileName() { + return printerData.fileName; +} + +String BasePrinterClientImpl::getFileSize() { + return printerData.fileSize; +} + +String BasePrinterClientImpl::getLastPrintTime(){ + return printerData.lastPrintTime; +} + +String BasePrinterClientImpl::getProgressCompletion() { + return String(printerData.progressCompletion.toInt()); +} + +String BasePrinterClientImpl::getProgressFilepos() { + return printerData.progressFilepos; +} + +String BasePrinterClientImpl::getProgressPrintTime() { + return printerData.progressPrintTime; +} + +String BasePrinterClientImpl::getProgressPrintTimeLeft() { + String rtnValue = printerData.progressPrintTimeLeft; + if (getProgressCompletion() == "100") { + rtnValue = "0"; // Print is done so this should be 0 this is a fix for Duet + } + return rtnValue; +} + +String BasePrinterClientImpl::getState() { + return printerData.state; +} + +boolean BasePrinterClientImpl::isPrinting() { + return printerData.isPrinting; +} + +boolean BasePrinterClientImpl::isPSUoff() { + return printerData.isPSUoff; +} + +boolean BasePrinterClientImpl::isOperational() { + boolean operational = false; + if (printerData.state == "I" || isPrinting()) { + operational = true; + } + return operational; +} + +String BasePrinterClientImpl::getTempBedActual() { + return printerData.bedTemp; +} + +String BasePrinterClientImpl::getTempBedTarget() { + return printerData.bedTargetTemp; +} + +String BasePrinterClientImpl::getTempToolActual() { + return printerData.toolTemp; +} + +String BasePrinterClientImpl::getTempToolTarget() { + return printerData.toolTargetTemp; +} + +String BasePrinterClientImpl::getFilamentLength() { + return printerData.filamentLength; +} + +String BasePrinterClientImpl::getError() { + return printerData.error; +} + +String BasePrinterClientImpl::getValueRounded(String value) { + float f = value.toFloat(); + int rounded = (int)(f+0.5f); + return String(rounded); +} + +String BasePrinterClientImpl::getPrinterType() { + return this->printerType; +} + +int BasePrinterClientImpl::getPrinterPort() { + return this->globalDataController->getPrinterPort(); +} + +String BasePrinterClientImpl::getPrinterName() { + return printerData.printerName; +} + +void BasePrinterClientImpl::setPrinterName(String printer) { + printerData.printerName = printer; +} \ No newline at end of file diff --git a/src/Clients/BasePrinterClientImpl.h b/src/Clients/BasePrinterClientImpl.h new file mode 100644 index 0000000..c1a3495 --- /dev/null +++ b/src/Clients/BasePrinterClientImpl.h @@ -0,0 +1,67 @@ +#pragma once +#include "BasePrinterClient.h" +#include "../Global/GlobalDataController.h" + +class BasePrinterClientImpl : public BasePrinterClient { +protected: + GlobalDataController *globalDataController; + DebugController *debugController; + String printerType = "Octoprint"; + + typedef struct { + String averagePrintTime; + String estimatedPrintTime; + String fileName; + String fileSize; + String lastPrintTime; + String progressCompletion; + String progressFilepos; + String progressPrintTime; + String progressPrintTimeLeft; + String state; + String toolTemp; + String toolTargetTemp; + String filamentLength; + String bedTemp; + String bedTargetTemp; + boolean isPrinting; + boolean isPSUoff; + String error; + String printerName; + } PrinterStruct; + + PrinterStruct printerData; + +public: + BasePrinterClientImpl(String printerType, GlobalDataController *globalDataController, DebugController *debugController); + + void getPrinterJobResults() {}; + void getPrinterPsuState() {}; + void updatePrintClient() {}; + + void resetPrintData(); + String getAveragePrintTime(); + String getEstimatedPrintTime(); + String getFileName(); + String getFileSize(); + String getLastPrintTime(); + String getProgressCompletion(); + String getProgressFilepos(); + String getProgressPrintTime(); + String getProgressPrintTimeLeft(); + String getState(); + boolean isPrinting(); + boolean isOperational(); + boolean isPSUoff(); + String getTempBedActual(); + String getTempBedTarget(); + String getTempToolActual(); + String getTempToolTarget(); + String getFilamentLength(); + String getValueRounded(String value); + String getError(); + String getPrinterType(); + int getPrinterPort(); + String getPrinterName(); + void setPrinterName(String printer); +}; \ No newline at end of file diff --git a/src/Clients/DuetClient.cpp b/src/Clients/DuetClient.cpp index 287cd78..0263acd 100644 --- a/src/Clients/DuetClient.cpp +++ b/src/Clients/DuetClient.cpp @@ -3,16 +3,13 @@ #include "DuetClient.h" -DuetClient::DuetClient(GlobalDataController *globalDataController, DebugController *debugController) { - this->globalDataController = globalDataController; - this->debugController = debugController; +DuetClient::DuetClient(GlobalDataController *globalDataController, DebugController *debugController) +: BasePrinterClientImpl("Duet", globalDataController, debugController) { this->updatePrintClient(); } void DuetClient::updatePrintClient() { - this->globalDataController->getPrinterHostName().toCharArray(this->myServer, 100); myApiKey = this->globalDataController->getPrinterApiKey(); - myPort = this->globalDataController->getPrinterPort(); encodedAuth = ""; if (this->globalDataController->getPrinterAuthUser() != "") { String userpass = this->globalDataController->getPrinterAuthUser() + ":" + this->globalDataController->getPrinterAuthPass(); @@ -25,7 +22,7 @@ void DuetClient::updatePrintClient() { boolean DuetClient::validate() { boolean rtnValue = false; printerData.error = ""; - if (String(myServer) == "") { + if (this->globalDataController->getPrinterServer() == "") { printerData.error += "Server address is required; "; } if (myApiKey == "") { @@ -44,9 +41,9 @@ WiFiClient DuetClient::getSubmitRequest(String apiGetData) { this->debugController->printLn("Getting Duet Data via GET"); this->debugController->printLn(apiGetData); result = ""; - if (printClient.connect(myServer, myPort)) { //starts client connection, checks for connection + if (printClient.connect(this->globalDataController->getPrinterServer(), this->globalDataController->getPrinterPort())) { //starts client connection, checks for connection printClient.println(apiGetData); - printClient.println("Host: " + String(myServer) + ":" + String(myPort)); + printClient.println("Host: " + this->globalDataController->getPrinterServer() + ":" + String(this->globalDataController->getPrinterPort())); printClient.println("X-Api-Key: " + myApiKey); if (encodedAuth != "") { printClient.print("Authorization: "); @@ -55,18 +52,18 @@ WiFiClient DuetClient::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 " + this->globalDataController->getPrinterServer() + ":" + String(this->globalDataController->getPrinterPort()) + " failed."); this->debugController->printLn(""); resetPrintData(); - printerData.error = "Connection to " + String(myServer) + ":" + String(myPort) + " failed."; + printerData.error = "Connection to " + this->globalDataController->getPrinterServer() + ":" + String(this->globalDataController->getPrinterPort()) + " failed."; return printClient; } } else { - this->debugController->printLn("Connection to Duet failed: " + String(myServer) + ":" + String(myPort)); //error message if no client connect + this->debugController->printLn("Connection to Duet failed: " + this->globalDataController->getPrinterServer() + ":" + String(this->globalDataController->getPrinterPort())); //error message if no client connect this->debugController->printLn(""); resetPrintData(); - printerData.error = "Connection to Duet failed: " + String(myServer) + ":" + String(myPort); + printerData.error = "Connection to Duet failed: " + this->globalDataController->getPrinterServer() + ":" + String(this->globalDataController->getPrinterPort()); return printClient; } @@ -85,7 +82,7 @@ WiFiClient DuetClient::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 " + this->globalDataController->getPrinterServer() + ":" + String(this->globalDataController->getPrinterPort()); printerData.state = ""; } @@ -99,9 +96,9 @@ WiFiClient DuetClient::getPostRequest(String apiPostData, String apiPostBody) { this->debugController->printLn("Getting Duet Data via POST"); this->debugController->printLn(apiPostData + " | " + apiPostBody); result = ""; - if (printClient.connect(myServer, myPort)) { //starts client connection, checks for connection + if (printClient.connect(this->globalDataController->getPrinterServer(), this->globalDataController->getPrinterPort())) { //starts client connection, checks for connection printClient.println(apiPostData); - printClient.println("Host: " + String(myServer) + ":" + String(myPort)); + printClient.println("Host: " + this->globalDataController->getPrinterServer() + ":" + String(this->globalDataController->getPrinterPort())); printClient.println("Connection: close"); printClient.println("X-Api-Key: " + myApiKey); if (encodedAuth != "") { @@ -115,18 +112,18 @@ WiFiClient DuetClient::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("Connection to " + this->globalDataController->getPrinterServer() + ":" + String(this->globalDataController->getPrinterPort()) + " failed."); this->debugController->printLn(""); resetPrintData(); - printerData.error = "Connection to " + String(myServer) + ":" + String(myPort) + " failed."; + printerData.error = "Connection to " + this->globalDataController->getPrinterServer() + ":" + String(this->globalDataController->getPrinterPort()) + " failed."; return printClient; } } else { - this->debugController->printLn("Connection to Duet failed: " + String(myServer) + ":" + String(myPort)); //error message if no client connect + this->debugController->printLn("Connection to Duet failed: " + this->globalDataController->getPrinterServer() + ":" + String(this->globalDataController->getPrinterPort())); //error message if no client connect this->debugController->printLn(""); resetPrintData(); - printerData.error = "Connection to Duet failed: " + String(myServer) + ":" + String(myPort); + printerData.error = "Connection to Duet failed: " + this->globalDataController->getPrinterServer() + ":" + String(this->globalDataController->getPrinterPort()); return printClient; } @@ -145,7 +142,7 @@ WiFiClient DuetClient::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 " + this->globalDataController->getPrinterServer() + ":" + String(this->globalDataController->getPrinterPort()); printerData.state = ""; } @@ -168,8 +165,8 @@ void DuetClient::getPrinterJobResults() { // Parse JSON object DeserializationError error = deserializeJson(jsonBuffer, printClient); if (error) { - this->debugController->printLn("Duet Data Parsing failed: " + String(myServer) + ":" + String(myPort)); - printerData.error = "Duet Data Parsing failed: " + String(myServer) + ":" + String(myPort); + this->debugController->printLn("Duet Data Parsing failed: " + this->globalDataController->getPrinterServer() + ":" + String(this->globalDataController->getPrinterPort())); + printerData.error = "Duet Data Parsing failed: " + this->globalDataController->getPrinterServer() + ":" + String(this->globalDataController->getPrinterPort()); printerData.state = ""; printerData.isPrinting = false; printerData.toolTemp = ""; @@ -202,7 +199,7 @@ let total_time = pstats.print_duration / vsd.progress; let eta = total_time - pstats.print_duration; */ - if (isOperational()) { + if (BasePrinterClientImpl::isOperational()) { this->debugController->printLn("Status: " + printerData.state); } else { this->debugController->printLn("Printer Not Operational"); @@ -240,14 +237,14 @@ let eta = total_time - pstats.print_duration; */ printerData.bedTargetTemp = (int)jsonBuffer["result"]["status"]["heater_bed"]["target"]; printerData.fileSize = (long)jsonBuffer["result"]["size"]; - if (isPrinting()) { + if (BasePrinterClientImpl::isPrinting()) { this->debugController->printLn("Status: " + printerData.state + " " + printerData.fileName + "(" + printerData.progressCompletion + "%)"); } } void DuetClient::getPrinterPsuState() { //**** get the PSU state (if enabled and printer operational) - if (pollPsu && isOperational()) { + if (pollPsu && BasePrinterClientImpl::isOperational()) { if (!validate()) { printerData.isPSUoff = false; // we do not know PSU state, so assume on. return; @@ -280,131 +277,3 @@ void DuetClient::getPrinterPsuState() { printerData.isPSUoff = false; // we are not checking PSU state, so assume on } } - -// Reset all PrinterData -void DuetClient::resetPrintData() { - printerData.averagePrintTime = ""; - printerData.estimatedPrintTime = ""; - printerData.fileName = ""; - printerData.fileSize = ""; - printerData.lastPrintTime = ""; - printerData.progressCompletion = ""; - printerData.progressFilepos = ""; - printerData.progressPrintTime = ""; - printerData.progressPrintTimeLeft = ""; - printerData.state = ""; - printerData.toolTemp = ""; - printerData.toolTargetTemp = ""; - printerData.filamentLength = ""; - printerData.bedTemp = ""; - printerData.bedTargetTemp = ""; - printerData.isPrinting = false; - printerData.isPSUoff = false; - printerData.error = ""; -} - -String DuetClient::getAveragePrintTime(){ - return printerData.averagePrintTime; -} - -String DuetClient::getEstimatedPrintTime() { - return printerData.estimatedPrintTime; -} - -String DuetClient::getFileName() { - return printerData.fileName; -} - -String DuetClient::getFileSize() { - return printerData.fileSize; -} - -String DuetClient::getLastPrintTime(){ - return printerData.lastPrintTime; -} - -String DuetClient::getProgressCompletion() { - return String(printerData.progressCompletion.toInt()); -} - -String DuetClient::getProgressFilepos() { - return printerData.progressFilepos; -} - -String DuetClient::getProgressPrintTime() { - return printerData.progressPrintTime; -} - -String DuetClient::getProgressPrintTimeLeft() { - String rtnValue = printerData.progressPrintTimeLeft; - if (getProgressCompletion() == "100") { - rtnValue = "0"; // Print is done so this should be 0 this is a fix for Duet - } - return rtnValue; -} - -String DuetClient::getState() { - return printerData.state; -} - -boolean DuetClient::isPrinting() { - return printerData.isPrinting; -} - -boolean DuetClient::isPSUoff() { - return printerData.isPSUoff; -} - -boolean DuetClient::isOperational() { - boolean operational = false; - if (printerData.state == "I" || isPrinting()) { - operational = true; - } - return operational; -} - -String DuetClient::getTempBedActual() { - return printerData.bedTemp; -} - -String DuetClient::getTempBedTarget() { - return printerData.bedTargetTemp; -} - -String DuetClient::getTempToolActual() { - return printerData.toolTemp; -} - -String DuetClient::getTempToolTarget() { - return printerData.toolTargetTemp; -} - -String DuetClient::getFilamentLength() { - return printerData.filamentLength; -} - -String DuetClient::getError() { - return printerData.error; -} - -String DuetClient::getValueRounded(String value) { - float f = value.toFloat(); - int rounded = (int)(f+0.5f); - return String(rounded); -} - -String DuetClient::getPrinterType() { - return printerType; -} - -int DuetClient::getPrinterPort() { - return myPort; -} - -String DuetClient::getPrinterName() { - return printerData.printerName; -} - -void DuetClient::setPrinterName(String printer) { - printerData.printerName = printer; -} \ No newline at end of file diff --git a/src/Clients/DuetClient.h b/src/Clients/DuetClient.h index dc5fcd6..e0b8115 100644 --- a/src/Clients/DuetClient.h +++ b/src/Clients/DuetClient.h @@ -3,79 +3,24 @@ #include #include #include "Debug.h" -#include "BasePrinterClient.h" -#include "../Global/GlobalDataController.h" +#include "BasePrinterClientImpl.h" -class DuetClient : public BasePrinterClient { +class DuetClient : public BasePrinterClientImpl { private: - char myServer[100]; - int myPort = 80; String myApiKey = ""; String encodedAuth = ""; boolean pollPsu; - const String printerType = "Duet"; - void resetPrintData(); boolean validate(); WiFiClient getSubmitRequest(String apiGetData); WiFiClient getPostRequest(String apiPostData, String apiPostBody); String result; - - typedef struct { - String averagePrintTime; - String estimatedPrintTime; - String fileName; - String fileSize; - String lastPrintTime; - String progressCompletion; - String progressFilepos; - String progressPrintTime; - String progressPrintTimeLeft; - String state; - String toolTemp; - String toolTargetTemp; - String filamentLength; - String bedTemp; - String bedTargetTemp; - boolean isPrinting; - boolean isPSUoff; - String error; - String printerName; - } PrinterStruct; - - PrinterStruct printerData; - GlobalDataController *globalDataController; - DebugController *debugController; public: DuetClient(GlobalDataController *globalDataController, DebugController *debugController); - void getPrinterJobResults(); - void getPrinterPsuState(); - void updatePrintClient(); - String getAveragePrintTime(); - String getEstimatedPrintTime(); - String getFileName(); - String getFileSize(); - String getLastPrintTime(); - String getProgressCompletion(); - String getProgressFilepos(); - String getProgressPrintTime(); - String getProgressPrintTimeLeft(); - String getState(); - boolean isPrinting(); - boolean isOperational(); - boolean isPSUoff(); - String getTempBedActual(); - String getTempBedTarget(); - String getTempToolActual(); - String getTempToolTarget(); - String getFilamentLength(); - String getValueRounded(String value); - String getError(); - String getPrinterType(); - int getPrinterPort(); - String getPrinterName(); - void setPrinterName(String printer); + void getPrinterJobResults() override; + void getPrinterPsuState() override; + void updatePrintClient() override; }; \ No newline at end of file diff --git a/src/Clients/KlipperClient.cpp b/src/Clients/KlipperClient.cpp index 5d520a4..c7f55e1 100644 --- a/src/Clients/KlipperClient.cpp +++ b/src/Clients/KlipperClient.cpp @@ -3,16 +3,12 @@ #include "KlipperClient.h" -KlipperClient::KlipperClient(GlobalDataController *globalDataController, DebugController *debugController) { - this->globalDataController = globalDataController; - this->debugController = debugController; +KlipperClient::KlipperClient(GlobalDataController *globalDataController, DebugController *debugController) +: BasePrinterClientImpl("Klipper", globalDataController, debugController) { this->updatePrintClient(); } void KlipperClient::updatePrintClient() { - this->globalDataController->getPrinterHostName().toCharArray(this->myServer, 100); - 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,7 +21,7 @@ void KlipperClient::updatePrintClient() { boolean KlipperClient::validate() { boolean rtnValue = false; printerData.error = ""; - if ((String(this->myServer) == "") && (String(this->myServerIp) == "")) { + if ((this->globalDataController->getPrinterServer() == "") && (this->globalDataController->getPrinterHostName() == "")) { printerData.error += "Server address or host name is required; "; } if (printerData.error == "") { @@ -37,17 +33,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; + String targetServer = this->globalDataController->getPrinterServer(); + if (this->globalDataController->getPrinterServer() == "") { + targetServer = this->globalDataController->getPrinterHostName(); } this->debugController->printLn("Getting Klipper Data via GET"); this->debugController->printLn(apiGetData); result = ""; - if (printClient.connect(targetServer, myPort)) { //starts client connection, checks for connection + if (printClient.connect(targetServer, this->globalDataController->getPrinterPort())) { //starts client connection, checks for connection printClient.println(apiGetData); - printClient.println("Host: " + String(targetServer) + ":" + String(myPort)); + printClient.println("Host: " + String(targetServer) + ":" + this->globalDataController->getPrinterPort()); if (encodedAuth != "") { printClient.print("Authorization: "); printClient.println("Basic " + encodedAuth); @@ -55,18 +51,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(targetServer) + ":" + String(myPort) + " failed."); + this->debugController->printLn("Connection to " + targetServer + ":" + String(this->globalDataController->getPrinterPort()) + " failed."); this->debugController->printLn(""); resetPrintData(); - printerData.error = "Connection to " + String(targetServer) + ":" + String(myPort) + " failed."; + printerData.error = "Connection to " + targetServer + ":" + String(this->globalDataController->getPrinterPort()) + " failed."; return printClient; } } else { - this->debugController->printLn("Connection to Klipper failed: " + String(targetServer) + ":" + String(myPort)); //error message if no client connect + this->debugController->printLn("Connection to Klipper failed: " + targetServer + ":" + String(this->globalDataController->getPrinterPort())); //error message if no client connect this->debugController->printLn(""); resetPrintData(); - printerData.error = "Connection to Klipper failed: " + String(targetServer) + ":" + String(myPort); + printerData.error = "Connection to Klipper failed: " + targetServer + ":" + String(this->globalDataController->getPrinterPort()); return printClient; } @@ -85,7 +81,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(targetServer) + ":" + String(myPort); + printerData.error = "Invalid response from " + targetServer + ":" + String(this->globalDataController->getPrinterPort()); printerData.state = ""; } @@ -95,17 +91,17 @@ 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; + String targetServer = this->globalDataController->getPrinterServer(); + if (this->globalDataController->getPrinterServer() == "") { + targetServer = this->globalDataController->getPrinterHostName(); } this->debugController->printLn("Getting Klipper Data via POST"); this->debugController->printLn(apiPostData + " | " + apiPostBody); result = ""; - if (printClient.connect(targetServer, myPort)) { //starts client connection, checks for connection + if (printClient.connect(targetServer, this->globalDataController->getPrinterPort())) { //starts client connection, checks for connection printClient.println(apiPostData); - printClient.println("Host: " + String(targetServer) + ":" + String(myPort)); + printClient.println("Host: " + targetServer + ":" + String(this->globalDataController->getPrinterPort())); printClient.println("Connection: close"); if (encodedAuth != "") { printClient.print("Authorization: "); @@ -118,18 +114,18 @@ WiFiClient KlipperClient::getPostRequest(String apiPostData, String apiPostBody) printClient.println(); printClient.println(apiPostBody); if (printClient.println() == 0) { - this->debugController->printLn("Connection to " + String(targetServer) + ":" + String(myPort) + " failed."); + this->debugController->printLn("Connection to " + targetServer + ":" + String(this->globalDataController->getPrinterPort()) + " failed."); this->debugController->printLn(""); resetPrintData(); - printerData.error = "Connection to " + String(targetServer) + ":" + String(myPort) + " failed."; + printerData.error = "Connection to " + targetServer + ":" + String(this->globalDataController->getPrinterPort()) + " failed."; return printClient; } } else { - this->debugController->printLn("Connection to Klipper failed: " + String(targetServer) + ":" + String(myPort)); //error message if no client connect + this->debugController->printLn("Connection to Klipper failed: " + targetServer + ":" + String(this->globalDataController->getPrinterPort())); //error message if no client connect this->debugController->printLn(""); resetPrintData(); - printerData.error = "Connection to Klipper failed: " + String(targetServer) + ":" + String(myPort); + printerData.error = "Connection to Klipper failed: " + targetServer + ":" + String(this->globalDataController->getPrinterPort()); return printClient; } @@ -148,7 +144,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(targetServer) + ":" + String(myPort); + printerData.error = "Invalid response from " + targetServer + ":" + String(this->globalDataController->getPrinterPort()); printerData.state = ""; } @@ -159,9 +155,9 @@ void KlipperClient::getPrinterJobResults() { if (!validate()) { return; } - const char *targetServer = this->myServerIp; - if (String(this->myServerIp) == "") { - targetServer = this->myServer; + String targetServer = this->globalDataController->getPrinterServer(); + if (this->globalDataController->getPrinterServer() == "") { + targetServer = this->globalDataController->getPrinterHostName(); } //**** get the Printer Job status @@ -176,8 +172,8 @@ void KlipperClient::getPrinterJobResults() { // Parse JSON object DeserializationError error = deserializeJson(jsonBuffer, printClient); if (error) { - this->debugController->printLn("Klipper Data Parsing failed: " + String(targetServer) + ":" + String(myPort)); - printerData.error = "Klipper Data Parsing failed: " + String(targetServer) + ":" + String(myPort); + this->debugController->printLn("Klipper Data Parsing failed: " + targetServer + ":" + String(this->globalDataController->getPrinterPort())); + printerData.error = "Klipper Data Parsing failed: " + targetServer + ":" + String(this->globalDataController->getPrinterPort()); printerData.state = ""; printerData.isPrinting = false; printerData.toolTemp = ""; @@ -185,7 +181,6 @@ void KlipperClient::getPrinterJobResults() { printerData.bedTemp = ""; printerData.bedTargetTemp = (const char*)jsonBuffer["result"]["status"]["heater_bed"]["target"]; return; - return; } printerData.averagePrintTime = (int)jsonBuffer["result"]["status"]["toolhead"]["averagePrintTime"]; @@ -210,7 +205,7 @@ let total_time = pstats.print_duration / vsd.progress; let eta = total_time - pstats.print_duration; */ - if (isOperational()) { + if (BasePrinterClientImpl::isOperational()) { this->debugController->printLn("Status: " + printerData.state); } else { this->debugController->printLn("Printer Not Operational"); @@ -248,14 +243,14 @@ let eta = total_time - pstats.print_duration; */ printerData.bedTargetTemp = (int)jsonBuffer["result"]["status"]["heater_bed"]["target"]; printerData.fileSize = (long)jsonBuffer2["result"]["size"]; - if (isPrinting()) { + if (BasePrinterClientImpl::isOperational()) { this->debugController->printLn("Status: " + printerData.state + " " + printerData.fileName + "(" + printerData.progressCompletion + "%)"); } } void KlipperClient::getPrinterPsuState() { //**** get the PSU state (if enabled and printer operational) - if (pollPsu && isOperational()) { + if (pollPsu && BasePrinterClientImpl::isOperational()) { if (!validate()) { printerData.isPSUoff = false; // we do not know PSU state, so assume on. return; @@ -288,131 +283,3 @@ void KlipperClient::getPrinterPsuState() { printerData.isPSUoff = false; // we are not checking PSU state, so assume on } } - -// Reset all PrinterData -void KlipperClient::resetPrintData() { - printerData.averagePrintTime = ""; - printerData.estimatedPrintTime = ""; - printerData.fileName = ""; - printerData.fileSize = ""; - printerData.lastPrintTime = ""; - printerData.progressCompletion = ""; - printerData.progressFilepos = ""; - printerData.progressPrintTime = ""; - printerData.progressPrintTimeLeft = ""; - printerData.state = ""; - printerData.toolTemp = ""; - printerData.toolTargetTemp = ""; - printerData.filamentLength = ""; - printerData.bedTemp = ""; - printerData.bedTargetTemp = ""; - printerData.isPrinting = false; - printerData.isPSUoff = false; - printerData.error = ""; -} - -String KlipperClient::getAveragePrintTime(){ - return printerData.averagePrintTime; -} - -String KlipperClient::getEstimatedPrintTime() { - return printerData.estimatedPrintTime; -} - -String KlipperClient::getFileName() { - return printerData.fileName; -} - -String KlipperClient::getFileSize() { - return printerData.fileSize; -} - -String KlipperClient::getLastPrintTime(){ - return printerData.lastPrintTime; -} - -String KlipperClient::getProgressCompletion() { - return String(printerData.progressCompletion.toInt()); -} - -String KlipperClient::getProgressFilepos() { - return printerData.progressFilepos; -} - -String KlipperClient::getProgressPrintTime() { - return printerData.progressPrintTime; -} - -String KlipperClient::getProgressPrintTimeLeft() { - String rtnValue = printerData.progressPrintTimeLeft; - if (getProgressCompletion() == "100") { - rtnValue = "0"; // Print is done so this should be 0 this is a fix for Klipper - } - return rtnValue; -} - -String KlipperClient::getState() { - return printerData.state; -} - -boolean KlipperClient::isPrinting() { - return printerData.isPrinting; -} - -boolean KlipperClient::isPSUoff() { - return printerData.isPSUoff; -} - -boolean KlipperClient::isOperational() { - boolean operational = false; - if (printerData.state == "standby" || isPrinting()) { - operational = true; - } - return operational; -} - -String KlipperClient::getTempBedActual() { - return printerData.bedTemp; -} - -String KlipperClient::getTempBedTarget() { - return printerData.bedTargetTemp; -} - -String KlipperClient::getTempToolActual() { - return printerData.toolTemp; -} - -String KlipperClient::getTempToolTarget() { - return printerData.toolTargetTemp; -} - -String KlipperClient::getFilamentLength() { - return printerData.filamentLength; -} - -String KlipperClient::getError() { - return printerData.error; -} - -String KlipperClient::getValueRounded(String value) { - float f = value.toFloat(); - int rounded = (int)(f+0.5f); - return String(rounded); -} - -String KlipperClient::getPrinterType() { - return printerType; -} - -int KlipperClient::getPrinterPort() { - return myPort; -} - -String KlipperClient::getPrinterName() { - return printerData.printerName; -} - -void KlipperClient::setPrinterName(String printer) { - printerData.printerName = printer; -} \ No newline at end of file diff --git a/src/Clients/KlipperClient.h b/src/Clients/KlipperClient.h index 41bf050..378808f 100644 --- a/src/Clients/KlipperClient.h +++ b/src/Clients/KlipperClient.h @@ -3,79 +3,24 @@ #include #include #include "Debug.h" -#include "BasePrinterClient.h" +#include "BasePrinterClientImpl.h" #include "../Global/GlobalDataController.h" -class KlipperClient : public BasePrinterClient { +class KlipperClient : public BasePrinterClientImpl { private: - char myServer[100]; - char myServerIp[30]; - int myPort = 7125; String encodedAuth = ""; boolean pollPsu; - const String printerType = "Klipper"; - void resetPrintData(); boolean validate(); WiFiClient getSubmitRequest(String apiGetData); WiFiClient getPostRequest(String apiPostData, String apiPostBody); String result; - - typedef struct { - String averagePrintTime; - String estimatedPrintTime; - String fileName; - String fileSize; - String lastPrintTime; - String progressCompletion; - String progressFilepos; - String progressPrintTime; - String progressPrintTimeLeft; - String state; - String toolTemp; - String toolTargetTemp; - String filamentLength; - String bedTemp; - String bedTargetTemp; - boolean isPrinting; - boolean isPSUoff; - String error; - String printerName; - } PrinterStruct; - - PrinterStruct printerData; - GlobalDataController *globalDataController; - DebugController *debugController; public: KlipperClient(GlobalDataController *globalDataController, DebugController *debugController); - void getPrinterJobResults(); - void getPrinterPsuState(); - void updatePrintClient(); - String getAveragePrintTime(); - String getEstimatedPrintTime(); - String getFileName(); - String getFileSize(); - String getLastPrintTime(); - String getProgressCompletion(); - String getProgressFilepos(); - String getProgressPrintTime(); - String getProgressPrintTimeLeft(); - String getState(); - boolean isPrinting(); - boolean isOperational(); - boolean isPSUoff(); - String getTempBedActual(); - String getTempBedTarget(); - String getTempToolActual(); - String getTempToolTarget(); - String getFilamentLength(); - String getValueRounded(String value); - String getError(); - String getPrinterType(); - int getPrinterPort(); - String getPrinterName(); - void setPrinterName(String printer); + void getPrinterJobResults() override; + void getPrinterPsuState() override; + void updatePrintClient() override; }; \ No newline at end of file