AR: new sequence check

experimental -> works
removing old code
This commit is contained in:
Frank
2026-01-11 15:19:30 +01:00
parent 3ce3718124
commit 0b71bbab1f

View File

@@ -1759,24 +1759,12 @@ class AudioReactive : public Usermod {
// check sequence
bool sequenceOK = false;
#if 0 // standard check
if(receivedPacket.frameCounter > lastFrameCounter) sequenceOK = true; // sequence OK
if((lastFrameCounter < 12) && (receivedPacket.frameCounter > 248)) sequenceOK = false; // prevent sequence "roll-back" due to late packets (1->254)
if((lastFrameCounter > 248) && (receivedPacket.frameCounter < 12)) sequenceOK = true; // handle roll-over (255 -> 0)
#else // improved rollover-safe sequence check (experimental)
if ((int8_t)(receivedPacket.frameCounter - lastFrameCounter) > 0) sequenceOK = true;
// Simpler 8-bit rollover-safe sequence check:
// (int8_t)(cur - prev) > 0 => cur is ahead of prev by 1..127
// 0 => duplicate,
// < 0 => older
// bool sequenceOK = !audioSyncSequence || receivedPacket.frameCounter == 0 || // always accept legacy "0"
// ((int8_t)(receivedPacket.frameCounter - lastFrameCounter) > 0);
if (lastReceivedFormat < 2) sequenceOK = true; // first V2 packet - accept anything (prevents delay when re-enabling AR)
if (millis()- last_UDPTime >= AUDIOSYNC_IDLE_MS) sequenceOK = true; // receiver timed out - resync needed
#endif
if ((int8_t)(receivedPacket.frameCounter - lastFrameCounter) > 0) sequenceOK = true; // 8-bit rollover-safe sequence check
if (millis()- last_UDPTime >= AUDIOSYNC_IDLE_MS) sequenceOK = true; // receiver timed out - resync needed
if (lastReceivedFormat < 2) sequenceOK = true; // first or second V2 packet - accept anything (prevents delay when re-enabling AR)
if(audioSyncSequence == false) sequenceOK = true; // sequence checking disabled by user
if((sequenceOK == false) && (receivedPacket.frameCounter != 0)) { // always accept "0" - its the legacy value
USER_PRINTF("Skipping audio frame out of order or duplicated - %u vs %u\n", lastFrameCounter, receivedPacket.frameCounter);
if((sequenceOK == false) && (receivedPacket.frameCounter != 0)) { // always accept "0" - its the legacy value
DEBUGSR_PRINTF("Skipping audio frame out of order or duplicated - %u vs %u\n", lastFrameCounter, receivedPacket.frameCounter);
return false; // reject out-of sequence frame
}
else {