Cleanup and refactor a little

master
Guillaume Seguin 2012-08-03 23:54:35 +02:00
parent ee5e41bcd1
commit a6df0acfa1
1 changed files with 49 additions and 63 deletions

View File

@ -109,84 +109,70 @@ class printcore():
self.printer.setDTR(1) self.printer.setDTR(1)
self.printer.setDTR(0) self.printer.setDTR(0)
def _readline(self):
try:
line = self.printer.readline()
return line
except SelectError, e:
if 'Bad file descriptor' in e.args[1]:
print "Can't read from printer (disconnected?)."
return None
else:
raise
except SerialException, e:
print "Can't read from printer (disconnected?)."
return None
except OSError, e:
print "Can't read from printer (disconnected?)."
return None
def _listen(self): def _listen(self):
"""This function acts on messages from the firmware """This function acts on messages from the firmware
""" """
self.clear=True self.clear = True
if self.printer.inWaiting(): # flush receive buffer if not self.printing:
self.printer.read(self.printer.inWaiting())
while not self.printer.inWaiting(): # wait for new data to read
time.sleep(0.5)
if (not self.online and not self.printing): # send M105 to initiate connection
self._send("M105") self._send("M105")
while(True): time.sleep(1)
if self.stop_read_thread: while not self.stop_read_thread and self.printer and self.printer.isOpen():
return line = self._readline()
if(not self.printer or not self.printer.isOpen): if line == None:
break break
try: if len(line) > 1:
line=self.printer.readline() self.log.append(line)
except SelectError, e: if self.recvcb:
if 'Bad file descriptor' in e.args[1]: try: self.recvcb(line)
print "Can't read from printer (disconnected?)." except: pass
break if self.loud: print "RECV: ",line.rstrip()
else: if line.startswith('DEBUG_'):
raise
except SerialException, e:
print "Can't read from printer (disconnected?)."
break
except OSError, e:
print "Can't read from printer (disconnected?)."
break
if(len(line)>1):
self.log+=[line]
if self.recvcb is not None:
try:
self.recvcb(line)
except:
pass
if self.loud:
print "RECV: ",line.rstrip()
if(line.startswith('DEBUG_')):
continue continue
if(line.startswith(tuple(self.greetings)) or line.startswith('ok')): if line.startswith(tuple(self.greetings)) or line.startswith('ok'):
self.clear=True self.clear = True
if(line.startswith(tuple(self.greetings)) or line.startswith('ok') or "T:" in line): if line.startswith(tuple(self.greetings)) or line.startswith('ok') or "T:" in line:
if (not self.online or line.startswith(tuple(self.greetings))) and self.onlinecb is not None: if (not self.online or line.startswith(tuple(self.greetings))) and self.onlinecb is not None:
try: try: self.onlinecb()
self.onlinecb() except: pass
except: self.online = True
pass if line.startswith('ok'):
self.online=True
if(line.startswith('ok')):
#self.resendfrom=-1 #self.resendfrom=-1
#put temp handling here #put temp handling here
if "T:" in line and self.tempcb is not None: if "T:" in line and self.tempcb is not None:
try: #callback for temp, status, whatever
self.tempcb(line) try: self.tempcb(line)
except: except: pass
pass elif line.startswith('Error'):
#callback for temp, status, whatever
elif(line.startswith('Error')):
if self.errorcb is not None: if self.errorcb is not None:
try: #callback for errors
self.errorcb(line) try: self.errorcb(line)
except: except: pass
pass
#callback for errors
pass
if line.lower().startswith("resend") or line.startswith("rs"): if line.lower().startswith("resend") or line.startswith("rs"):
try: try:
toresend=int(line.replace("N:"," ").replace("N"," ").replace(":"," ").split()[-1]) toresend = int(line.replace("N:"," ").replace("N"," ").replace(":"," ").split()[-1])
except: except:
if line.startswith("rs"): if line.startswith("rs"):
toresend=int(line.split()[1]) toresend = int(line.split()[1])
self.resendfrom=toresend self.resendfrom = toresend
self.clear=True self.clear = True
self.clear=True self.clear = True
#callback for disconnect
def _checksum(self,command): def _checksum(self,command):
return reduce(lambda x,y:x^y, map(ord,command)) return reduce(lambda x,y:x^y, map(ord,command))