mirror of
https://github.com/Show-maket/IR-protocol.git
synced 2025-06-27 20:59:37 +00:00
fix forever loop ?
This commit is contained in:
@ -23,7 +23,7 @@
|
||||
|
||||
|
||||
class IR_Encoder;
|
||||
class IR_DecoderRaw : public IR_FOX {
|
||||
class IR_DecoderRaw : virtual public IR_FOX {
|
||||
friend IR_Encoder;
|
||||
public:
|
||||
const uint8_t isrPin; // Пин прерывания
|
||||
@ -37,17 +37,17 @@ public:
|
||||
|
||||
void isr(); // Функция прерывания
|
||||
void tick(); // Обработка приёмника, необходима для работы
|
||||
bool available() { if(isAvailable) {isAvailable = false; return true;} else { return false;}};
|
||||
bool available() { if (isAvailable) { isAvailable = false; return true; } else { return false; } };
|
||||
bool isOverflow() { return isBufferOverflow; }; // Буффер переполнился
|
||||
bool isReciving() { return isBufferOverflow; }; // Возвращает true, если происходит приём пакета
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
protected:
|
||||
PackInfo packInfo;
|
||||
uint16_t id;
|
||||
private:
|
||||
ErrorsStruct errors;
|
||||
uint16_t id;
|
||||
bool isAvailable = false;
|
||||
bool isAvailable = false;
|
||||
uint16_t packSize;
|
||||
uint16_t crcValue;
|
||||
IR_Encoder* encoder; // Указатель на парный передатчик
|
||||
@ -71,14 +71,15 @@ private:
|
||||
volatile FrontStorage* firstUnHandledFront = nullptr; // Указатель первого необработанного фронта/спада
|
||||
volatile FrontStorage subBuffer[subBufferSize]; // вспомогательный буфер для хранения необработанных фронтов/спадов
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
uint8_t dataBuffer[dataByteSizeMax]{0}; // Буффер данных
|
||||
uint8_t dataBuffer[dataByteSizeMax] { 0 }; // Буффер данных
|
||||
uint32_t prevRise, prevPrevRise, prevFall, prevPrevFall; // Время предыдущих фронтов/спадов
|
||||
uint32_t risePeriod;
|
||||
uint16_t errorCounter = 0; // Счётчик ошибок
|
||||
int8_t preambFrontCounter = 0; // Счётчик __/``` ↑ преамбулы
|
||||
int16_t bufBitPos = 0; // Позиция для записи бита в буффер
|
||||
|
||||
private:
|
||||
void listenEnd(); // @brief Слушатель для работы isReciving()
|
||||
void listenStart(); // @brief Слушатель для работы isReciving()
|
||||
|
||||
/// @brief Проверка CRC. Проверяет len байт со значением crc, пришедшим в пакете
|
||||
/// @param len Длина в байтах проверяемых данных
|
||||
@ -98,7 +99,7 @@ private:
|
||||
void writeToBuffer(bool);
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
void firstRX(); /// @brief Установка и сброс начальных значений и флагов в готовность к приёму данных
|
||||
|
||||
/// @brief Целочисленное деление с округлением вверх
|
||||
|
Reference in New Issue
Block a user