- Created docs/TODO.md with 11 prioritized features
- Clarified LC extraction rationale: needed for stream forwarding with ID modification, not for current read-only ops
- Updated all docs to reflect completed terminator detection (60ms via packet header flags)
- Removed outdated TODO comments about sync pattern extraction
- Updated IMPLEMENTATION_SUMMARY.md with completion status
- Updated hang_time.md, protocol.md, lc_extraction.md with current state
- Updated readme.md feature list and documentation links
- Updated hblink.py comments to reference docs/TODO.md
- Add fast terminator detection: when new stream tries to start, check if current stream inactive >200ms
- If inactive >200ms, end old stream immediately and allow new one (provides ~200ms turnaround)
- Add end_reason field to stream_end events ('fast_terminator' or 'timeout')
- Update dashboard to display end_reason in event log
- Mark sync pattern terminator detection as TODO (not yet working, needs investigation)
- Mark LC extraction from sync frames as TODO (may need FEC decoding)
- Update all documentation to reflect new approach
- Remove negative language about 'limitations' - frame as TODO items instead
This provides acceptable fast turnaround (~200ms) without needing to decode ETSI sync
patterns, which don't appear to match in Homebrew protocol packets (may need FEC or
other decoding that requires investigation).
1. Fixed call_type logic inversion:
- Was: call_type_bit == 1 → private (WRONG)
- Now: call_type_bit == 1 → group (CORRECT per Homebrew protocol)
- Bit 6 of _bits field: 0=private, 1=group
2. Added data sync terminator detection:
- Was only detecting voice terminators (0xD5DD7DF75D55)
- Now also detects data terminators (0x7DFFD5F55D5F)
- Fixes issue where frame_type=2 streams showed 'timeout' instead of 'terminator'
3. Improved dashboard event log formatting:
- Added proper display for hang_time_expired events
- Shows 'Hang time expired: Repeater X slot Y'
Testing revealed: Group voice calls were using Data Sync terminators, not
Voice Sync terminators. Both patterns now supported.
Critical fixes:
- Fixed call_type showing 'unknown' by using Homebrew packet metadata (byte 15, bit 6)
instead of waiting for LC extraction
- Fixed hang time never ending by emitting hang_time_expired event when hang time
actually expires in HBlink4
- Dashboard now handles hang_time_expired event and clears slot display
Improvements:
- Removed color_code from dashboard events (RF air interface only, not needed by server)
- Updated protocol.md to clarify color code is for RF only
- Removed unused remove_stream_delayed() method from dashboard
- Logo increased 20% (60px -> 72px)
Design principle documented: Prefer Homebrew protocol metadata over LC extraction
for information available in packet headers (call type, timeslot, IDs, etc.)