mirror of
https://github.com/Ircama/epson_print_conf.git
synced 2024-10-18 09:10:36 -04:00
Refinements
This commit is contained in:
parent
ba265486d9
commit
319235138c
1 changed files with 116 additions and 30 deletions
|
@ -550,38 +550,74 @@ class EpsonPrinter:
|
||||||
|
|
||||||
def status_parser(self, data):
|
def status_parser(self, data):
|
||||||
"""Parse an ST2 status response and decode as much as possible."""
|
"""Parse an ST2 status response and decode as much as possible."""
|
||||||
colour_ids = {
|
colour_ids = { # Ink cartridge name
|
||||||
0x01: 'Black',
|
0x01: 'Black',
|
||||||
0x03: 'Cyan',
|
0x03: 'Cyan',
|
||||||
0x04: 'Magenta',
|
0x04: 'Magenta',
|
||||||
0x05: 'Yellow',
|
0x05: 'Yellow',
|
||||||
0x06: 'Light Cyan',
|
0x06: 'Light Cyan',
|
||||||
0x07: 'Light Magenta',
|
0x07: 'Light Magenta',
|
||||||
0x0a: 'Light Black',
|
0x0a: 'Light Black',
|
||||||
0x0b: 'Matte Black',
|
0x0b: 'Matte Black',
|
||||||
0x0f: 'Light Light Black',
|
0x0f: 'Light Light Black',
|
||||||
0x10: 'Orange',
|
0x10: 'Orange',
|
||||||
0x11: 'Green',
|
0x11: 'Green',
|
||||||
}
|
}
|
||||||
|
|
||||||
ink_color_ids = {
|
ink_color_ids = { # Ink color
|
||||||
0x00: 'Black',
|
0x00: 'Black',
|
||||||
0x01: 'Cyan',
|
0x01: 'Cyan',
|
||||||
0x02: 'Magenta',
|
0x02: 'Magenta',
|
||||||
0x03: 'Yellow',
|
0x03: 'Yellow',
|
||||||
0x04: 'Light Cyan',
|
0x04: 'Light Cyan',
|
||||||
0x05: 'Light Magenta',
|
0x05: 'Light Magenta',
|
||||||
}
|
}
|
||||||
|
|
||||||
status_ids = {
|
status_ids = {
|
||||||
0: 'Error',
|
0x00: 'Error',
|
||||||
1: 'Self Printing',
|
0x01: 'Self Printing',
|
||||||
2: 'Busy',
|
0x02: 'Busy',
|
||||||
3: 'Waiting',
|
0x03: 'Waiting',
|
||||||
4: 'Idle',
|
0x04: 'Idle',
|
||||||
5: 'Paused',
|
0x05: 'Paused',
|
||||||
7: 'Cleaning',
|
0x07: 'Cleaning',
|
||||||
15: 'Nozzle Check',
|
0x08: 'Factory shipment',
|
||||||
|
0x0a: 'Shutdown',
|
||||||
|
0x0f: 'Nozzle Check',
|
||||||
|
}
|
||||||
|
|
||||||
|
errcode_ids = {
|
||||||
|
0x00: "Fatal error",
|
||||||
|
0x01: "Other I/F is selected",
|
||||||
|
0x02: "Cover Open",
|
||||||
|
0x04: "Paper jam",
|
||||||
|
0x05: "Ink out",
|
||||||
|
0x06: "Paper out",
|
||||||
|
0x0c: "Paper size or paper type or paper path error",
|
||||||
|
0x10: "Ink overflow error",
|
||||||
|
0x11: "Wait return from the tear-off position",
|
||||||
|
0x12: "Double Feed",
|
||||||
|
0x1c: "Cutter error (Fatal Error)",
|
||||||
|
0x1d: "Cutter jam error (recoverable)",
|
||||||
|
0x2a: "Card loading Error",
|
||||||
|
0x47: "Printing disable error",
|
||||||
|
0x4a: "Maintenance Box near End error",
|
||||||
|
}
|
||||||
|
|
||||||
|
warning_ids = {
|
||||||
|
0x10: "Ink low (Black or Yellow)",
|
||||||
|
0x11: "Ink low (Magenta)",
|
||||||
|
0x12: "Ink low (Yellow or Cyan)",
|
||||||
|
0x13: "Ink low (Cyan or Matte Black)",
|
||||||
|
0x14: "Ink low (Photo Black)",
|
||||||
|
0x15: "Ink low (Red)",
|
||||||
|
0x16: "Ink low (Blue)",
|
||||||
|
0x17: "Ink low (Gloss optimizer)",
|
||||||
|
0x44: "Black print mode",
|
||||||
|
0x51: "Cleaning Disabled (Cyan)",
|
||||||
|
0x52: "Cleaning Disabled (Magenta)",
|
||||||
|
0x53: "Cleaning Disabled (Yellow)",
|
||||||
|
0x54: "Cleaning Disabled (Black)",
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(data) < 16:
|
if len(data) < 16:
|
||||||
|
@ -595,7 +631,7 @@ class EpsonPrinter:
|
||||||
data = bytes(2) + data[start:]
|
data = bytes(2) + data[start:]
|
||||||
len_p = int.from_bytes(data[11:13], byteorder='little')
|
len_p = int.from_bytes(data[11:13], byteorder='little')
|
||||||
if len(data) - 13 != len_p:
|
if len(data) - 13 != len_p:
|
||||||
return "message error"
|
return "message error (invalid length)"
|
||||||
buf = data[13:]
|
buf = data[13:]
|
||||||
data_set = {}
|
data_set = {}
|
||||||
while len(buf):
|
while len(buf):
|
||||||
|
@ -628,18 +664,38 @@ class EpsonPrinter:
|
||||||
data_set["status"] = (printer_status, status_text)
|
data_set["status"] = (printer_status, status_text)
|
||||||
|
|
||||||
elif ftype == 0x02: # errcode
|
elif ftype == 0x02: # errcode
|
||||||
data_set["errcode"] = item
|
printer_status = item[0]
|
||||||
|
if printer_status in errcode_ids:
|
||||||
|
data_set["errcode"] = errcode_ids[printer_status]
|
||||||
|
else:
|
||||||
|
data_set["errcode"] = 'unknown: %d' % printer_status
|
||||||
|
|
||||||
elif ftype == 0x03: # Self print code
|
elif ftype == 0x03: # Self print code
|
||||||
data_set["self_print_code"] = item
|
data_set["self_print_code"] = item
|
||||||
|
if item[0] == 0:
|
||||||
|
data_set["self_print_code"] = "Nozzle test printing"
|
||||||
|
|
||||||
elif ftype == 0x04: # warning
|
elif ftype == 0x04: # warning
|
||||||
data_set["warning_code"] = item
|
data_set["warning_code"] = []
|
||||||
|
for i in item:
|
||||||
|
if i in warning_ids:
|
||||||
|
data_set["warning_code"].append(warning_ids[i])
|
||||||
|
else:
|
||||||
|
data_set["warning_code"].append('unknown: %d' % i)
|
||||||
|
|
||||||
elif ftype == 0x06: # Paper path
|
elif ftype == 0x06: # Paper path
|
||||||
data_set["paper_path"] = item
|
data_set["paper_path"] = item
|
||||||
if item == b'\x01\xff':
|
if item == b'\x01\xff':
|
||||||
data_set["paper_path"] = "Cut sheet (Rear)"
|
data_set["paper_path"] = "Cut sheet (Rear)"
|
||||||
|
if item == b'\x03\x01':
|
||||||
|
data_set["paper_path"] = "Roll paper"
|
||||||
|
if item == b'\x03\x02':
|
||||||
|
data_set["paper_path"] = "Photo Album"
|
||||||
|
if item == b'\x02\x01':
|
||||||
|
data_set["paper_path"] = "CD-R, cardboard"
|
||||||
|
|
||||||
|
elif ftype == 0x07: # Paper mismatch error
|
||||||
|
data_set["paper_error"] = item
|
||||||
|
|
||||||
elif ftype == 0x0c: # Cleaning time information
|
elif ftype == 0x0c: # Cleaning time information
|
||||||
data_set["cleaning_time"] = int.from_bytes(
|
data_set["cleaning_time"] = int.from_bytes(
|
||||||
|
@ -692,6 +748,14 @@ class EpsonPrinter:
|
||||||
if item == b'\x81':
|
if item == b'\x81':
|
||||||
data_set["cancel_code"] = "Request"
|
data_set["cancel_code"] = "Request"
|
||||||
|
|
||||||
|
elif ftype == 0x14: # Cutter information
|
||||||
|
try:
|
||||||
|
data_set["cutter"] = item.decode()
|
||||||
|
except Exception:
|
||||||
|
data_set["cutter"] = str(item)
|
||||||
|
if item == b'\x01':
|
||||||
|
data_set["cutter"] = "Set cutter"
|
||||||
|
|
||||||
elif ftype == 0x19: # current job name
|
elif ftype == 0x19: # current job name
|
||||||
data_set["jobname"] = item
|
data_set["jobname"] = item
|
||||||
if item == b'\x00\x00\x00\x00\x00unknown':
|
if item == b'\x00\x00\x00\x00\x00unknown':
|
||||||
|
@ -703,6 +767,17 @@ class EpsonPrinter:
|
||||||
except Exception:
|
except Exception:
|
||||||
data_set["serial"] = str(item)
|
data_set["serial"] = str(item)
|
||||||
|
|
||||||
|
elif ftype == 0x35: # Paper jam error information
|
||||||
|
data_set["paper_jam"] = item
|
||||||
|
if item == b'\x00':
|
||||||
|
data_set["paper_jam"] = "No jams"
|
||||||
|
if item == b'\x01':
|
||||||
|
data_set["paper_jam"] = "Paper jammed at ejecting"
|
||||||
|
if item == b'\x02':
|
||||||
|
data_set["paper_jam"] = "Paper jam in rear ASF or no feed"
|
||||||
|
if item == b'\x80':
|
||||||
|
data_set["paper_jam"] = "No papers at rear ASF"
|
||||||
|
|
||||||
elif ftype == 0x36: # Paper count information
|
elif ftype == 0x36: # Paper count information
|
||||||
if length != 20:
|
if length != 20:
|
||||||
data_set["paper_count"] = "error"
|
data_set["paper_count"] = "error"
|
||||||
|
@ -746,6 +821,17 @@ class EpsonPrinter:
|
||||||
i + 1]
|
i + 1]
|
||||||
j += 1
|
j += 1
|
||||||
|
|
||||||
|
elif ftype == 0x3d: # printer I/F status
|
||||||
|
data_set["interface_status"] = item
|
||||||
|
if item == b'\x00':
|
||||||
|
data_set["interface_status"] = (
|
||||||
|
"Available to accept data and reply"
|
||||||
|
)
|
||||||
|
if item == b'\x01':
|
||||||
|
data_set["interface_status"] = (
|
||||||
|
"Not available to accept data"
|
||||||
|
)
|
||||||
|
|
||||||
elif ftype == 0x40: # Serial No. information
|
elif ftype == 0x40: # Serial No. information
|
||||||
try:
|
try:
|
||||||
data_set["serial_number_info"] = item.decode()
|
data_set["serial_number_info"] = item.decode()
|
||||||
|
|
Loading…
Reference in a new issue