diff --git a/src/atcore.cpp b/src/atcore.cpp --- a/src/atcore.cpp +++ b/src/atcore.cpp @@ -234,6 +234,8 @@ d->printerStatus.posString.replace(':', ""); } + //Check if have temperature info and decode it + temperature().decodeTemp(message); emit(receivedMessage(d->lastMessage)); } diff --git a/src/plugins/aprinterplugin.h b/src/plugins/aprinterplugin.h --- a/src/plugins/aprinterplugin.h +++ b/src/plugins/aprinterplugin.h @@ -30,12 +30,9 @@ Q_INTERFACES(IFirmware) private: static QString _ok; - static QString _extruderTemp; - static QString _bedTemp; public: AprinterPlugin(); QString name() const override; - void extractTemp(const QString &lastMessage); void validateCommand(const QString &lastMessage); QByteArray translate(const QString &command); }; diff --git a/src/plugins/aprinterplugin.cpp b/src/plugins/aprinterplugin.cpp --- a/src/plugins/aprinterplugin.cpp +++ b/src/plugins/aprinterplugin.cpp @@ -26,8 +26,6 @@ #include QString AprinterPlugin::_ok = QStringLiteral("ok"); -QString AprinterPlugin::_extruderTemp = QStringLiteral("T:"); -QString AprinterPlugin::_bedTemp = QStringLiteral("B:"); Q_LOGGING_CATEGORY(APRINTER_PLUGIN, "org.kde.atelier.core.firmware.aprinter"); @@ -41,41 +39,8 @@ qCDebug(APRINTER_PLUGIN) << name() << " plugin loaded!"; } -void AprinterPlugin::extractTemp(const QString &lastMessage) -{ - //ok B:60.4 /60 T:185.4 /185.0 - //ok B:58.7 /40,err T:... <- on Thermistor Error - QString err = QStringLiteral(",err"); - QString newMessage = lastMessage; - - if (newMessage.contains(err)) { - newMessage.replace(err, QString()); - } - - QStringList list = newMessage.split(QChar::fromLatin1(' ')); - - if (newMessage.contains(_bedTemp)) { - // T:185.4 - current temperature - core()->temperature().setExtruderTemperature(list[3].mid(2).toFloat()); - // /185 - target temperature - core()->temperature().setExtruderTargetTemperature(list[4].mid(1).toFloat()); - // B:60.4 - current temperature - core()->temperature().setBedTemperature(list[1].mid(2).toFloat()); - // /60 - target temperature - core()->temperature().setBedTargetTemperature(list[2].mid(1).toFloat()); - } else { - // T:185.4 - current temperature - core()->temperature().setExtruderTemperature(list[1].mid(2).toFloat()); - // /185.0 - target temperature - core()->temperature().setExtruderTargetTemperature(list[2].mid(1).toFloat()); - } -} - void AprinterPlugin::validateCommand(const QString &lastMessage) { - if (lastMessage.contains(_extruderTemp) || lastMessage.contains(_bedTemp)) { - extractTemp(lastMessage); - } if (lastMessage.contains(_ok)) { emit readyForCommand(); } diff --git a/src/plugins/marlinplugin.h b/src/plugins/marlinplugin.h --- a/src/plugins/marlinplugin.h +++ b/src/plugins/marlinplugin.h @@ -30,16 +30,9 @@ Q_INTERFACES(IFirmware) private: static QString _ok; - static QString _extruderTemp; - static QString _bedTemp; - float _lastBedTemp; - float _lastExtruderTemp; - float _lastTargetBedTemp; - float _lastTargetExtruderTemp; public: MarlinPlugin(); QString name() const override; - void extractTemp(const QString &lastMessage); void validateCommand(const QString &lastMessage); QByteArray translate(const QString &command) override; }; diff --git a/src/plugins/marlinplugin.cpp b/src/plugins/marlinplugin.cpp --- a/src/plugins/marlinplugin.cpp +++ b/src/plugins/marlinplugin.cpp @@ -25,71 +25,21 @@ #include "atcore.h" QString MarlinPlugin::_ok = QStringLiteral("ok"); -QString MarlinPlugin::_extruderTemp = QStringLiteral("T:"); -QString MarlinPlugin::_bedTemp = QStringLiteral("B:"); Q_LOGGING_CATEGORY(MARLIN_PLUGIN, "org.kde.atelier.core.firmware.marlin"); QString MarlinPlugin::name() const { return QStringLiteral("Marlin"); } -float _lastBedTemp; -float _lastExtruderTemp; -float _lastTargetBedTemp; -float _lastTargetExtruderTemp; - -MarlinPlugin::MarlinPlugin() : - _lastBedTemp(0.0f), - _lastExtruderTemp(0.0f), - _lastTargetBedTemp(0.0f), - _lastTargetExtruderTemp(0.0f) +MarlinPlugin::MarlinPlugin() { qCDebug(MARLIN_PLUGIN) << name() << " plugin loaded!"; } -void MarlinPlugin::extractTemp(const QString &lastMessage) -{ - QStringList list = lastMessage.split(QChar::fromLatin1(' ')); - bool hasBed = lastMessage.contains(_bedTemp); - if (list.length() < 5) { - // T:151.10 E:0 B:63.2 - // T:142.6 E:0 W:? - - if (list[0].indexOf(_extruderTemp) == 0) { - _lastExtruderTemp = list[0].mid(2).toFloat(); - } - if (hasBed && list[2].indexOf(_bedTemp) == 0) { - _lastBedTemp = list[2].mid(2).toFloat(); - } - } else { - // ok T:185.4 /185.0 B:60.5 /60.0 - - // T:185.4 - current temperature - _lastExtruderTemp = list[1].mid(2).toFloat(); - // /185.0 - target temperature - _lastTargetExtruderTemp = list[2].mid(1).toFloat(); - if (hasBed) { - // B:185.4 - current temperature - _lastBedTemp = list[3].mid(2).toFloat(); - // /60.0 - target temperature - _lastTargetBedTemp = list[4].mid(1).toFloat(); - } - } - core()->temperature().setExtruderTemperature(_lastExtruderTemp); - core()->temperature().setExtruderTargetTemperature(_lastTargetExtruderTemp); - if (hasBed) { - core()->temperature().setBedTemperature(_lastBedTemp); - core()->temperature().setBedTargetTemperature(_lastTargetBedTemp); - } -} - void MarlinPlugin::validateCommand(const QString &lastMessage) { - if (lastMessage.contains(_extruderTemp) || lastMessage.contains(_bedTemp)) { - extractTemp(lastMessage); - } if (lastMessage.contains(_ok)) { emit readyForCommand(); } diff --git a/src/plugins/repetierplugin.h b/src/plugins/repetierplugin.h --- a/src/plugins/repetierplugin.h +++ b/src/plugins/repetierplugin.h @@ -30,12 +30,9 @@ Q_INTERFACES(IFirmware) private: static QString _ok; - static QString _extruderTemp; - static QString _bedTemp; public: RepetierPlugin(); QString name() const override; void validateCommand(const QString &lastMessage); - void extractTemp(const QString &lastMessage); QByteArray translate(const QString &command); }; diff --git a/src/plugins/repetierplugin.cpp b/src/plugins/repetierplugin.cpp --- a/src/plugins/repetierplugin.cpp +++ b/src/plugins/repetierplugin.cpp @@ -26,8 +26,6 @@ #include QString RepetierPlugin::_ok = QStringLiteral("ok"); -QString RepetierPlugin::_extruderTemp = QStringLiteral("T:"); -QString RepetierPlugin::_bedTemp = QStringLiteral("B:"); Q_LOGGING_CATEGORY(REPETIER_PLUGIN, "org.kde.atelier.core.firmware.repetier"); @@ -41,28 +39,8 @@ qCDebug(REPETIER_PLUGIN) << name() << " plugin loaded!"; } -void RepetierPlugin::extractTemp(const QString &lastMessage) -{ - // ok T:185.4 /185.0 B:60.5 /60.0 - QStringList list = lastMessage.split(QChar::fromLatin1(' ')); - // T:185.4 - current temperature - core()->temperature().setExtruderTemperature(list[0].mid(2).toFloat()); - // /185.0 - target temperature - core()->temperature().setExtruderTargetTemperature(list[1].mid(1).toFloat()); - if (lastMessage.contains(_bedTemp)) { - // B:185.4 - current temperature - core()->temperature().setBedTemperature(list[2].mid(2).toFloat()); - // /60.0 - target temperature - core()->temperature().setBedTargetTemperature(list[3].mid(1).toFloat()); - } -} - void RepetierPlugin::validateCommand(const QString &lastMessage) { - if (lastMessage.contains(_extruderTemp) || lastMessage.contains(_bedTemp)) { - extractTemp(lastMessage); - } - if (lastMessage.contains(_ok)) { emit readyForCommand(); } diff --git a/src/plugins/sprinterplugin.h b/src/plugins/sprinterplugin.h --- a/src/plugins/sprinterplugin.h +++ b/src/plugins/sprinterplugin.h @@ -30,12 +30,9 @@ Q_INTERFACES(IFirmware) private: static QString _ok; - static QString _extruderTemp; - static QString _bedTemp; public: SprinterPlugin(); QString name() const override; - void extractTemp(const QString &lastMessage); void validateCommand(const QString &lastMessage); QByteArray translate(const QString &command); }; diff --git a/src/plugins/sprinterplugin.cpp b/src/plugins/sprinterplugin.cpp --- a/src/plugins/sprinterplugin.cpp +++ b/src/plugins/sprinterplugin.cpp @@ -26,8 +26,6 @@ #include QString SprinterPlugin::_ok = QStringLiteral("ok"); -QString SprinterPlugin::_extruderTemp = QStringLiteral("T:"); -QString SprinterPlugin::_bedTemp = QStringLiteral("B:"); Q_LOGGING_CATEGORY(SPRINTER_PLUGIN, "org.kde.atelier.core.firmware.sprinter"); @@ -41,24 +39,8 @@ qCDebug(SPRINTER_PLUGIN) << name() << " plugin loaded!"; } -void SprinterPlugin::extractTemp(const QString &lastMessage) -{ - // ok T:185.4 @:0 B:60.5 - QStringList list = lastMessage.split(QChar::fromLatin1(' ')); - - // T:185.4 - current temperature - core()->temperature().setExtruderTemperature(list[1].mid(2).toFloat()); - if (lastMessage.contains(_bedTemp)) { - // B:185.4 - current temperature - core()->temperature().setBedTemperature(list[3].mid(2).toFloat()); - } -} - void SprinterPlugin::validateCommand(const QString &lastMessage) { - if (lastMessage.contains(_extruderTemp) || lastMessage.contains(_bedTemp)) { - extractTemp(lastMessage); - } if (lastMessage.contains(_ok)) { emit readyForCommand(); } diff --git a/src/plugins/teacupplugin.h b/src/plugins/teacupplugin.h --- a/src/plugins/teacupplugin.h +++ b/src/plugins/teacupplugin.h @@ -30,12 +30,9 @@ Q_INTERFACES(IFirmware) private: static QString _ok; - static QString _extruderTemp; - static QString _bedTemp; public: TeacupPlugin(); QString name() const override; - void extractTemp(const QString &lastMessage); void validateCommand(const QString &lastMessage); QByteArray translate(const QString &command); }; diff --git a/src/plugins/teacupplugin.cpp b/src/plugins/teacupplugin.cpp --- a/src/plugins/teacupplugin.cpp +++ b/src/plugins/teacupplugin.cpp @@ -27,8 +27,6 @@ #include "atcore.h" QString TeacupPlugin::_ok = QStringLiteral("ok"); -QString TeacupPlugin::_extruderTemp = QStringLiteral("T:"); -QString TeacupPlugin::_bedTemp = QStringLiteral("B:"); Q_LOGGING_CATEGORY(TEACUP_PLUGIN, "org.kde.atelier.core.firmware.teacup"); @@ -42,27 +40,8 @@ qCDebug(TEACUP_PLUGIN) << name() << " plugin loaded!"; } -void TeacupPlugin::extractTemp(const QString &lastMessage) -{ - // ok T:185.4 /185.0 B:60.5 /60.0 - QStringList list = lastMessage.split(QChar::fromLatin1(' ')); - // T:185.4 - current temperature - core()->temperature().setExtruderTemperature(list[0].mid(2).toFloat()); - // /185.0 - target temperature - core()->temperature().setExtruderTargetTemperature(list[1].mid(1).toFloat()); - if (lastMessage.contains(_bedTemp)) { - // B:185.4 - current temperature - core()->temperature().setBedTemperature(list[2].mid(2).toFloat()); - // /60.0 - target temperature - core()->temperature().setBedTargetTemperature(list[3].mid(1).toFloat()); - } -} - void TeacupPlugin::validateCommand(const QString &lastMessage) { - if (lastMessage.contains(_extruderTemp) || lastMessage.contains(_bedTemp)) { - extractTemp(lastMessage); - } if (lastMessage.contains(_ok)) { emit readyForCommand(); } diff --git a/src/temperature.h b/src/temperature.h --- a/src/temperature.h +++ b/src/temperature.h @@ -38,6 +38,7 @@ float bedTargetTemperature() const; float extruderTemperature() const; float extruderTargetTemperature() const; + void decodeTemp(const QByteArray &msg); public slots: void setBedTemperature(float temp); diff --git a/src/temperature.cpp b/src/temperature.cpp --- a/src/temperature.cpp +++ b/src/temperature.cpp @@ -18,6 +18,9 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ + +#include + #include "temperature.h" #include @@ -79,3 +82,34 @@ d->extruderTemp = temp; emit extruderTemperatureChanged(temp); } + +void Temperature::decodeTemp(const QByteArray &msg) +{ + QRegularExpression tempRegEx(QStringLiteral("(T:(?\\d+\\.?\\d*))")); + QRegularExpression targetTempRegEx(QStringLiteral("(\\/)(?\\d*)(.+)")); + QRegularExpressionMatch tempCheck = tempRegEx.match(QString::fromLatin1(msg)); + QRegularExpressionMatch targetTempCheck = targetTempRegEx.match(QString::fromLatin1(msg)); + + if (tempCheck.hasMatch()) { + setExtruderTemperature(tempCheck.captured(QStringLiteral("extruder")).toFloat()); + } + if (targetTempCheck.hasMatch()) { + setExtruderTargetTemperature(targetTempCheck.captured(QStringLiteral("extruderTarget")).toFloat()); + } + + if (msg.contains(QString::fromLatin1("B:").toLocal8Bit())) { + QRegularExpression bedRegEx(QStringLiteral("(B:(?\\d+\\.?\\d*))")); + QRegularExpressionMatch bedCheck = bedRegEx.match(QString::fromLatin1(msg)); + QRegularExpression targetBedRegEx(QStringLiteral("B:(.+)(\\/)(?\\d+)")); + QRegularExpressionMatch targetBedCheck = targetBedRegEx.match(QString::fromLatin1(msg)); + + if (bedCheck.hasMatch()) { + setBedTemperature(bedCheck.captured(QStringLiteral("bed")).toFloat()); + } + + if (targetBedCheck.hasMatch()) { + setBedTargetTemperature(targetBedCheck.captured(QStringLiteral("bedTarget")).toFloat()); + } + + } +} \ No newline at end of file