Winegard satellite dish control for amateur radio sky tracking
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. |
||
|---|---|---|
| docs | ||
| firmware/ble-bridge | ||
| scripts | ||
| src/birdcage | ||
| Trav-ler-Rotor-For-HAL-2.05 | ||
| tui | ||
| .gitignore | ||
| CLAUDE.md | ||
| pyproject.toml | ||
| uv.lock | ||