refactor working

This commit is contained in:
DashyFox 2024-02-26 11:38:35 +03:00
parent e35bf7ae23
commit 1dc702f05d
5 changed files with 128 additions and 121 deletions

View File

@ -230,58 +230,56 @@ void status(IR_Decoder& dec) {
// IR_DecoderRaw::AnyData* infoArr [] = { &dec.gotData, &dec.gotBackData }; if (dec.gotData.available()) {
// for (auto&& obj : infoArr) { String str;
// if (obj->available()) { if (/* dec.gotData.getDataPrt()[1] */1) {
// String str; str += ("Data on pin "); str += (dec.isrPin); str += "\n";
// if (obj->getDataPrt()[1]) {
// str += ("Data on pin "); str += (dec.isrPin); str += "\n";
// uint8_t msg = obj->getMsgRAW(); uint8_t msg = dec.gotData.getMsgRAW();
// str += (" MSG: "); str += (" MSG: ");
// for (size_t i = 0; i < 8; i++) { for (size_t i = 0; i < 8; i++) {
// if (i == 3) str += " "; if (i == 3) str += " ";
// str += (msg >> (7 - i)) & 1U; str += (msg >> (7 - i)) & 1U;
// } }
// str += "\n"; str += "\n";
// str += (" DATA SIZE: "); str += (obj->getDataSize()); str += "\n"; str += (" DATA SIZE: "); str += (dec.gotData.getDataSize()); str += "\n";
// str += (" ADDRESS FROM: "); str += (obj->getAddrFrom()); str += "\n"; str += (" ADDRESS FROM: "); str += (dec.gotData.getAddrFrom()); str += "\n";
// str += (" ADDRESS TO: "); str += (obj->getAddrTo()); str += "\n"; str += (" ADDRESS TO: "); str += (dec.gotData.getAddrTo()); str += "\n";
// // str += (" CRC PACK: "); str += (obj->getCrcIN()); str += "\n"; // str += (" CRC PACK: "); str += (dec.gotData.getCrcIN()); str += "\n";
// // str += (" CRC CALC: "); str += (obj->getCrcCALC()); str += "\n"; // str += (" CRC CALC: "); str += (dec.gotData.getCrcCALC()); str += "\n";
// str += "\n"; str += "\n";
// for (size_t i = 0; i < obj->getDataSize(); i++) { for (size_t i = 0; i < min(10, dec.gotData.getDataSize()); i++) {
// switch (i) { switch (i) {
// // case 0: // case 0:
// // str += (" ADDR: "); // str += (" ADDR: ");
// // break; // break;
// // case 1: // case 1:
// // str += (" CMD: "); // str += (" CMD: ");
// // break; // break;
// default: default:
// str += (" Data["); str += (i); str += ("]: "); str += (" Data["); str += (i); str += ("]: ");
// break; break;
// } }
// str += (obj->getDataPrt()[i]); str += "\n"; str += (dec.gotData.getDataPrt()[i]); str += "\n";
// } }
// str += ("\n*******ErrAll: "); str += (obj->getErrorCount()); str += "\n"; str += ("\n*******ErrAll: "); str += (dec.gotData.getErrorCount()); str += "\n";
// str += ("**ErrDistance: "); str += ((int)(obj->getErrorHighSignal() - obj->getErrorLowSignal())); str += "\n"; str += ("**ErrDistance: "); str += ((int)(dec.gotData.getErrorHighSignal() - dec.gotData.getErrorLowSignal())); str += "\n";
// str += "\n"; str += "\n";
// } else { } else {
// str += ("SELF"); str += "\n"; str += ("SELF"); str += "\n";
// str += "\n"; str += "\n";
// } }
// obj->resetAvailable(); // obj->resetAvailable();
// Serial.write(str.c_str()); Serial.write(str.c_str());
// } }
// }
} }

View File

@ -4,11 +4,9 @@
class IR_Decoder : public IR_DecoderRaw { class IR_Decoder : public IR_DecoderRaw {
public: public:
IR_Decoder(const uint8_t isrPin, uint16_t addr, IR_Encoder* encPair = nullptr) : IR_Decoder(const uint8_t isrPin, uint16_t addr, IR_Encoder* encPair = nullptr) : IR_DecoderRaw(isrPin, addr, encPair) {
IR_DecoderRaw(isrPin, addr, encPair),
gotData(Data(&packInfo)) {
} }
Data gotData; Data gotData;
void tick() { void tick() {
@ -16,9 +14,9 @@ public:
if (available()) { if (available()) {
Serial.println("PARSING RAW DATA"); Serial.println("PARSING RAW DATA");
switch (packInfo.buffer[0] & IR_MASK_MSG_TYPE) { switch (packInfo.buffer[0] >> 5 & IR_MASK_MSG_TYPE) {
case IR_MSG_DATA_NOACCEPT: case IR_MSG_DATA_NOACCEPT:
gotData.set(&packInfo);
break; break;
case IR_MSG_DATA_ACCEPT: case IR_MSG_DATA_ACCEPT:
break; break;
@ -34,28 +32,10 @@ public:
default: default:
break; break;
} }
} }
} }
}; };
// class IDataPack : protected IR_FOX { // class IDataPack : protected IR_FOX {
// friend IR_Decoder; // friend IR_Decoder;
// public: // public:

View File

@ -96,6 +96,7 @@ void IR_DecoderRaw::tick() {
// Serial.print(" SUB: "); Serial.println(currentFront.time - prevRise); // Serial.print(" SUB: "); Serial.println(currentFront.time - prevRise);
#endif #endif
isRecive = true; isRecive = true;
isWrongPack = false;
} }
} }
@ -326,6 +327,7 @@ void IR_DecoderRaw::writeToBuffer(bool bit) {
#ifdef IRDEBUG_INFO #ifdef IRDEBUG_INFO
Serial.print("****************"); Serial.print("****************");
#endif #endif
isRecive = false;
}; };
}//**************************************************************************************************// }//**************************************************************************************************//
@ -343,7 +345,7 @@ void IR_DecoderRaw::writeToBuffer(bool bit) {
if (i_dataBuffer == ((msgBytes)*bitPerByte)) { Serial.print(" -> "); Serial.print(dataBuffer[0] & IR_MASK_MSG_INFO); Serial.print(" ->"); } if (i_dataBuffer == ((msgBytes)*bitPerByte)) { Serial.print(" -> "); Serial.print(dataBuffer[0] & IR_MASK_MSG_INFO); Serial.print(" ->"); }
if (i_dataBuffer == ((msgBytes + addrBytes) * bitPerByte)) { Serial.print(" |"); } if (i_dataBuffer == ((msgBytes + addrBytes) * bitPerByte)) { Serial.print(" |"); }
if (i_dataBuffer == ((msgBytes + addrBytes + addrBytes) * bitPerByte)) { Serial.print(" ->"); } if (i_dataBuffer == ((msgBytes + addrBytes + addrBytes) * bitPerByte)) { Serial.print(" ->"); }
if (i_dataBuffer == ((dataBuffer[0] & IR_MASK_MSG_INFO) * bitPerByte)) { Serial.print(" <-"); } if (i_dataBuffer == (((dataBuffer[0] & IR_MASK_MSG_INFO)-2) * bitPerByte)) { Serial.print(" <-"); }
} }
#endif #endif
@ -353,7 +355,7 @@ void IR_DecoderRaw::writeToBuffer(bool bit) {
Serial.print(" ["); Serial.print(packSize); Serial.print("] "); Serial.print(" ["); Serial.print(packSize); Serial.print("] ");
} }
if (packSize && (i_dataBuffer == packSize*bitPerByte)) { // Конец if (packSize && (i_dataBuffer == packSize * bitPerByte)) { // Конец
Serial.print(" END DATA "); Serial.print(" END DATA ");
packInfo.buffer = dataBuffer; packInfo.buffer = dataBuffer;

View File

@ -48,55 +48,55 @@ msg type:
#define IR_MSG_ 5U // | 101..... | = ?? #define IR_MSG_ 5U // | 101..... | = ??
#define IR_MSG_DATA_NOACCEPT 6U // | 110..... | = данные, не требующие подтверждения #define IR_MSG_DATA_NOACCEPT 6U // | 110..... | = данные, не требующие подтверждения
#define IR_MSG_DATA_ACCEPT 7U // | 111..... | = данные требующие подтверждения #define IR_MSG_DATA_ACCEPT 7U // | 111..... | = данные требующие подтверждения
/*   // ---------- /*   // ----------
/```````````````````` подтверждение ```````````````````\      /``````````````````````````````````````` запрос ``````````````````````````````````\ /```````````````````` подтверждение ```````````````````\      /``````````````````````````````````````` запрос ``````````````````````````````````\
                                                                                                                                                                                                                                             
{``````````} [````````````````````````] [``````````````]      {``````````} [````````````````````````] [````````````````````````] [``````````````] {``````````} [````````````````````````] [``````````````]      {``````````} [````````````````````````] [````````````````````````] [``````````````]
{ msg type } [ addr_from uint16_t ] [ CRC Bytes ]      { msg type } [ addr_from uint16_t ] [ addr_to uint16_t ] [ CRC Bytes ] { msg type } [ addr_from uint16_t ] [ CRC Bytes ]      { msg type } [ addr_from uint16_t ] [ addr_to uint16_t ] [ CRC Bytes ]
{..........} [........................] [..............]      {..........} [........................] [........................] [..............] {..........} [........................] [..............]      {..........} [........................] [........................] [..............]
                                                                                                                                                                                                                                                                                                   
{ 001..... } [addr_from_H][addr_from_L] [ crc1 ][ crc2 ]      { 010..... } [addr_from_H][addr_from_L] [addr_from_H][addr_from_L] [ crc1 ][ crc2 ] { 001..... } [addr_from_H][addr_from_L] [ crc1 ][ crc2 ]      { 010..... } [addr_from_H][addr_from_L] [addr_from_H][addr_from_L] [ crc1 ][ crc2 ]
|     0            1           2           3       4          |     0            1           2              3           4           5       6     |     0            1           2           3       4          |     0            1           2              3           4           5       6    
\__________________________________________/       |          \_____________________________________________________________________/       |     \__________________________________________/       |          \_____________________________________________________________________/       |    
|                                                  |          |                                                                             |     |                                                  |          |                                                                             |    
\__________________________________________________/          \_____________________________________________________________________________/     \__________________________________________________/          \_____________________________________________________________________________/    
/`````````````````````` Задний сигнал машинки без адресации ``````````````````````\        В (IR_MASK_MSG_INFO & 15U) содержится количество байт /`````````````````````` Задний сигнал машинки без адресации ``````````````````````\        В (IR_MASK_MSG_INFO & 15U) содержится количество байт
                                                                                           сквозных команд, максимум 15                                                                                            сквозных команд, максимум 15
{``````````} [````````````````````````] [````````````````````````] [``````````````]        Если полезных байт информации нет, отправляется один {``````````} [````````````````````````] [````````````````````````] [``````````````]        Если полезных байт информации нет, отправляется один
{ msg type } [ addr_from uint16_t ] [====== data bytes ======] [ CRC Bytes ]        байт нулей { msg type } [ addr_from uint16_t ] [====== data bytes ======] [ CRC Bytes ]        байт нулей
{..........} [........................] [........................] [..............]         {..........} [........................] [........................] [..............]        
                                                                                                                                                                                       
{ 0000xxxx } [addr_from_H][addr_from_L] [data_H][data_n..][data_L] [ crc1 ][ crc2 ]         { 0000xxxx } [addr_from_H][addr_from_L] [data_H][data_n..][data_L] [ crc1 ][ crc2 ]        
|     0           1            2            3                         |       |             |     0           1            2            3                         |       |            
\_____________________________________________________________________/       |             \_____________________________________________________________________/       |            
|                                                                             |             |                                                                             |            
\_____________________________________________________________________________/             \_____________________________________________________________________________/            
/```````````````````````````````````` Задний сигнал машинки с адресацией ````````````````````````````````````\  /```````````````````````````````````` Задний сигнал машинки с адресацией ````````````````````````````````````\ 
                                                                                                                                                                         
{``````````} [````````````````````````] [````````````````````````] [````````````````````````] [``````````````]  {``````````} [````````````````````````] [````````````````````````] [````````````````````````] [``````````````] 
{ msg type } [ addr_from uint16_t ] [ addr_to uint16_t ] [====== data bytes ======] [ CRC Bytes ]  { msg type } [ addr_from uint16_t ] [ addr_to uint16_t ] [====== data bytes ======] [ CRC Bytes ] 
{..........} [........................] [........................] [........................] [..............]  {..........} [........................] [........................] [........................] [..............] 
                                                                                                                                                                                                                               
{ 0001xxxx } [addr_from_H][addr_from_L] [addr_from_H][addr_from_L] [data_H][data_n..][data_L] [ crc1 ][ crc2 ]  { 0001xxxx } [addr_from_H][addr_from_L] [addr_from_H][addr_from_L] [data_H][data_n..][data_L] [ crc1 ][ crc2 ] 
|     0           1            2              3           4            5                         |       |      |     0           1            2              3           4            5                         |       |     
\________________________________________________________________________________________________/       |      \________________________________________________________________________________________________/       |     
|                                                                                                        |      |                                                                                                        |     
\________________________________________________________________________________________________________/      \________________________________________________________________________________________________________/     
*/ */
#define IR_MASK_MSG_TYPE 0b00000111 #define IR_MASK_MSG_TYPE 0b00000111
#define IR_MASK_MSG_INFO 0b00011111 #define IR_MASK_MSG_INFO 0b00011111
/* /*
/////////////////////////////////////////////////////////////////////////////////////*/ /////////////////////////////////////////////////////////////////////////////////////*/
typedef uint16_t crc_t; typedef uint16_t crc_t;
#define bytePerPack 16 // колличество байтов в пакете #define bytePerPack 16 // колличество байтов в пакете
@ -147,8 +147,8 @@ public:
struct ErrorsStruct { struct ErrorsStruct {
uint8_t lowSignal = 0; uint8_t lowSignal = 0;
uint8_t highSignal= 0; uint8_t highSignal = 0;
uint8_t other= 0; uint8_t other = 0;
void reset() { void reset() {
lowSignal = 0; lowSignal = 0;
@ -162,7 +162,7 @@ public:
struct PackInfo { struct PackInfo {
uint8_t* buffer = nullptr; uint8_t* buffer = nullptr;
uint8_t packSize = 0; uint8_t packSize = 0;
uint16_t crc= 0; uint16_t crc = 0;
ErrorsStruct err; ErrorsStruct err;
uint16_t rTime = 0; uint16_t rTime = 0;
}; };
@ -170,7 +170,7 @@ public:
protected: protected:
ErrorsStruct errors; ErrorsStruct errors;
void checkaddressRuleApply(uint16_t address, uint16_t id, bool &flag) { void checkaddressRuleApply(uint16_t address, uint16_t id, bool& flag) {
flag = false; flag = false;
flag |= id == 0; flag |= id == 0;
flag |= address == id; flag |= address == id;

View File

@ -2,7 +2,7 @@
#include "IR_config.h" #include "IR_config.h"
class IOffsets { class IOffsets {
public: protected:
uint8_t msgOffset; uint8_t msgOffset;
uint8_t addressFromOffset; uint8_t addressFromOffset;
uint8_t addressToOffset; uint8_t addressToOffset;
@ -14,14 +14,34 @@ public:
IR_FOX::PackInfo* packInfo; IR_FOX::PackInfo* packInfo;
}; };
class IBaseEmptyPack : virtual public IOffsets, virtual public IPackInfo {}; class IBaseEmptyPack : virtual public IOffsets, virtual public IPackInfo {
};
class IR_Decoder;
class IEmptyPack : virtual protected IBaseEmptyPack { class IEmptyPack : virtual protected IBaseEmptyPack {
friend IR_Decoder;
bool isAvailable; bool isAvailable;
protected:
virtual void set(IR_FOX::PackInfo *packInfo) {
IBaseEmptyPack::IPackInfo::packInfo = packInfo;
Serial.print(" SET ");
Serial.print("\n*******ErrAll: "); Serial.println(packInfo->err.all());
Serial.print("**ErrDistance: "); Serial.println((int)(packInfo->err.highSignal - packInfo->err.lowSignal));
isAvailable = true;
}
public: public:
IEmptyPack(IR_FOX::PackInfo* _packInfo) { packInfo = _packInfo; } virtual bool available() {
virtual bool available() { if (isAvailable) { isAvailable = false; return true; } else { return false; } }; if (isAvailable) {
isAvailable = false;
return true;
} else {
return false;
}
};
virtual uint8_t getMsgInfo() { return packInfo->buffer[0] & IR_MASK_MSG_INFO; }; virtual uint8_t getMsgInfo() { return packInfo->buffer[0] & IR_MASK_MSG_INFO; };
virtual uint8_t getMsgType() { return (packInfo->buffer[0] >> 5) & IR_MASK_MSG_TYPE; }; virtual uint8_t getMsgType() { return (packInfo->buffer[0] >> 5) & IR_MASK_MSG_TYPE; };
virtual uint8_t getMsgRAW() { return packInfo->buffer[0]; }; virtual uint8_t getMsgRAW() { return packInfo->buffer[0]; };
@ -33,27 +53,34 @@ public:
}; };
class IHasAddresFrom : virtual protected IBaseEmptyPack { class IHasAddresFrom : virtual protected IBaseEmptyPack {
virtual uint16_t getAddrFrom() { return packInfo->buffer[addressFromOffset] | packInfo->buffer[addressFromOffset + 1]; }; public:
virtual uint16_t getAddrFrom() { return (packInfo->buffer[addressFromOffset]<<8) | packInfo->buffer[addressFromOffset + 1]; };
}; };
class IHasAddresTo : virtual protected IBaseEmptyPack { class IHasAddresTo : virtual protected IBaseEmptyPack {
virtual uint16_t getAddrTo() { return packInfo->buffer[addressToOffset] | packInfo->buffer[addressToOffset + 1]; }; public:
virtual uint16_t getAddrTo() { return (packInfo->buffer[addressToOffset]<<8) | packInfo->buffer[addressToOffset + 1]; };
}; };
class IHasAddresData : virtual protected IBaseEmptyPack { class IHasAddresData : virtual protected IBaseEmptyPack {
virtual uint8_t getDataSize() { return /* packInfo->buffer[packInfo->packSize-2] */0; };//TODO: public:
virtual uint8_t getDataSize() { return &(packInfo->buffer[packInfo->packSize - 2]) - &(packInfo->buffer[DataOffset]); }; // TODO:
virtual uint8_t* getDataPrt() { return packInfo->buffer + DataOffset; }; virtual uint8_t* getDataPrt() { return packInfo->buffer + DataOffset; };
virtual uint8_t getDataRawSize() { return packInfo->packSize; }; virtual uint8_t getDataRawSize() { return packInfo->packSize; };
virtual uint8_t* getDataRawPtr() { return packInfo->buffer; }; virtual uint8_t* getDataRawPtr() { return packInfo->buffer; };
}; };
class Data : class Data :
virtual public IEmptyPack, virtual public IEmptyPack,
virtual public IHasAddresFrom { virtual public IHasAddresFrom,
virtual public IHasAddresTo,
virtual public IHasAddresData {
public: public:
Data(IR_FOX::PackInfo* packInfo) : IEmptyPack(packInfo) { Data() {
msgOffset = 0; msgOffset = 0;
addressFromOffset = 1;
addressToOffset = 3;
DataOffset = 5;
} }
}; };