This commit is contained in:
DashyFox 2024-01-26 11:23:48 +03:00
parent 469d9875c8
commit 02410cc78c
3 changed files with 16 additions and 15 deletions

View File

@ -374,7 +374,7 @@ void IR_Decoder::writeToBuffer(bool bit) {
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
} }
bool IR_Decoder::crcCheck(uint8_t len, uint16_t &crc) { bool IR_Decoder::crcCheck(uint8_t len, crc_t &crc) {
bool crcOK = false; bool crcOK = false;
crc = 0; crc = 0;

View File

@ -23,6 +23,7 @@
#define subBufferSize 7 //Буфер для складирования фронтов, пока их не обработают #define subBufferSize 7 //Буфер для складирования фронтов, пока их не обработают
class IR_Encoder; class IR_Encoder;
class IR_Decoder : private IR_FOX { class IR_Decoder : private IR_FOX {
friend IR_Encoder; friend IR_Encoder;
@ -200,7 +201,7 @@ private:
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
void noFunc(); void noFunc();
volatile uint8_t currentSubBufferIndex; // Счетчик текущей позиции во вспомогательном буфере фронтов/спадов volatile uint8_t currentSubBufferIndex; // Счетчик текущей позиции во вспомогательном буфере фронтов/спадов
struct FrontStorage { // Структура для хранения времени и направления фронта/спада struct FrontStorage { // Структура для хранения времени и направления фронта/спада
volatile uint32_t time; // Время volatile uint32_t time; // Время
volatile bool dir; // Направление (true = ↑; false = ↓) volatile bool dir; // Направление (true = ↑; false = ↓)
@ -220,7 +221,7 @@ private:
volatile FrontStorage subBuffer[subBufferSize]; // вспомогательный буфер для хранения необработанных фронтов/спадов volatile FrontStorage subBuffer[subBufferSize]; // вспомогательный буфер для хранения необработанных фронтов/спадов
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
uint8_t* dataBuffer = nullptr; // Указатель на буффер данных uint8_t* dataBuffer = nullptr; // Указатель на буффер данных
uint32_t prevRise,prevPrevRise, prevFall, prevPrevFall; // Время предыдущих фронтов/спадов uint32_t prevRise, prevPrevRise, prevFall, prevPrevFall; // Время предыдущих фронтов/спадов
uint16_t errorCounter = 0; // Счётчик ошибок uint16_t errorCounter = 0; // Счётчик ошибок
int8_t preambFrontCounter = 0; // Счётчик __/``` ↑ преамбулы int8_t preambFrontCounter = 0; // Счётчик __/``` ↑ преамбулы
int16_t bufBitPos = 0; // Позиция для записи бита в буффер int16_t bufBitPos = 0; // Позиция для записи бита в буффер
@ -230,14 +231,14 @@ private:
/// @param len Длина в байтах проверяемых данных /// @param len Длина в байтах проверяемых данных
/// @param crc Результат рассчёта crc (Выходной параметр) /// @param crc Результат рассчёта crc (Выходной параметр)
/// @return true если crc верно /// @return true если crc верно
bool crcCheck(uint8_t len, uint16_t &crc); bool crcCheck(uint8_t len, uint16_t& crc);
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
bool isData = true; // Флаг относится ли бит к данным, или битам синхронизации bool isData = true; // Флаг относится ли бит к данным, или битам синхронизации
uint16_t i_dataBuffer; // Счётчик буфера данных uint16_t i_dataBuffer; // Счётчик буфера данных
uint8_t nextControlBit = bitPerByte; // Метка для смены флага isData uint8_t nextControlBit = bitPerByte; // Метка для смены флага isData
uint8_t i_syncBit; // Счётчик битов синхронизации uint8_t i_syncBit; // Счётчик битов синхронизации
uint8_t err_syncBit; // Счётчик ошибок синхронизации uint8_t err_syncBit; // Счётчик ошибок синхронизации
/// @brief Запиь бита в буффер, а так же проверка битов синхранизации и их фильтрация /// @brief Запиь бита в буффер, а так же проверка битов синхранизации и их фильтрация
/// @param Бит данных /// @param Бит данных
void writeToBuffer(bool); void writeToBuffer(bool);

View File

@ -11,7 +11,7 @@
IR_MSG_ACCEPT с адреса 0 воспринимается всеми устройствами IR_MSG_ACCEPT с адреса 0 воспринимается всеми устройствами
Адресное пространство: Адресное пространство:
Излучатели контрольных точек: 1000 ~ 1999 Излучатели контрольных точек: 1000 ~ 1999
Излучатели без обратной связиЖ 2000 ~ 2999 Излучатели без обратной связиЖ 2000 ~ 2999
@ -70,6 +70,7 @@ msg type:
/* /*
/////////////////////////////////////////////////////////////////////////////////////*/ /////////////////////////////////////////////////////////////////////////////////////*/
typedef uint16_t crc_t;
#define bytePerPack 3 // колличество байтов в пакете #define bytePerPack 3 // колличество байтов в пакете
#ifndef freeFrec #ifndef freeFrec
@ -89,13 +90,12 @@ msg type:
#define addrBytes 2 #define addrBytes 2
#define msgBytes 1 #define msgBytes 1
#define crcBytes 2 #define crcBytes 2
typedef uint16_t crc_t;
#define poly1 0x31 #define poly1 0x31
#define poly2 0x8C #define poly2 0x8C
#define syncBits 3U // количество битов синхронизации #define syncBits 3U // количество битов синхронизации
#define dataByteSizeMax (msgBytes + addrBytes + addrBytes + bytePerPack + crcBytes) #define dataByteSizeMax (msgBytes + addrBytes + addrBytes + bytePerPack + crcBytes)
// размер msg в битах // размер короткой посылки в битах // размер msg в битах // размер короткой посылки в битах
#define dataBitSize ((8 + syncBits) * dataByteSizeMax) // размер посылки с данными в битах #define dataBitSize ((8 + syncBits) * dataByteSizeMax) // размер посылки с данными в битах
#define bufferBitSizeMax (dataBitSize) // Размер буффера в битах #define bufferBitSizeMax (dataBitSize) // Размер буффера в битах
@ -111,9 +111,9 @@ typedef uint16_t crc_t;
#define bitTakts (bitActiveTakts+bitPauseTakts*2U) // Общая длительность бита в тактах #define bitTakts (bitActiveTakts+bitPauseTakts*2U) // Общая длительность бита в тактах
#define bitTime (bitTakts*carrierPeriod) // Общая длительность бита #define bitTime (bitTakts*carrierPeriod) // Общая длительность бита
const auto viewValue = bitTime;
#define tolerance 300U #define tolerance 300U
class IR_FOX { class IR_FOX {
private: private:
bool isSending = false; bool isSending = false;
@ -132,12 +132,12 @@ protected:
} }
return crc; return crc;
} }
// public: // public:
/// @brief Вывод массива байт в строковом формате /// @brief Вывод массива байт в строковом формате
/// @param d Указатель на массив /// @param d Указатель на массив
/// @param s Размер массива /// @param s Размер массива
/// @param mode Формат вывода DEC, BIN /// @param mode Формат вывода DEC, BIN
/// @return Готовая для вывода строка /// @return Готовая для вывода строка
String printBytes(uint8_t* d, uint8_t s, uint8_t mode = 10) { String printBytes(uint8_t* d, uint8_t s, uint8_t mode = 10) {
String str = ""; String str = "";
uint8_t control = bitPerByte; uint8_t control = bitPerByte;