Skip to content

Commit

Permalink
serial number can be a list of values or a list of sublists
Browse files Browse the repository at this point in the history
  • Loading branch information
Ircama committed Nov 9, 2024
1 parent 61b208e commit 7346b59
Show file tree
Hide file tree
Showing 2 changed files with 86 additions and 36 deletions.
43 changes: 37 additions & 6 deletions epson_print_conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -1699,11 +1699,23 @@ def get_serial_number(self) -> str:
return None
if "serial_number" not in self.parm:
return None
return "".join(
chr(int(value or "0x3f", 16)) # "0x3f" --> "?"
for value in self.read_eeprom_many(
self.parm["serial_number"], label="serial_number")
)
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(
chr(int(value or "0x3f", 16)) # "0x3f" --> "?"
for value in self.read_eeprom_many(
self.parm["serial_number"], label="serial_number")
)

def get_printer_brand(self) -> str:
"""Return the producer name of the printer ("EPSON")."""
Expand Down Expand Up @@ -2076,11 +2088,30 @@ def update_parameter(
or not self.parm[parameter]
or not 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
if dry_run:
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):
if not self.write_eeprom(oid, value, label="update_" + parameter):
return False
Expand Down
79 changes: 49 additions & 30 deletions ui.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
from find_printers import PrinterScanner


VERSION = "5.0"
VERSION = "5.1"

NO_CONF_ERROR = (
"[ERROR] Please select a printer model and a valid IP address,"
Expand Down Expand Up @@ -1318,6 +1318,14 @@ def get_ser_number(self, cursor=True):
self.config(cursor="")
self.update_idletasks()
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:
self.status_text.insert(
tk.END,
Expand Down Expand Up @@ -1588,19 +1596,22 @@ def set_ser_number(self, cursor=True):
self.config(cursor="")
self.update_idletasks()
return
try:
if not self.get_current_eeprom_values(
self.printer.parm["serial_number"],
"Printer Serial Number"
):
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:
if not self.get_current_eeprom_values(i, "Printer Serial Number"):
self.config(cursor="")
self.update_idletasks()
return
except Exception as e:
self.handle_printer_error(e)
self.config(cursor="")
self.update_idletasks()
return
except Exception as e:
self.handle_printer_error(e)
self.config(cursor="")
self.update_idletasks()
return
self.status_text.insert(
tk.END,
f"[INFO] Set Printer Serial Number: {self.ser_num_var.get()}.\n"
Expand Down Expand Up @@ -2146,29 +2157,37 @@ def run_detection():
tk.END,
f"[ERROR] Cannot detect the serial number.\n"
)
elif len(matches) != 1:
self.status_text.insert(
tk.END,
"[ERROR] More than one pattern appears to be"
" a serial number:\n"
)
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(
tk.END,
"[ERROR] More than one pattern appears to be"
" a serial number with different values:\n"
)
for match in matches:
self.status_text.insert(
tk.END,
f'[ERROR] - found pattern "{match.group()}"'
f" at address {match.start()}\n"
)
left_ser_num = None
break
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_address,
serial_number_address + len_ser_num
)
self.status_text.insert(
tk.END,
f'[ERROR] - found pattern "{match.group()}"'
f" at address {match.start()}\n"
f'[INFO] Detected serial number "{serial_number}"'
f" at address {serial_number_address}.\n"
)
else:
serial_number = matches[0].group()
serial_number_address = matches[0].start()
serial_number_range = range(
serial_number_address, serial_number_address + len_ser_num
)
self.status_text.insert(
tk.END,
f'[INFO] Detected serial number "{serial_number}"'
f" at address {serial_number_address}.\n"
)
last_ser_num_addr = serial_number_address + len_ser_num - 1
last_ser_num_value = int(hex_bytes[last_ser_num_addr], 16)
self.status_text.insert(
Expand Down

0 comments on commit 7346b59

Please sign in to comment.