mirror of
https://github.com/Show-maket/IR-protocol.git
synced 2026-09-22 21:09:36 +00:00
Compare commits
4 Commits
5b220dadd8
...
STM32
| Author | SHA1 | Date | |
|---|---|---|---|
| 5759658d42 | |||
| 1b408b0de6 | |||
| baac9fbf46 | |||
| b1d7016147 |
@ -440,6 +440,19 @@ void IR_DecoderRaw::abortFrame(uint32_t tUs)
|
||||
isReciveRaw = false;
|
||||
msgTypeReceive = 0;
|
||||
firstRX();
|
||||
releasePreambleGuard(tUs);
|
||||
}
|
||||
|
||||
// После обрыва кадра «длинная тишина» (IR_timeout × 2 ≈ 30 мс) перед новым кандидатом преамбулы не требуется.
|
||||
// prevRise — последний ДЕКОДИРОВАННЫЙ фронт; после abort он свежий, а фронты, отброшенные гвардом, его не двигают,
|
||||
// поэтому валидный кадр, начавшийся через <30 мс после обрыва мусора, проглатывался целиком без счётчика
|
||||
// (стенд 09.09: КУ теряла пинг машинки после обрывков чужого заднего и всплеска её дальномера за 24 мс до пинга).
|
||||
// Ложных захватов это не добавляет: хвост оборванного кадра (период фронтов 962 мкс, синхробиты ~1100) не проходит
|
||||
// грубый фильтр периода преамбулы (2116…3270 мкс), а настоящая преамбула перезапускает кандидата по паузе > IR_timeout.
|
||||
// После чистого конца кадра гвард остаётся: там он отсекает хвост синхробитов.
|
||||
void IR_DecoderRaw::releasePreambleGuard(uint32_t tUs)
|
||||
{
|
||||
prevRise = tUs - IR_timeout * 2U - 1U; // «тишина уже была»: (front.time - prevRise) > longSilence для следующего фронта
|
||||
}
|
||||
|
||||
void IR_DecoderRaw::expirePreambleCandidate()
|
||||
|
||||
@ -186,6 +186,7 @@ private:
|
||||
RxEndInfo rxEnd;
|
||||
void noteRxEnd(RxEndReason reason, uint32_t tUs); // терминал: фиксирует тип/длину/расчётный конец
|
||||
void abortFrame(uint32_t tUs); // немедленный сброс битого кадра (sync/длина/overflow)
|
||||
void releasePreambleGuard(uint32_t tUs); // после abort: новый кандидат преамбулы без ожидания длинной тишины
|
||||
void expirePreambleCandidate(); // кандидат без фронтов дольше таймаута → Idle
|
||||
uint8_t preambleGoodPeriods = 0;
|
||||
uint16_t preambleMeanPeriod = 0;
|
||||
|
||||
Reference in New Issue
Block a user