serial number can be a list of values or a list of sublists

This commit is contained in:
Ircama
2024-11-09 12:08:15 +01:00
parent 61b208ea0c
commit 7346b5937b
2 changed files with 87 additions and 37 deletions

View File

@@ -1699,6 +1699,18 @@ class EpsonPrinter:
return None return None
if "serial_number" not in self.parm: if "serial_number" not in self.parm:
return None return None
if isinstance(self.parm["serial_number"], (list, tuple)):
left_val = None
for i in self.parm["serial_number"]:
val = "".join(
chr(int(value or "0x3f", 16)) # "0x3f" --> "?"
for value in self.read_eeprom_many(i, label="serial_number")
)
if left_val is not None and val != left_val:
return False
left_val = val
return left_val
else:
return "".join( return "".join(
chr(int(value or "0x3f", 16)) # "0x3f" --> "?" chr(int(value or "0x3f", 16)) # "0x3f" --> "?"
for value in self.read_eeprom_many( for value in self.read_eeprom_many(
@@ -2076,11 +2088,30 @@ class EpsonPrinter:
or not self.parm[parameter] or not self.parm[parameter]
or not value_list or not value_list
or not len(value_list) or not len(value_list)
or len(self.parm[parameter]) != len(value_list) or (
isinstance(self.parm[parameter], (list, tuple))
and not all(
len(sublist) == len(value_list)
for sublist in self.parm[parameter]
)
)
or (
not isinstance(self.parm[parameter], (list, tuple))
and len(self.parm[parameter]) != len(value_list)
)
): ):
return None return None
if dry_run: if dry_run:
return True return True
if isinstance(self.parm[parameter], (list, tuple)):
for i in self.parm[parameter]:
for oid, value in zip(i, value_list):
if not self.write_eeprom(
oid, value, label="update_" + parameter
):
return False
return True
return False
for oid, value in zip(self.parm[parameter], value_list): for oid, value in zip(self.parm[parameter], value_list):
if not self.write_eeprom(oid, value, label="update_" + parameter): if not self.write_eeprom(oid, value, label="update_" + parameter):
return False return False

41
ui.py
View File

@@ -32,7 +32,7 @@ from parse_devices import generate_config_from_toml, generate_config_from_xml, n
from find_printers import PrinterScanner from find_printers import PrinterScanner
VERSION = "5.0" VERSION = "5.1"
NO_CONF_ERROR = ( NO_CONF_ERROR = (
"[ERROR] Please select a printer model and a valid IP address," "[ERROR] Please select a printer model and a valid IP address,"
@@ -1318,6 +1318,14 @@ Web site: https://github.com/Ircama/epson_print_conf
self.config(cursor="") self.config(cursor="")
self.update_idletasks() self.update_idletasks()
return return
if ser_num is False:
self.status_text.insert(
tk.END,
f"[ERROR]: Improper values in printer serial number.\n",
)
self.config(cursor="")
self.update_idletasks()
return
if not ser_num or "?" in ser_num: if not ser_num or "?" in ser_num:
self.status_text.insert( self.status_text.insert(
tk.END, tk.END,
@@ -1588,11 +1596,14 @@ Web site: https://github.com/Ircama/epson_print_conf
self.config(cursor="") self.config(cursor="")
self.update_idletasks() self.update_idletasks()
return return
pr_ser_num = self.printer.parm["serial_number"]
if isinstance(pr_ser_num, (list, tuple)):
list_ser_num = pr_ser_num
else:
list_ser_num = [pr_ser_num]
for i in list_ser_num:
try: try:
if not self.get_current_eeprom_values( if not self.get_current_eeprom_values(i, "Printer Serial Number"):
self.printer.parm["serial_number"],
"Printer Serial Number"
):
self.config(cursor="") self.config(cursor="")
self.update_idletasks() self.update_idletasks()
return return
@@ -2146,11 +2157,14 @@ Web site: https://github.com/Ircama/epson_print_conf
tk.END, tk.END,
f"[ERROR] Cannot detect the serial number.\n" f"[ERROR] Cannot detect the serial number.\n"
) )
elif len(matches) != 1: left_ser_num = None
for match in matches:
tmp_ser_num = match.group()
if left_ser_num is not None and tmp_ser_num != left_ser_num:
self.status_text.insert( self.status_text.insert(
tk.END, tk.END,
"[ERROR] More than one pattern appears to be" "[ERROR] More than one pattern appears to be"
" a serial number:\n" " a serial number with different values:\n"
) )
for match in matches: for match in matches:
self.status_text.insert( self.status_text.insert(
@@ -2158,11 +2172,16 @@ Web site: https://github.com/Ircama/epson_print_conf
f'[ERROR] - found pattern "{match.group()}"' f'[ERROR] - found pattern "{match.group()}"'
f" at address {match.start()}\n" f" at address {match.start()}\n"
) )
else: left_ser_num = None
serial_number = matches[0].group() break
serial_number_address = matches[0].start() left_ser_num = tmp_ser_num
if left_ser_num:
for match in matches:
serial_number = match.group()
serial_number_address = match.start()
serial_number_range = range( serial_number_range = range(
serial_number_address, serial_number_address + len_ser_num serial_number_address,
serial_number_address + len_ser_num
) )
self.status_text.insert( self.status_text.insert(
tk.END, tk.END,