Added known error messages for checksum mismatches or expected line issues from Repetier to recognized "auto-correction" errors, made code around all that a bit more readable.
parent
d6a83d174f
commit
ad1cbca22a
|
@ -89,10 +89,13 @@ class VirtualPrinter():
|
||||||
self.readList.append("ok\n")
|
self.readList.append("ok\n")
|
||||||
elif self.currentLine == 100:
|
elif self.currentLine == 100:
|
||||||
# simulate a resend at line 100 of the last 5 lines
|
# simulate a resend at line 100 of the last 5 lines
|
||||||
|
self.readList.append("Error: Line Number is not Last Line Number\n")
|
||||||
self.readList.append("rs %d\n" % (self.currentLine - 5))
|
self.readList.append("rs %d\n" % (self.currentLine - 5))
|
||||||
elif len(data.strip()) > 0:
|
elif len(data.strip()) > 0:
|
||||||
self.readList.append("ok\n")
|
self.readList.append("ok\n")
|
||||||
self.currentLine += 1
|
|
||||||
|
if "*" in data:
|
||||||
|
self.currentLine += 1
|
||||||
|
|
||||||
def readline(self):
|
def readline(self):
|
||||||
if self.readList is None:
|
if self.readList is None:
|
||||||
|
@ -340,6 +343,8 @@ class MachineCom(object):
|
||||||
if line == None:
|
if line == None:
|
||||||
break
|
break
|
||||||
|
|
||||||
|
|
||||||
|
### Error detection
|
||||||
#No matter the state, if we see an error, goto the error state and store the error for reference.
|
#No matter the state, if we see an error, goto the error state and store the error for reference.
|
||||||
if line.startswith('Error:'):
|
if line.startswith('Error:'):
|
||||||
#Oh YEAH, consistency.
|
#Oh YEAH, consistency.
|
||||||
|
@ -349,24 +354,41 @@ class MachineCom(object):
|
||||||
if re.match('Error:[0-9]\n', line):
|
if re.match('Error:[0-9]\n', line):
|
||||||
line = line.rstrip() + self._readline()
|
line = line.rstrip() + self._readline()
|
||||||
#Skip the communication errors, as those get corrected.
|
#Skip the communication errors, as those get corrected.
|
||||||
if 'checksum mismatch' in line or 'Line Number is not Last Line Number' in line or 'No Line Number with checksum' in line or 'No Checksum with line number' in line:
|
if 'checksum mismatch' in line \
|
||||||
|
or 'Wrong checksum' in line \
|
||||||
|
or 'Line Number is not Last Line Number' in line \
|
||||||
|
or 'expected line' in line \
|
||||||
|
or 'No Line Number with checksum' in line \
|
||||||
|
or 'No Checksum with line number' in line \
|
||||||
|
or 'Missing checksum' in line:
|
||||||
pass
|
pass
|
||||||
elif not self.isError():
|
elif not self.isError():
|
||||||
self._errorValue = line[6:]
|
self._errorValue = line[6:]
|
||||||
self._changeState(self.STATE_ERROR)
|
self._changeState(self.STATE_ERROR)
|
||||||
|
|
||||||
|
### Evaluate temperature status messages
|
||||||
if ' T:' in line or line.startswith('T:'):
|
if ' T:' in line or line.startswith('T:'):
|
||||||
self._temp = float(re.search("-?[0-9\.]*", line.split('T:')[1]).group(0))
|
try:
|
||||||
if ' B:' in line:
|
self._temp = float(re.search("-?[0-9\.]*", line.split('T:')[1]).group(0))
|
||||||
self._bedTemp = float(re.search("-?[0-9\.]*", line.split(' B:')[1]).group(0))
|
if ' B:' in line:
|
||||||
self._callback.mcTempUpdate(self._temp, self._bedTemp, self._targetTemp, self._bedTargetTemp)
|
self._bedTemp = float(re.search("-?[0-9\.]*", line.split(' B:')[1]).group(0))
|
||||||
|
|
||||||
|
self._callback.mcTempUpdate(self._temp, self._bedTemp, self._targetTemp, self._bedTargetTemp)
|
||||||
|
except ValueError:
|
||||||
|
# catch conversion issues, we'll rather just not get the temperature update instead of killing the connection
|
||||||
|
pass
|
||||||
|
|
||||||
#If we are waiting for an M109 or M190 then measure the time we lost during heatup, so we can remove that time from our printing time estimate.
|
#If we are waiting for an M109 or M190 then measure the time we lost during heatup, so we can remove that time from our printing time estimate.
|
||||||
if not 'ok' in line and self._heatupWaitStartTime != 0:
|
if not 'ok' in line and self._heatupWaitStartTime != 0:
|
||||||
t = time.time()
|
t = time.time()
|
||||||
self._heatupWaitTimeLost = t - self._heatupWaitStartTime
|
self._heatupWaitTimeLost = t - self._heatupWaitStartTime
|
||||||
self._heatupWaitStartTime = t
|
self._heatupWaitStartTime = t
|
||||||
|
|
||||||
|
### Forward messages from the firmware
|
||||||
elif line.strip() != '' and line.strip() != 'ok' and not line.startswith("wait") and not line.startswith('Resend:') and line != 'echo:Unknown command:""\n' and self.isOperational():
|
elif line.strip() != '' and line.strip() != 'ok' and not line.startswith("wait") and not line.startswith('Resend:') and line != 'echo:Unknown command:""\n' and self.isOperational():
|
||||||
self._callback.mcMessage(line)
|
self._callback.mcMessage(line)
|
||||||
|
|
||||||
|
### Baudrate detection
|
||||||
if self._state == self.STATE_DETECT_BAUDRATE:
|
if self._state == self.STATE_DETECT_BAUDRATE:
|
||||||
if line == '' or time.time() > timeout:
|
if line == '' or time.time() > timeout:
|
||||||
if len(self._baudrateDetectList) < 1:
|
if len(self._baudrateDetectList) < 1:
|
||||||
|
@ -404,6 +426,8 @@ class MachineCom(object):
|
||||||
self._changeState(self.STATE_OPERATIONAL)
|
self._changeState(self.STATE_OPERATIONAL)
|
||||||
else:
|
else:
|
||||||
self._testingBaudrate = False
|
self._testingBaudrate = False
|
||||||
|
|
||||||
|
### Connection attempt
|
||||||
elif self._state == self.STATE_CONNECTING:
|
elif self._state == self.STATE_CONNECTING:
|
||||||
if (line == "" or "wait" in line) and startSeen:
|
if (line == "" or "wait" in line) and startSeen:
|
||||||
self._sendCommand("M105")
|
self._sendCommand("M105")
|
||||||
|
@ -413,11 +437,15 @@ class MachineCom(object):
|
||||||
self._changeState(self.STATE_OPERATIONAL)
|
self._changeState(self.STATE_OPERATIONAL)
|
||||||
elif time.time() > timeout:
|
elif time.time() > timeout:
|
||||||
self.close()
|
self.close()
|
||||||
|
|
||||||
|
### Operational
|
||||||
elif self._state == self.STATE_OPERATIONAL or self._state == self.STATE_PAUSED:
|
elif self._state == self.STATE_OPERATIONAL or self._state == self.STATE_PAUSED:
|
||||||
#Request the temperature on comm timeout (every 5 seconds) when we are not printing.
|
#Request the temperature on comm timeout (every 5 seconds) when we are not printing.
|
||||||
if line == "" or "wait" in line:
|
if line == "" or "wait" in line:
|
||||||
self._sendCommand("M105")
|
self._sendCommand("M105")
|
||||||
tempRequestTimeout = time.time() + 5
|
tempRequestTimeout = time.time() + 5
|
||||||
|
|
||||||
|
### Printing
|
||||||
elif self._state == self.STATE_PRINTING:
|
elif self._state == self.STATE_PRINTING:
|
||||||
if line == "" and time.time() > timeout:
|
if line == "" and time.time() > timeout:
|
||||||
self._log("Communication timeout during printing, forcing a line")
|
self._log("Communication timeout during printing, forcing a line")
|
||||||
|
@ -426,6 +454,8 @@ class MachineCom(object):
|
||||||
if time.time() > tempRequestTimeout:
|
if time.time() > tempRequestTimeout:
|
||||||
self._commandQueue.put("M105")
|
self._commandQueue.put("M105")
|
||||||
tempRequestTimeout = time.time() + 5
|
tempRequestTimeout = time.time() + 5
|
||||||
|
|
||||||
|
# ok -> send next command
|
||||||
if "ok" in line:
|
if "ok" in line:
|
||||||
timeout = time.time() + 5
|
timeout = time.time() + 5
|
||||||
if self._resendDelta is not None:
|
if self._resendDelta is not None:
|
||||||
|
@ -434,6 +464,7 @@ class MachineCom(object):
|
||||||
self._sendCommand(self._commandQueue.get())
|
self._sendCommand(self._commandQueue.get())
|
||||||
else:
|
else:
|
||||||
self._sendNext()
|
self._sendNext()
|
||||||
|
# resend -> start resend procedure from requested line
|
||||||
elif "resend" in line.lower() or "rs" in line:
|
elif "resend" in line.lower() or "rs" in line:
|
||||||
lineToResend = None
|
lineToResend = None
|
||||||
try:
|
try:
|
||||||
|
|
Loading…
Reference in New Issue