From 09be20791f5b73040fc3cffcbafb9f9117d2e249 Mon Sep 17 00:00:00 2001 From: Jeremy Shen Date: Wed, 10 Jun 2026 15:40:09 +0800 Subject: [PATCH] feat: forward UART parsed boot info to main log window UartMonitorWindow now accepts on_log callback. When boot info (IP, version) is parsed from serial output, it: - Appears in the UART window's own log (prefix [UART]) - Forwards to main window's log panel via on_log callback - Unified [UART] prefix across both windows (was [BOOT] in UART window, [UART] Boot detected: in main log) --- src/gui/main_window.py | 7 +++++-- src/gui/widgets.py | 10 +++++++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/gui/main_window.py b/src/gui/main_window.py index b6a9fee..1349ad7 100644 --- a/src/gui/main_window.py +++ b/src/gui/main_window.py @@ -1164,7 +1164,7 @@ class MainWindow(ctk.CTk): self._uart_monitor = UartMonitor(port, self._config.serial_baudrate) self._uart_monitor.on_line = lambda line: self._log_message(f" [UART] {line}") self._uart_monitor.on_boot_info = lambda info: ( - self._log_message(f" [UART] Boot detected: IP={info.ip_address}, Ver={info.version}") + self._log_message(f" [UART] IP={info.ip_address}, Ver={info.version}") if info.ip_address or info.version else None ) self._uart_monitor.on_error = lambda e: self._log_message(f" [UART] Error: {e}") @@ -1216,7 +1216,10 @@ class MainWindow(ctk.CTk): """Open the UART Monitor window.""" port = self._port_var.get() baudrate = self._config.serial_baudrate if self._config else 115200 - self._uart_window = UartMonitorWindow(self, port=port, baudrate=baudrate) + self._uart_window = UartMonitorWindow( + self, port=port, baudrate=baudrate, + on_log=self._log_message, + ) def _test_serial_version(self) -> None: """Test serial port by sending 'ver()' command and parsing response.""" diff --git a/src/gui/widgets.py b/src/gui/widgets.py index cb5f2c5..106927e 100644 --- a/src/gui/widgets.py +++ b/src/gui/widgets.py @@ -786,6 +786,7 @@ class UartMonitorWindow(ctk.CTkToplevel): master: ctk.CTk | ctk.CTkToplevel, port: str, baudrate: int = 115200, + on_log: Callable[[str], None] | None = None, ) -> None: """Initialize the UART monitor window. @@ -793,6 +794,7 @@ class UartMonitorWindow(ctk.CTkToplevel): master: Parent window (MainWindow). port: Serial port device path (e.g., '/dev/ttyUSB0'). baudrate: Baud rate for serial communication. + on_log: Optional callback to forward parsed events to main log. """ super().__init__(master) self.title("UART Monitor") @@ -800,6 +802,8 @@ class UartMonitorWindow(ctk.CTkToplevel): self.minsize(480, 360) self.protocol("WM_DELETE_WINDOW", self._on_close) + self._on_log = on_log + self._port = port self._baudrate = baudrate self._monitor: UartMonitor | None = None @@ -996,7 +1000,11 @@ class UartMonitorWindow(ctk.CTkToplevel): if info.version: parts.append(f"Ver={info.version}") if parts: - self.after(0, lambda: self._log(f"[BOOT] {' '.join(parts)}\n")) + msg = f"[UART] {' '.join(parts)}" + self.after(0, lambda: self._log(f"{msg}\n")) + # Forward to main window log + if self._on_log: + self.after(0, lambda: self._on_log(msg)) def _on_error(self, error: str) -> None: self.after(0, lambda: self._log_error(error))