mirror of
https://github.com/Ircama/epson_print_conf.git
synced 2025-05-12 22:26:05 -04:00
Add read_key detection in the GUI
Some checks failed
Python syntax checker / build (3.10) (push) Has been cancelled
Python syntax checker / build (3.7) (push) Has been cancelled
Python syntax checker / build (3.8) (push) Has been cancelled
Python syntax checker / build (3.9) (push) Has been cancelled
Python syntax checker / build (3.x) (push) Has been cancelled
Some checks failed
Python syntax checker / build (3.10) (push) Has been cancelled
Python syntax checker / build (3.7) (push) Has been cancelled
Python syntax checker / build (3.8) (push) Has been cancelled
Python syntax checker / build (3.9) (push) Has been cancelled
Python syntax checker / build (3.x) (push) Has been cancelled
This commit is contained in:
parent
27433686ec
commit
cc0510aae3
2 changed files with 78 additions and 22 deletions
15
README.md
15
README.md
|
@ -35,11 +35,12 @@ A range of features are offered for both end-users and developers, making it eas
|
||||||
|
|
||||||
The GUI can automatically find and display printer IP addresses and model names, allowing users to:
|
The GUI can automatically find and display printer IP addresses and model names, allowing users to:
|
||||||
|
|
||||||
- Check printer status.
|
- Check printer status
|
||||||
- Set the power-off timer.
|
- Set the power-off timer
|
||||||
- Reset the ink waste counter.
|
- Reset the ink waste counter
|
||||||
- Configure the _First TI Received Time_.
|
- Configure the _First TI Received Time_
|
||||||
- read and write the EEPROM
|
- Read and write the EEPROM
|
||||||
|
- Detect the access key (only the *read_key* at the moment)
|
||||||
|
|
||||||
The *First TI Received Time* in Epson printers typically refers to the timestamp of the first transmission instruction to the printer when it was first set up. This feature tracks when the printer first operated.
|
The *First TI Received Time* in Epson printers typically refers to the timestamp of the first transmission instruction to the printer when it was first set up. This feature tracks when the printer first operated.
|
||||||
|
|
||||||
|
@ -664,7 +665,3 @@ emanage x900: https://github.com/abrasive/x900-otsakupuhastajat/
|
||||||
|
|
||||||
- https://codeberg.org/attachments/147f41a3-a6ea-45f6-8c2a-25bac4495a1d
|
- https://codeberg.org/attachments/147f41a3-a6ea-45f6-8c2a-25bac4495a1d
|
||||||
- https://codeberg.org/atufi/reinkpy/src/branch/main/reinkpy/epson.toml
|
- https://codeberg.org/atufi/reinkpy/src/branch/main/reinkpy/epson.toml
|
||||||
|
|
||||||
## Acknowledgments
|
|
||||||
|
|
||||||
Thanks to [sshsphere](https://github.com/sshsphere) for the GUI and other features.
|
|
||||||
|
|
85
ui.py
85
ui.py
|
@ -233,7 +233,7 @@ class EpsonPrinterUI(tk.Tk):
|
||||||
main_frame = ttk.Frame(self, padding=FRAME_PAD)
|
main_frame = ttk.Frame(self, padding=FRAME_PAD)
|
||||||
main_frame.grid(row=0, column=0, sticky=(tk.W, tk.E, tk.N, tk.S))
|
main_frame.grid(row=0, column=0, sticky=(tk.W, tk.E, tk.N, tk.S))
|
||||||
main_frame.columnconfigure(0, weight=1)
|
main_frame.columnconfigure(0, weight=1)
|
||||||
main_frame.rowconfigure(3, weight=1) # Number of rows
|
main_frame.rowconfigure(4, weight=1) # Number of rows
|
||||||
row_n = 0
|
row_n = 0
|
||||||
|
|
||||||
# [row 0] Container frame for the two LabelFrames Power-off timer and TI Received Time
|
# [row 0] Container frame for the two LabelFrames Power-off timer and TI Received Time
|
||||||
|
@ -331,9 +331,9 @@ class EpsonPrinterUI(tk.Tk):
|
||||||
container_frame.columnconfigure(0, weight=1) # Allow column to expand
|
container_frame.columnconfigure(0, weight=1) # Allow column to expand
|
||||||
container_frame.columnconfigure(1, weight=1) # Allow column to expand
|
container_frame.columnconfigure(1, weight=1) # Allow column to expand
|
||||||
|
|
||||||
# BOX Power-off timer (minutes)
|
# BOX Power-off Timer (minutes)
|
||||||
po_timer_frame = ttk.LabelFrame(
|
po_timer_frame = ttk.LabelFrame(
|
||||||
container_frame, text="Power-off timer (minutes)", padding=PAD
|
container_frame, text="Power-off Timer (minutes)", padding=PAD
|
||||||
)
|
)
|
||||||
po_timer_frame.grid(
|
po_timer_frame.grid(
|
||||||
row=0, column=0, pady=PADY, padx=(0, PADX), sticky=(tk.W, tk.E)
|
row=0, column=0, pady=PADY, padx=(0, PADX), sticky=(tk.W, tk.E)
|
||||||
|
@ -443,7 +443,7 @@ class EpsonPrinterUI(tk.Tk):
|
||||||
# Detect Printers
|
# Detect Printers
|
||||||
self.detect_button = ttk.Button(
|
self.detect_button = ttk.Button(
|
||||||
button_frame,
|
button_frame,
|
||||||
text="Detect\nPrinters",
|
text="Detect Printers",
|
||||||
command=self.start_detect_printers,
|
command=self.start_detect_printers,
|
||||||
style="Centered.TButton"
|
style="Centered.TButton"
|
||||||
)
|
)
|
||||||
|
@ -453,7 +453,7 @@ class EpsonPrinterUI(tk.Tk):
|
||||||
|
|
||||||
# Printer Status
|
# Printer Status
|
||||||
self.status_button = ttk.Button(
|
self.status_button = ttk.Button(
|
||||||
button_frame, text="Printer\nStatus",
|
button_frame, text="Printer Status",
|
||||||
command=self.printer_status,
|
command=self.printer_status,
|
||||||
style="Centered.TButton"
|
style="Centered.TButton"
|
||||||
)
|
)
|
||||||
|
@ -464,7 +464,7 @@ class EpsonPrinterUI(tk.Tk):
|
||||||
# Reset Waste Ink Levels
|
# Reset Waste Ink Levels
|
||||||
self.reset_button = ttk.Button(
|
self.reset_button = ttk.Button(
|
||||||
button_frame,
|
button_frame,
|
||||||
text="Reset Waste\nInk Levels",
|
text="Reset Waste Ink Levels",
|
||||||
command=self.reset_waste_ink,
|
command=self.reset_waste_ink,
|
||||||
style="Centered.TButton"
|
style="Centered.TButton"
|
||||||
)
|
)
|
||||||
|
@ -472,31 +472,48 @@ class EpsonPrinterUI(tk.Tk):
|
||||||
row=0, column=2, padx=PADX, pady=PADX, sticky=(tk.W, tk.E)
|
row=0, column=2, padx=PADX, pady=PADX, sticky=(tk.W, tk.E)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# [row 3] EEPROM Buttons
|
||||||
|
row_n += 1
|
||||||
|
tweak_frame = ttk.Frame(main_frame, padding=PAD)
|
||||||
|
tweak_frame.grid(row=row_n, column=0, pady=PADY, sticky=(tk.W, tk.E))
|
||||||
|
tweak_frame.columnconfigure((0, 1, 2), weight=1)
|
||||||
|
|
||||||
# Read EEPROM
|
# Read EEPROM
|
||||||
self.read_eeprom_button = ttk.Button(
|
self.read_eeprom_button = ttk.Button(
|
||||||
button_frame,
|
tweak_frame,
|
||||||
text="Read\nEEPROM",
|
text="Read EEPROM",
|
||||||
command=self.read_eeprom,
|
command=self.read_eeprom,
|
||||||
style="Centered.TButton"
|
style="Centered.TButton"
|
||||||
)
|
)
|
||||||
self.read_eeprom_button.grid(
|
self.read_eeprom_button.grid(
|
||||||
row=0, column=3, padx=PADX, pady=PADX, sticky=(tk.W, tk.E)
|
row=0, column=0, padx=PADX, pady=PADX, sticky=(tk.W, tk.E)
|
||||||
)
|
)
|
||||||
self.read_eeprom_button.state(["disabled"])
|
self.read_eeprom_button.state(["disabled"])
|
||||||
|
|
||||||
# Write EEPROM
|
# Write EEPROM
|
||||||
self.write_eeprom_button = ttk.Button(
|
self.write_eeprom_button = ttk.Button(
|
||||||
button_frame,
|
tweak_frame,
|
||||||
text="Write\nEEPROM",
|
text="Write EEPROM",
|
||||||
command=self.write_eeprom,
|
command=self.write_eeprom,
|
||||||
style="Centered.TButton"
|
style="Centered.TButton"
|
||||||
)
|
)
|
||||||
self.write_eeprom_button.grid(
|
self.write_eeprom_button.grid(
|
||||||
row=0, column=4, padx=PADX, pady=PADX, sticky=(tk.W, tk.E)
|
row=0, column=1, padx=PADX, pady=PADX, sticky=(tk.W, tk.E)
|
||||||
)
|
)
|
||||||
self.write_eeprom_button.state(["disabled"])
|
self.write_eeprom_button.state(["disabled"])
|
||||||
|
|
||||||
# [row 3] Status display (including ScrolledText and Treeview)
|
# Detect Access Key
|
||||||
|
self.detect_access_key_button = ttk.Button(
|
||||||
|
tweak_frame,
|
||||||
|
text="Detect Access Key",
|
||||||
|
command=self.detect_access_key,
|
||||||
|
style="Centered.TButton"
|
||||||
|
)
|
||||||
|
self.detect_access_key_button.grid(
|
||||||
|
row=0, column=2, padx=PADX, pady=PADX, sticky=(tk.W, tk.E)
|
||||||
|
)
|
||||||
|
|
||||||
|
# [row 4] Status display (including ScrolledText and Treeview)
|
||||||
row_n += 1
|
row_n += 1
|
||||||
status_frame = ttk.LabelFrame(main_frame, text="Status", padding=PAD)
|
status_frame = ttk.LabelFrame(main_frame, text="Status", padding=PAD)
|
||||||
status_frame.grid(
|
status_frame.grid(
|
||||||
|
@ -1165,6 +1182,48 @@ class EpsonPrinterUI(tk.Tk):
|
||||||
self.update()
|
self.update()
|
||||||
self.after(100, lambda: get_values(addresses))
|
self.after(100, lambda: get_values(addresses))
|
||||||
|
|
||||||
|
def detect_access_key(self):
|
||||||
|
def run_detection():
|
||||||
|
current_log_level = logging.getLogger().getEffectiveLevel()
|
||||||
|
logging.getLogger().setLevel(logging.ERROR)
|
||||||
|
try:
|
||||||
|
read_key = self.printer.brute_force_read_key()
|
||||||
|
self.status_text.insert(
|
||||||
|
tk.END, f"[INFO] Detected read_key parameter: {read_key}.\n"
|
||||||
|
)
|
||||||
|
except Exception as e:
|
||||||
|
self.handle_printer_error(e)
|
||||||
|
logging.getLogger().setLevel(current_log_level)
|
||||||
|
self.config(cursor="")
|
||||||
|
self.update_idletasks()
|
||||||
|
|
||||||
|
self.show_status_text_view()
|
||||||
|
ip_address = self.ip_var.get()
|
||||||
|
if not self._is_valid_ip(ip_address):
|
||||||
|
self.status_text.insert(tk.END, NO_CONF_ERROR)
|
||||||
|
return
|
||||||
|
response = messagebox.askyesno(
|
||||||
|
"Confirm Action",
|
||||||
|
"Warning: this is a brute force operation which takes several\n"
|
||||||
|
"minutes to complete.\n"
|
||||||
|
"At the moment only the read_key parameter will be detected.\n"
|
||||||
|
"Results will be shown in the text box.\n\n"
|
||||||
|
"Are you sure you want to proceed?"
|
||||||
|
)
|
||||||
|
if response:
|
||||||
|
self.status_text.insert(
|
||||||
|
tk.END, f"[INFO] Starting the operation, please wait...\n"
|
||||||
|
)
|
||||||
|
self.config(cursor="watch")
|
||||||
|
self.update()
|
||||||
|
self.after(100, lambda: run_detection())
|
||||||
|
else:
|
||||||
|
self.status_text.insert(
|
||||||
|
tk.END, f"[WARNING] Detect access key aborted.\n"
|
||||||
|
)
|
||||||
|
self.config(cursor="")
|
||||||
|
self.update_idletasks()
|
||||||
|
|
||||||
def write_eeprom(self):
|
def write_eeprom(self):
|
||||||
def parse_dict_input(input_str):
|
def parse_dict_input(input_str):
|
||||||
try:
|
try:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue