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)
This commit is contained in:
Jeremy Shen
2026-06-10 15:40:09 +08:00
parent b294dfe58a
commit 09be20791f
2 changed files with 14 additions and 3 deletions
+9 -1
View File
@@ -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))