Modifiche a main e printer per rendere possibile l'invio di keepalive
anche quando si è in attesa di una risposta di stampa avvenuta o di un errore: sfrutta il timeout del socket. Non robustissimo ma funzionamaster
parent
dcd2774336
commit
206bb29334
|
|
@ -7,30 +7,63 @@ import time
|
|||
import sys
|
||||
import printer as p
|
||||
import logging
|
||||
import socket
|
||||
import protocol
|
||||
|
||||
def main():
|
||||
isRunning = True
|
||||
lastAck = True
|
||||
while isRunning:
|
||||
printer = p.MarkoPrinter('./conf.json', LOGGER)
|
||||
connessa = printer.connetti()
|
||||
printer.sendCommand(protocol.deleteMemory())
|
||||
while connessa:
|
||||
lastTimestamp = int(time.time()*100)
|
||||
commandString = protocol.callPrintImage(imageName='TM2.00I',
|
||||
printMode='10',
|
||||
fieldContent='{0}\r{0}'.format(lastTimestamp))
|
||||
try:
|
||||
printer.sendCommand(commandString)
|
||||
LOGGER.debug('SENT: {}'.format(commandString))
|
||||
r=printer.readResponse('callPrintImage')
|
||||
LOGGER.debug('RECEIVED: {}'.format(r))
|
||||
protocol.checkResponse('callPrintImage',r)
|
||||
if lastAck == True:
|
||||
lastTimestamp = int(time.time()*100)
|
||||
commandString = protocol.callPrintImage(imageName='TM2.00I',
|
||||
printMode='10',
|
||||
fieldContent='{0}\r{0}'.format(lastTimestamp))
|
||||
printer.sendCommand(commandString)
|
||||
LOGGER.debug('SENT: {}'.format(subChars(commandString)))
|
||||
lastAck = False
|
||||
else:
|
||||
r=printer.readResponse('callPrintImage')
|
||||
LOGGER.debug('RECEIVED: {}'.format(subChars(r)))
|
||||
if protocol.checkResponse('callPrintImage',r):
|
||||
LOGGER.info("Stampa Riuscita: {}".format(lastTimestamp))
|
||||
else:
|
||||
LOGGER.error("Stampa Fallita: {}".format(lastTimestamp))
|
||||
lastAck = True
|
||||
except socket.timeout as t:
|
||||
LOGGER.debug("Timeout stampa")
|
||||
lastAck = False
|
||||
printer.keepalive()
|
||||
pass
|
||||
except Exception as e:
|
||||
LOGGER.error(str(e))
|
||||
pass
|
||||
pass
|
||||
pass
|
||||
|
||||
def subChars(s):
|
||||
subDict = {'\x02': " #STX ",
|
||||
'\x03': " #ETX ",
|
||||
'\x1B': " #ESC ",
|
||||
'\r': " #CR ",
|
||||
'\f': " #LF ",
|
||||
'\t': " #TAB ",
|
||||
'\x06': " #ACK ",
|
||||
'\x15': " #NACK "
|
||||
}
|
||||
out = ""
|
||||
for c in s:
|
||||
if c in subDict.keys():
|
||||
out += subDict[c]
|
||||
else:
|
||||
out += c
|
||||
return out
|
||||
|
||||
if __name__ == '__main__':
|
||||
# Setup Logger
|
||||
LOGGER = logging.getLogger(__name__)
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ import socket
|
|||
import json
|
||||
import time
|
||||
import protocol
|
||||
import threading
|
||||
import commands as cmd
|
||||
|
||||
class MarkoPrinter:
|
||||
|
|
@ -33,11 +34,13 @@ class MarkoPrinter:
|
|||
self.connected = True
|
||||
self.printSock.settimeout(0.5)
|
||||
self.checkStatus()
|
||||
self.LOGGER.debug("Connessione Riuscita")
|
||||
except socket.error as e:
|
||||
self.printSock = None
|
||||
self.connected = False
|
||||
self.log("Connessione Fallita: {}".format(e))
|
||||
self.LOGGER.debug("Connessione Fallita: {}".format(e))
|
||||
else:
|
||||
self.keepaliveTimer.cancel()
|
||||
self.printSock.close()
|
||||
self.printSock = None
|
||||
self.connetti()
|
||||
|
|
@ -61,7 +64,7 @@ class MarkoPrinter:
|
|||
while c != b"\r":
|
||||
inData += c
|
||||
if len(inData) > 200:
|
||||
self.log("Status Message Length Error")
|
||||
self.LOGGER.error("Status Message Length Error")
|
||||
raise IOError
|
||||
c = self.printSock.recv(1)
|
||||
inData = str(inData, "ascii")
|
||||
|
|
@ -71,10 +74,10 @@ class MarkoPrinter:
|
|||
self.headStatus[key] = int(inData[index])
|
||||
else:
|
||||
self.headStatus[key] = str(inData[index])
|
||||
self.log("Status: {}".format(self.headStatus))
|
||||
self.LOGGER.info("Status: {}".format(self.headStatus))
|
||||
statusUpdated = True
|
||||
except:
|
||||
self.log("Status retreive error!")
|
||||
self.LOGGER.error("Status retreive error!")
|
||||
return statusUpdated
|
||||
|
||||
def upload(self, descr, datastr):
|
||||
|
|
@ -124,11 +127,12 @@ class MarkoPrinter:
|
|||
self.printSock.settimeout(1.0)
|
||||
self.printSock.send(bytearray(c,'ascii'))
|
||||
self.printSock.settimeout(0.5)
|
||||
self.sending = False
|
||||
return True
|
||||
except socket.error as e:
|
||||
self.LOGGER.error('Socket Error: {}'.format(e))
|
||||
return False
|
||||
self.sending = False
|
||||
self.sending = False
|
||||
pass
|
||||
|
||||
def readResponse(self, c):
|
||||
|
|
@ -137,17 +141,20 @@ class MarkoPrinter:
|
|||
respTerm = cmd.DEFprefix['end'] if cmd.MKPcommands[c]['defPrefix'] else cmd.MKPcommands[c]['end']
|
||||
if self.connected:
|
||||
try:
|
||||
self.printSock.settimeout(1.0)
|
||||
self.printSock.setblocking(True)
|
||||
# lettura bloccante del socket in attesa di conferma
|
||||
self.printSock.settimeout(5)
|
||||
c = self.printSock.recv(1)
|
||||
while c != respTerm:
|
||||
buf += c
|
||||
if str(c, 'ascii') == respTerm:
|
||||
break
|
||||
c = self.printSock.recv(1)
|
||||
# disattivo lettura bloccante
|
||||
self.printSock.settimeout(0.5)
|
||||
self.printSock.setblocking(False)
|
||||
return str(buf, 'ascii')
|
||||
except socket.timeout as t:
|
||||
self.reading = False
|
||||
raise t
|
||||
except socket.error as e:
|
||||
self.LOGGER.error('Socket Error: {}'.format(e))
|
||||
return False
|
||||
|
|
@ -156,12 +163,12 @@ class MarkoPrinter:
|
|||
|
||||
def keepalive(self):
|
||||
statusUpdated = False
|
||||
if not self.sending:
|
||||
self.log("Keepalive")
|
||||
self.LOGGER.debug("Keepalive")
|
||||
if not self.sending and not self.reading:
|
||||
if self.connected:
|
||||
try:
|
||||
self.printSock.send(b"\x1B*\r")
|
||||
self.log(str(self.printSock.recv(5)))
|
||||
self.LOGGER.debug(str(self.printSock.recv(5)))
|
||||
if self.inkStatCounter <= self.settings["inkstat"]:
|
||||
self.inkStatCounter += 1
|
||||
else:
|
||||
|
|
|
|||
Loading…
Reference in New Issue