From 9305abc784ade91746d44fd6a44b77a460711bd4 Mon Sep 17 00:00:00 2001 From: Steve Pinkham Date: Sat, 26 Sep 2026 04:26:29 -0400 Subject: [PATCH] P25 Phase 2: consult I-ISCH 2 when I-ISCH 1 fails to decode (#2458) SuperFrameFragment.getTimeslotOffset() tests getIISCH1().isValid() twice, so the second I-ISCH is never consulted and a fragment whose first I-ISCH does not decode is descrambled at timeslot offset 0. On a weak signal the first I-ISCH fails on almost half of the fragments, and two of every three of those are then descrambled with the wrong phase. Test I-ISCH 2 as the surrounding code intends (isFinalFragment() already does). Co-authored-by: Claude Fable 5.1 --- .../module/decode/p25/phase2/message/SuperFrameFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/github/dsheirer/module/decode/p25/phase2/message/SuperFrameFragment.java b/src/main/java/io/github/dsheirer/module/decode/p25/phase2/message/SuperFrameFragment.java index 5de679bd..d6c30b16 100644 --- a/src/main/java/io/github/dsheirer/module/decode/p25/phase2/message/SuperFrameFragment.java +++ b/src/main/java/io/github/dsheirer/module/decode/p25/phase2/message/SuperFrameFragment.java @@ -322,7 +322,7 @@ public class SuperFrameFragment implements IMessage return getIISCH1().getIschSequence().getTimeslotOffset(); } - if(getIISCH1().isValid()) + if(getIISCH2().isValid()) { return getIISCH2().getIschSequence().getTimeslotOffset(); }