Skip to content

v0.5.0 — Public API for companion plugins (FCC-Extender integration)

Choose a tag to compare

@empyfi empyfi released this 21 Jun 12:18
· 5 commits to main since this release

v0.5.0 — FCC-Extender Integration

Public Python API at Plugins.Extensions.FBCChannelSpeedChange.api for companion plugins (FCC-Extender etc.) that want to feed a service reference into the pre-tune pool.

Highlights

  • Two entry points, both returning None:
    • PreTuneSingleChannel(service_ref) — arm or refresh the EXTERNAL pool slot
    • ReleaseSingleChannel(service_ref=None) — release the slot (race-safe with optional ref)
  • Accepts either an eServiceReference instance or a canonical DVB broadcast serviceref string ("1:0:<stype>:<sid>:<tsid>:<onid>:<ns>:..."). String input is shape-whitelisted before any SWIG construction.
  • New Role.EXTERNAL pool slot — capacity 1, never competes with the internal NEXT / PREV / HISTORY predictor.
  • TTL safety net (cfg.external_slot_ttl_min, default 5 min) catches the case where the companion plugin's explicit release never lands.
  • evNewProgramInfo listener releases the EXTERNAL slot when the live service changes to the armed ref (covers shortcut-zap paths).
  • Defense-in-depth: input validation, watchdog isolation (external-caller failures do NOT count toward 3-failure self-disable), rate limiter (100 ms same-ref debounce + 10 distinct refs / sec cap), always-on traceback on exception.
  • Forensic diagnostics: caller-frame in debug_log mode, 60-second stats heartbeat.

Settings UI

  • New External pretune (FCC-Extender) group with three toggles:
    • accept_external_pretune (default True — paired companion plugin just works)
    • external_slot_ttl_min (default 5, limits 1..30)
    • prewarm_descrambler_external (default False, Pay-TV opt-in)
  • FCC-Extender presence indicator injected at Setup-screen open time — reads /var/lib/opkg/status, displays installed (v...) / not detected / status unknown.

Notes

  • No new C-binding surface — the EXTERNAL slot reuses the existing recordService → prepare(9-arg) → start() path proven in v0.4.0 onwards.
  • Public API designed for and verified against Oberhesse's FCC-Extender (rc1 field-tested 2026-06-21 on the GigaBlue UHD Quad 4K Pro test bench, 60-66 ms median HIT latency vs ~900 ms cold cross-transponder).
  • On VU+ boxes the OpenATV FCC system plugin remains the native fast-zap path. The FCC-Extender routes to FCC there.

Full public API reference: docs/api.md.