Files
Cort BuffingtonandClaude Opus 4.8 ae6a7b2ca1 translate: coalesce Talker-Alias per-superframe IPSC streams (IPSC->HBP)
Port of the Python fix (ipsc2hbp fix/ta-ghost-streams). Current XPR8400 firmware,
when a radio transmits with Talker Alias enabled, emits a new IPSC stream every
superframe for one OTA call: the call-seq (byte 5) increments per superframe and
the TA superframes carry the alias text in the common-header src/dst (non-GVCU
FLCO at burst-E byte 56). RTP timestamp stays continuous — it is one call. Read
on the wire: 1 PTT -> 30 IPSC streams (half a phantom 'N0MJS' identity) = the
ghost traffic.

Re-anchor the IPSC->HBP path in translator_ipsc_voice_received:
  - Stop treating an IPSC call-seq (byte 5) change as a call boundary; detect a
    new call by RTP-timestamp discontinuity (out_call_continues, OUT_RTP_MAX_FWD).
  - Late entry anchors identity only to a GVCU (FLCO 0x00) burst E; a Talker
    Alias / GPS burst E is skipped (its header src/dst are alias bytes).
  - Forward every frame under the LOCKED identity (out_lc) and one stable HBP
    stream ID, ignoring per-frame header relabels.
  - Relabel the start/end pairing token ipsc_id -> int_seq_id (no longer a stable
    IPSC id; it is just a token to pair the log lines).

VOICE_HEAD stays byte-5 anchored (HEAD/TERM carry no usable RTP; a new byte 5 at
a header = new stream). New ipsc_const.h: GV_RTP_TS_OFF, GV_BE_FLAG,
GV_BE_LC_FLCO_OFF, FLCO_GROUP. Parity goldens regenerated from the fixed Python:
make test passes byte-for-byte (DSP 83/83, parity IPSC->HBP 16/16, HBP->IPSC 2/2).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 15:07:06 -05:00

17 lines
1.7 KiB
Plaintext

444d5244002f9b8100005b002f9b80210000000003f40d981fb418884d003f80046dff57d75df5de310c0b0033700be01b81af03b30000
444d5244012f9b8100005b002f9b80100000000032003310662140217094a4d126b755fd7df75f78673efeb41c266819929f5835fb0000
444d5244022f9b8100005b002f9b80010000000081450c6ef167c9ee0f96cf8dd5d13060f0f0591c5805a996b05edd93175262ce6a0000
444d5244032f9b8100005b002f9b8002000000005665a2b3626dc93aba9e1c2644f170c09000574ab017dcf4bbc54be228689f60670000
444d5244042f9b8100005b002f9b800300000000e703af8b936f52c5e19c943eb91170c12270374431da6b5751f9f886a2934802a70000
444d5244052f9b8100005b002f9b800400000000120f5a22246d12d398989fa16a315173f28390750ca0d6fde2162d84afef756e900000
444d5244062f9b8100005b002f9b800500000000812fb21895839f9ae33637ddfb71100000000e23e433c5dba92c98ca1a448e40940000
444d5244072f9b8100005b002f9b802200000000039b0d4c1f0418f04d703f2004adff57d75df5d964180838341007a01381b603800000
444d5244082f9be5000009002f9b80210000000003d90dfe0e901cf8042075e0846dff57d75df5de31a80e20321001c03101c381d30000
444d5244092f9be5000009002f9b8010000000003002103204005106726fd8c704e755fd7df75f71361370edfc662a74367a9ef8310000
444d52440a2f9be5000009002f9b80010000000009ec46dd7bee4150470f227c9301306060f0691f6fc98947eeadb5f86926abd2690000
444d52440b2f9be5000009002f9b800200000000bdf53de389f3737170025b402261706090006744b5bcd6a1729546873dcd14b08a0000
444d52440c2f9be5000009002f9b800300000000085dc11e5e1d328f0cae4bc91da170c030c0a74ab808e70a096ad32de1f56d0f9e0000
444d52440d2f9be5000009002f9b800400000000dd15ec42c97fe0be93f5d7d1cae15060f0303072cae71c6a93544423ac6872edcc0000
444d52440e2f9be5000009002f9b800500000000429adaef1a50f50ee23ffe6c1ef1100000000e23529b2cdde599d70230160bca590000
444d52440f2f9be5000009002f9b80220000000003b60d2a0e201c800450754084adff57d75df5d964bc0d1835700d803901da81e00000