4 Commits

Author SHA1 Message Date
Seth 5d48ad0bfe fix: harden endpoints against malformed input (final-review findings)
- /api/repeaters: bad ?limit= falls back to 25 instead of crashing the handler
- repeaters.load(): tolerate a corrupted repeaters.json (JSONDecodeError -> [])
- tune_repeater/do_POST: catch TypeError so a null field yields {ok:false} not a reset
2026-06-14 16:29:10 -04:00
Seth 69710e362a fix: ground-truth CI-V offset/tone on live ID-5100
- offset amount (0x0D) is REJECTED (NG) by the radio -> removed the offset
  codec + set_offset/get_offset; tune_repeater now sets only duplex direction
  (radio applies its configured auto-offset)
- repeater tone (0x1B/00) uses a 3-byte field (00 + 2-byte BCD); set_tone
  prepends the pad, get_tone strips it
- duplex (0x0F) and tone-switch (0x16/42) verified working
- added get_duplex; verified full tune_repeater on a live repeater (all steps OK)
2026-06-14 16:22:19 -04:00
Seth 08fd5dbb40 feat: radio duplex/offset/tone control + tune_repeater 2026-06-14 16:12:50 -04:00
Seth 03000708b6 chore: baseline existing CI-V suite before RepeaterBook integration 2026-06-14 16:02:36 -04:00