feat: SD boot mode detection — kill hw_server + popup after 30s if Boot mode is SD
This commit is contained in:
+10
-3
@@ -53,6 +53,7 @@ class ZynqCheckResult:
|
||||
pl_detected: bool
|
||||
hw_server_url: str
|
||||
error: str = ""
|
||||
hw_server_pid: int | None = None
|
||||
|
||||
|
||||
# ── Patterns ──────────────────────────────────────────────────────────
|
||||
@@ -104,12 +105,14 @@ def check_zynq_jtag(
|
||||
|
||||
# ── 2. Start hw_server ─────────────────────────────────────
|
||||
hw_proc: subprocess.Popen | None = None
|
||||
hw_pid: int | None = None
|
||||
try:
|
||||
hw_proc = subprocess.Popen(
|
||||
build_tool_command(hw_server_path),
|
||||
stdout=subprocess.DEVNULL,
|
||||
stderr=subprocess.DEVNULL,
|
||||
)
|
||||
hw_pid = hw_proc.pid
|
||||
# Wait up to 10s for hw_server to bind
|
||||
started = False
|
||||
for _ in range(100):
|
||||
@@ -118,7 +121,7 @@ def check_zynq_jtag(
|
||||
started = True
|
||||
break
|
||||
if not started:
|
||||
return _fail("hw_server did not bind port 3121 within 10s", hw_server_url)
|
||||
return _fail("hw_server did not bind port 3121 within 10s", hw_server_url, pid=hw_pid)
|
||||
except OSError as e:
|
||||
return _fail(f"Failed to start hw_server: {e}", hw_server_url)
|
||||
|
||||
@@ -161,9 +164,10 @@ def check_zynq_jtag(
|
||||
return _fail(
|
||||
f"JTAG scan timed out after {python_timeout}s",
|
||||
hw_server_url,
|
||||
pid=hw_pid,
|
||||
)
|
||||
except OSError as e:
|
||||
return _fail(f"Failed to run Vivado: {e}", hw_server_url)
|
||||
return _fail(f"Failed to run Vivado: {e}", hw_server_url, pid=hw_pid)
|
||||
finally:
|
||||
try:
|
||||
Path(tcl).unlink(missing_ok=True)
|
||||
@@ -201,6 +205,7 @@ def check_zynq_jtag(
|
||||
ps_detected=False, pl_detected=False,
|
||||
hw_server_url=hw_server_url,
|
||||
error=msg,
|
||||
hw_server_pid=hw_pid,
|
||||
)
|
||||
|
||||
ps_detected = any(d.is_arm_dap for d in jtag_chain)
|
||||
@@ -212,16 +217,18 @@ def check_zynq_jtag(
|
||||
ps_detected=ps_detected, pl_detected=pl_detected,
|
||||
hw_server_url=hw_server_url,
|
||||
error="",
|
||||
hw_server_pid=hw_pid,
|
||||
)
|
||||
|
||||
|
||||
# ── Helpers ───────────────────────────────────────────────────────────
|
||||
|
||||
def _fail(error: str, url: str) -> ZynqCheckResult:
|
||||
def _fail(error: str, url: str, pid: int | None = None) -> ZynqCheckResult:
|
||||
return ZynqCheckResult(
|
||||
devices=[], jtag_chain=[], is_present=False,
|
||||
ps_detected=False, pl_detected=False,
|
||||
hw_server_url=url, error=error,
|
||||
hw_server_pid=pid,
|
||||
)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user