diff --git a/IR_DecoderRaw.cpp b/IR_DecoderRaw.cpp index 4a5d488..4b76ae2 100644 --- a/IR_DecoderRaw.cpp +++ b/IR_DecoderRaw.cpp @@ -24,6 +24,7 @@ void IR_DecoderRaw::isr() { } else { if (firstUnHandledFront == &subBuffer[currentSubBufferIndex]) { // Если контроллер не успел обработать новый сигнал, принудительно пропускаем его firstUnHandledFront = firstUnHandledFront->next; + isSubBufferOverflow = true; #ifdef IRDEBUG_INFO // Serial.println(); Serial.println(" ISR BUFFER OVERFLOW "); @@ -80,7 +81,7 @@ void IR_DecoderRaw::tick() { FrontStorage currentFront; noInterrupts(); listenStart(); - if (firstUnHandledFront == nullptr) { interrupts(); return; } //Если данных нет - ничего не делаем + if (firstUnHandledFront == nullptr) { isSubBufferOverflow = false; interrupts(); return; } //Если данных нет - ничего не делаем currentFront = *((FrontStorage*)firstUnHandledFront); //найти следующий необработанный фронт/спад interrupts(); if (currentFront.next == nullptr) { isRecive = false; return; } diff --git a/IR_DecoderRaw.h b/IR_DecoderRaw.h index a88b6bc..124c037 100644 --- a/IR_DecoderRaw.h +++ b/IR_DecoderRaw.h @@ -43,6 +43,7 @@ public: void tick(); // Обработка приёмника, необходима для работы bool isOverflow() { return isBufferOverflow; }; // Буффер переполнился + bool isSubOverflow() { return isSubBufferOverflow; }; // Буффер переполнился bool isReciving() { return isBufferOverflow; }; // Возвращает true, если происходит приём пакета ////////////////////////////////////////////////////////////////////////// @@ -54,6 +55,7 @@ private: volatile uint16_t isPairSending = 0; // Флаг передачи парного передатчика volatile bool isRecive = false; // Флаг приёма volatile bool isPreamb = false; // флаг начальной последовости + volatile bool isSubBufferOverflow = false; bool isBufferOverflow = false; // Флаг переполнения буффера данных bool isWrongPack = false; // Флаг битого пакета