The Enc Sync content warning only printed algId/kId, but its trigger
condition also fires on an MI-only change (memcmp against LDULC),
making the log show no apparent difference when only the MI changed.
* fix(p25): guard mid-call LDU1 identity against marginal FEC miscorrection
RS634717::decode241213/decode24169 already computed a corrected-symbol
count and threw it away, so a decode() call taking the RS(24,12,13)
LDU1 LC field to the edge of its correction guarantee (miscorrection
of a still-CRC-valid-looking codeword) was as trusted as a clean
decode. Voice::process() also never re-checked a mid-call LDU1's
srcId/dstId against anything once a call was established.
Thread the RS error count up through LC::decodeLDU1/decodeLDU2
(LC::FECErrs), and in Voice::process() treat a mid-call LDU1 as
suspect if either:
- it required RS correction and disagrees with the call's last
known-good LDU1, or
- its dstId disagrees with the dstId from this call's HDU, which is
far more strongly protected (Golay(18,6,8)+RS(36,20,17)) and
fixed for the life of the call, regardless of the LDU1 decode's
own error count.
On either, keep the established identity for that frame instead of
adopting the new one; audio is untouched. Neither check runs at call
grant/establishment, so this doesn't affect ACL or ad hoc/unregistered
srcIds originating a call -- it only stops an already-established
call's identity from being silently redirected mid-transmission.
* fix(modem): use RS-corrected LC content instead of pre-correction DFSI bytes
In ModemV24's DFSI parsing (both convertToAirV24 and convertToAirTIA,
LDU1 and LDU2), srcId/dstId/lco/mfId and algId/kId/MI were latched
directly from the raw wire bytes as they arrived, before the RS
decode of that same data (m_rs.decode241213/decode24169 on
m_rxCall->LDULC) ran. When the decoder found and corrected symbol
errors, the correction was computed and discarded -- the pre-
correction, still-wrong raw values were what actually got used to
build the outgoing frame. Only a hard decode failure (ret == false)
triggered any recovery.
Thread the RS decoder's corrected-error count out via the errs
out-param added to RS634717::decode241213/decode24169, and on a
successful decode with errs > 0, re-derive the affected fields from
the now-corrected LDULC buffer: LDU1 via the existing LC::decodeLC(),
LDU2 via inline extraction matching LC::decodeLDU2()'s own algId/kId/MI
handling. Logs only when the correction actually changed one of these
fields.
Scoped entirely to ModemV24.cpp (the DFSI/V.24 route); LC.cpp,
RS634717.*, Voice.cpp, and Modem.cpp (the direct RF "air" route) are
unchanged.
* Update FEC Waring Log Message
Include LC content for better indication of what changed.
* Revert Control.cpp and test files to match upstream r05a06_dev exactly per review