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 sys
|
||||||
import printer as p
|
import printer as p
|
||||||
import logging
|
import logging
|
||||||
|
import socket
|
||||||
import protocol
|
import protocol
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
isRunning = True
|
isRunning = True
|
||||||
|
lastAck = True
|
||||||
while isRunning:
|
while isRunning:
|
||||||
printer = p.MarkoPrinter('./conf.json', LOGGER)
|
printer = p.MarkoPrinter('./conf.json', LOGGER)
|
||||||
connessa = printer.connetti()
|
connessa = printer.connetti()
|
||||||
|
printer.sendCommand(protocol.deleteMemory())
|
||||||
while connessa:
|
while connessa:
|
||||||
|
try:
|
||||||
|
if lastAck == True:
|
||||||
lastTimestamp = int(time.time()*100)
|
lastTimestamp = int(time.time()*100)
|
||||||
commandString = protocol.callPrintImage(imageName='TM2.00I',
|
commandString = protocol.callPrintImage(imageName='TM2.00I',
|
||||||
printMode='10',
|
printMode='10',
|
||||||
fieldContent='{0}\r{0}'.format(lastTimestamp))
|
fieldContent='{0}\r{0}'.format(lastTimestamp))
|
||||||
try:
|
|
||||||
printer.sendCommand(commandString)
|
printer.sendCommand(commandString)
|
||||||
LOGGER.debug('SENT: {}'.format(commandString))
|
LOGGER.debug('SENT: {}'.format(subChars(commandString)))
|
||||||
|
lastAck = False
|
||||||
|
else:
|
||||||
r=printer.readResponse('callPrintImage')
|
r=printer.readResponse('callPrintImage')
|
||||||
LOGGER.debug('RECEIVED: {}'.format(r))
|
LOGGER.debug('RECEIVED: {}'.format(subChars(r)))
|
||||||
protocol.checkResponse('callPrintImage',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:
|
except Exception as e:
|
||||||
LOGGER.error(str(e))
|
LOGGER.error(str(e))
|
||||||
pass
|
pass
|
||||||
pass
|
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__':
|
if __name__ == '__main__':
|
||||||
# Setup Logger
|
# Setup Logger
|
||||||
LOGGER = logging.getLogger(__name__)
|
LOGGER = logging.getLogger(__name__)
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ import socket
|
||||||
import json
|
import json
|
||||||
import time
|
import time
|
||||||
import protocol
|
import protocol
|
||||||
|
import threading
|
||||||
import commands as cmd
|
import commands as cmd
|
||||||
|
|
||||||
class MarkoPrinter:
|
class MarkoPrinter:
|
||||||
|
|
@ -33,11 +34,13 @@ class MarkoPrinter:
|
||||||
self.connected = True
|
self.connected = True
|
||||||
self.printSock.settimeout(0.5)
|
self.printSock.settimeout(0.5)
|
||||||
self.checkStatus()
|
self.checkStatus()
|
||||||
|
self.LOGGER.debug("Connessione Riuscita")
|
||||||
except socket.error as e:
|
except socket.error as e:
|
||||||
self.printSock = None
|
self.printSock = None
|
||||||
self.connected = False
|
self.connected = False
|
||||||
self.log("Connessione Fallita: {}".format(e))
|
self.LOGGER.debug("Connessione Fallita: {}".format(e))
|
||||||
else:
|
else:
|
||||||
|
self.keepaliveTimer.cancel()
|
||||||
self.printSock.close()
|
self.printSock.close()
|
||||||
self.printSock = None
|
self.printSock = None
|
||||||
self.connetti()
|
self.connetti()
|
||||||
|
|
@ -61,7 +64,7 @@ class MarkoPrinter:
|
||||||
while c != b"\r":
|
while c != b"\r":
|
||||||
inData += c
|
inData += c
|
||||||
if len(inData) > 200:
|
if len(inData) > 200:
|
||||||
self.log("Status Message Length Error")
|
self.LOGGER.error("Status Message Length Error")
|
||||||
raise IOError
|
raise IOError
|
||||||
c = self.printSock.recv(1)
|
c = self.printSock.recv(1)
|
||||||
inData = str(inData, "ascii")
|
inData = str(inData, "ascii")
|
||||||
|
|
@ -71,10 +74,10 @@ class MarkoPrinter:
|
||||||
self.headStatus[key] = int(inData[index])
|
self.headStatus[key] = int(inData[index])
|
||||||
else:
|
else:
|
||||||
self.headStatus[key] = str(inData[index])
|
self.headStatus[key] = str(inData[index])
|
||||||
self.log("Status: {}".format(self.headStatus))
|
self.LOGGER.info("Status: {}".format(self.headStatus))
|
||||||
statusUpdated = True
|
statusUpdated = True
|
||||||
except:
|
except:
|
||||||
self.log("Status retreive error!")
|
self.LOGGER.error("Status retreive error!")
|
||||||
return statusUpdated
|
return statusUpdated
|
||||||
|
|
||||||
def upload(self, descr, datastr):
|
def upload(self, descr, datastr):
|
||||||
|
|
@ -124,6 +127,7 @@ class MarkoPrinter:
|
||||||
self.printSock.settimeout(1.0)
|
self.printSock.settimeout(1.0)
|
||||||
self.printSock.send(bytearray(c,'ascii'))
|
self.printSock.send(bytearray(c,'ascii'))
|
||||||
self.printSock.settimeout(0.5)
|
self.printSock.settimeout(0.5)
|
||||||
|
self.sending = False
|
||||||
return True
|
return True
|
||||||
except socket.error as e:
|
except socket.error as e:
|
||||||
self.LOGGER.error('Socket Error: {}'.format(e))
|
self.LOGGER.error('Socket Error: {}'.format(e))
|
||||||
|
|
@ -137,17 +141,20 @@ class MarkoPrinter:
|
||||||
respTerm = cmd.DEFprefix['end'] if cmd.MKPcommands[c]['defPrefix'] else cmd.MKPcommands[c]['end']
|
respTerm = cmd.DEFprefix['end'] if cmd.MKPcommands[c]['defPrefix'] else cmd.MKPcommands[c]['end']
|
||||||
if self.connected:
|
if self.connected:
|
||||||
try:
|
try:
|
||||||
self.printSock.settimeout(1.0)
|
# lettura bloccante del socket in attesa di conferma
|
||||||
self.printSock.setblocking(True)
|
self.printSock.settimeout(5)
|
||||||
c = self.printSock.recv(1)
|
c = self.printSock.recv(1)
|
||||||
while c != respTerm:
|
while c != respTerm:
|
||||||
buf += c
|
buf += c
|
||||||
if str(c, 'ascii') == respTerm:
|
if str(c, 'ascii') == respTerm:
|
||||||
break
|
break
|
||||||
c = self.printSock.recv(1)
|
c = self.printSock.recv(1)
|
||||||
|
# disattivo lettura bloccante
|
||||||
self.printSock.settimeout(0.5)
|
self.printSock.settimeout(0.5)
|
||||||
self.printSock.setblocking(False)
|
|
||||||
return str(buf, 'ascii')
|
return str(buf, 'ascii')
|
||||||
|
except socket.timeout as t:
|
||||||
|
self.reading = False
|
||||||
|
raise t
|
||||||
except socket.error as e:
|
except socket.error as e:
|
||||||
self.LOGGER.error('Socket Error: {}'.format(e))
|
self.LOGGER.error('Socket Error: {}'.format(e))
|
||||||
return False
|
return False
|
||||||
|
|
@ -156,12 +163,12 @@ class MarkoPrinter:
|
||||||
|
|
||||||
def keepalive(self):
|
def keepalive(self):
|
||||||
statusUpdated = False
|
statusUpdated = False
|
||||||
if not self.sending:
|
self.LOGGER.debug("Keepalive")
|
||||||
self.log("Keepalive")
|
if not self.sending and not self.reading:
|
||||||
if self.connected:
|
if self.connected:
|
||||||
try:
|
try:
|
||||||
self.printSock.send(b"\x1B*\r")
|
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"]:
|
if self.inkStatCounter <= self.settings["inkstat"]:
|
||||||
self.inkStatCounter += 1
|
self.inkStatCounter += 1
|
||||||
else:
|
else:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue