diff --git a/src/temperature.cpp b/src/temperature.cpp --- a/src/temperature.cpp +++ b/src/temperature.cpp @@ -93,6 +93,11 @@ void Temperature::decodeTemp(const QByteArray &msg) { + int bloc = msg.indexOf(QStringLiteral("B:")); + + float temp1 = 0; + float temp2 = 0; + QRegularExpression tempRegEx(QStringLiteral("(T:(?\\d+\\.?\\d*))")); QRegularExpression targetTempRegEx(QStringLiteral("(\\/)(?\\d*)(.+)")); QRegularExpressionMatch tempCheck = tempRegEx.match(QString::fromLatin1(msg)); @@ -102,10 +107,10 @@ setExtruderTemperature(tempCheck.captured(QStringLiteral("extruder")).toFloat()); } if (targetTempCheck.hasMatch()) { - setExtruderTargetTemperature(targetTempCheck.captured(QStringLiteral("extruderTarget")).toFloat()); + temp1 = targetTempCheck.captured(QStringLiteral("extruderTarget")).toFloat(); } - if (msg.contains(QString::fromLatin1("B:").toLocal8Bit())) { + if (bloc != -1) { QRegularExpression bedRegEx(QStringLiteral("(B:(?\\d+\\.?\\d*))")); QRegularExpressionMatch bedCheck = bedRegEx.match(QString::fromLatin1(msg)); QRegularExpression targetBedRegEx(QStringLiteral("B:(.+)(\\/)(?\\d+)")); @@ -116,8 +121,17 @@ } if (targetBedCheck.hasMatch()) { - setBedTargetTemperature(targetBedCheck.captured(QStringLiteral("bedTarget")).toFloat()); + temp2 = targetBedCheck.captured(QStringLiteral("bedTarget")).toFloat(); } - + } + //Currently the first value after / is stored in temp1 and the second / in temp2 + //Because of this we need to check what came first in the return and place the values + //The regex for temperature needs to look at the whole T: or B: block to correctly decode targets + if (bloc < msg.indexOf(QStringLiteral("T:")) && bloc != -1) { + setExtruderTargetTemperature(temp2); + setBedTargetTemperature(temp1); + } else { + setExtruderTargetTemperature(temp1); + setBedTargetTemperature(temp2); } }