Winegard satellite dish control for amateur radio sky tracking
Find a file
Ryan Malloy e7e71c47d7 Wire Stop button to cancel blocked firmware sweeps
Stop handler now calls cancel_operation() on the device bridge,
which sets a threading.Event that interrupts the 2s-timeout serial
read loop in send_with_timeout(). InterruptedError is caught
separately to prevent falling back to software sweep on cancel.

disconnect() uses acquire(timeout=5) with force-close fallback
instead of blocking lock acquisition — prevents deadlock when a
stuck worker holds the serial lock during shutdown.

Add 3 Textual async tests (pytest-asyncio) to verify Stop behavior:
firmware sweep stop, software sweep stop, and sweep restart.
2026-02-14 17:12:11 -07:00
docs Refactor probe tool to generic embedded console scanner, document full G2 command inventory 2026-02-12 21:05:33 -07:00
firmware/ble-bridge Parse GGA/GSA fix quality from NMEA, add PAIR command init sequence 2026-02-11 18:28:59 -07:00
scripts Refactor probe tool to generic embedded console scanner, document full G2 command inventory 2026-02-12 21:05:33 -07:00
src/birdcage Make firmware sweep cancellable to prevent shutdown deadlock 2026-02-14 16:56:14 -07:00
Trav-ler-Rotor-For-HAL-2.05 Initial travler-rotor library scaffolding 2026-02-11 04:10:17 -07:00
tui Wire Stop button to cancel blocked firmware sweeps 2026-02-14 17:12:11 -07:00
.gitignore Ignore site/ directory — now its own repo (warehack.ing/birdcage-docs) 2026-02-13 05:20:34 -07:00
CLAUDE.md Document birdcage.warehack.ing deployment in CLAUDE.md 2026-02-13 15:17:00 -07:00
pyproject.toml Rename project from travler-rotor to birdcage 2026-02-13 05:16:00 -07:00
uv.lock Rename project from travler-rotor to birdcage 2026-02-13 05:16:00 -07:00