From 9af3e95ec85aac4c97acf14618e1abb9f65abf92 Mon Sep 17 00:00:00 2001 From: DashyFox Date: Tue, 27 Feb 2024 12:29:00 +0300 Subject: [PATCH] add customByte to Accept --- IR-Protocol.ino | 2 +- IR_Encoder.cpp | 17 ++++++++++------- IR_Encoder.h | 2 +- IR_config.h | 18 +++++++++--------- PacketTypes.h | 10 +++------- 5 files changed, 24 insertions(+), 25 deletions(-) diff --git a/IR-Protocol.ino b/IR-Protocol.ino index 943ebf1..f0b7e60 100644 --- a/IR-Protocol.ino +++ b/IR-Protocol.ino @@ -14,7 +14,7 @@ //////////////// Ini ///////////////// -#define INFO "Машинка" +#define INFO "IR_FOX TEST" #define SERIAL_SPEED 115200 //////////////// Var ///////////////// diff --git a/IR_Encoder.cpp b/IR_Encoder.cpp index 204a927..12b40e9 100644 --- a/IR_Encoder.cpp +++ b/IR_Encoder.cpp @@ -72,10 +72,11 @@ void IR_Encoder::sendData(uint16_t addrTo, uint8_t* data, uint8_t len, bool need rawSend(sendBuffer, packSize); } -void IR_Encoder::sendAccept(uint16_t addrTo) { +void IR_Encoder::sendAccept(uint16_t addrTo, uint8_t customByte = 0) { + constexpr uint8_t packsize = msgBytes + addrBytes + 1U + crcBytes; memset(sendBuffer, 0x00, dataByteSizeMax); sendBuffer[0] = IR_MSG_ACCEPT << 5; - sendBuffer[0] |= msgBytes + addrBytes + crcBytes & IR_MASK_MSG_INFO; // размер пакета + sendBuffer[0] |= packsize & IR_MASK_MSG_INFO; // размер пакета // addr_self sendBuffer[1] = id >> 8 & 0xFF; @@ -84,18 +85,20 @@ void IR_Encoder::sendAccept(uint16_t addrTo) { // Serial.print("\nRAW Accept to "); // Serial.println(addrTo); + sendBuffer[3] = customByte; // data crc - sendBuffer[3] = crc8(sendBuffer, 0, 3, poly1) & 0xFF; - sendBuffer[4] = crc8(sendBuffer, 0, 4, poly2) & 0xFF; + sendBuffer[4] = crc8(sendBuffer, 0, 4, poly1) & 0xFF; + sendBuffer[5] = crc8(sendBuffer, 0, 5, poly2) & 0xFF; - rawSend(sendBuffer, msgBytes + addrBytes + crcBytes); + rawSend(sendBuffer, packsize); } void IR_Encoder::sendRequest(uint16_t addrTo) { + constexpr uint8_t packsize = msgBytes + addrBytes + addrBytes + crcBytes; memset(sendBuffer, 0x00, dataByteSizeMax); sendBuffer[0] = IR_MSG_REQUEST << 5; - sendBuffer[0] |= msgBytes + addrBytes + addrBytes + crcBytes & IR_MASK_MSG_INFO; + sendBuffer[0] |= packsize & IR_MASK_MSG_INFO; // addr_self sendBuffer[1] = id >> 8 & 0xFF; @@ -109,7 +112,7 @@ void IR_Encoder::sendRequest(uint16_t addrTo) { sendBuffer[5] = crc8(sendBuffer, 0, 5, poly1) & 0xFF; sendBuffer[6] = crc8(sendBuffer, 0, 6, poly2) & 0xFF; - rawSend(sendBuffer, msgBytes + addrBytes + addrBytes + crcBytes); + rawSend(sendBuffer, packsize); } void IR_Encoder::sendBack(uint8_t* data = nullptr, uint8_t len = 0) { diff --git a/IR_Encoder.h b/IR_Encoder.h index a3eab06..be2c400 100644 --- a/IR_Encoder.h +++ b/IR_Encoder.h @@ -45,7 +45,7 @@ public: void IR_Encoder::setBlindDecoders(IR_DecoderRaw* decoders [], uint8_t count); void rawSend(uint8_t* ptr, uint8_t len); void sendData(uint16_t addrTo, uint8_t* data, uint8_t len, bool needAccept = false); - void sendAccept(uint16_t addrTo); + void sendAccept(uint16_t addrTo, uint8_t customByte = 0); void sendRequest(uint16_t addrTo); void sendBack(uint8_t* data = nullptr, uint8_t len = 0); void sendBackTo(uint16_t addrTo, uint8_t* data = nullptr, uint8_t len = 0); diff --git a/IR_config.h b/IR_config.h index e3adc1d..2a478e6 100644 --- a/IR_config.h +++ b/IR_config.h @@ -52,15 +52,15 @@ msg type: /```````````````````` подтверждение ```````````````````\      /``````````````````````````````````````` запрос ``````````````````````````````````\                                                                                                                        -{``````````} [````````````````````````] [``````````````]      {``````````} [````````````````````````] [````````````````````````] [``````````````] -{ 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 ] -|     0            1           2           3       4          |     0            1           2              3           4           5       6     -\__________________________________________/       |          \_____________________________________________________________________/       |     -|                                                  |          |                                                                             |     -\__________________________________________________/          \_____________________________________________________________________________/     +{``````````} [````````````````````````] [``````````````````] [``````````````]      {``````````} [````````````````````````] [````````````````````````] [``````````````] +{ msg type } [ addr_from uint16_t ] [=== customByte ===] [ CRC Bytes ]      { msg type } [ addr_from uint16_t ] [ addr_to uint16_t ] [ CRC Bytes ] +{..........} [........................] [..................] [..............]      {..........} [........................] [........................] [..............] +                                                                                                                                                             +{ 001..... } [addr_from_H][addr_from_L] [=== customByte ===] [ crc1 ][ crc2 ]      { 010..... } [addr_from_H][addr_from_L] [addr_from_H][addr_from_L] [ crc1 ][ crc2 ] +|     0            1           2                  3              4       5          |     0            1           2              3           4           5       6     +\________________________________________________________________/       |          \_____________________________________________________________________/       |     +|                                                                        |          |                                                                             |     +\________________________________________________________________________/          \_____________________________________________________________________________/     diff --git a/PacketTypes.h b/PacketTypes.h index d5bbce2..28ab8eb 100644 --- a/PacketTypes.h +++ b/PacketTypes.h @@ -50,10 +50,6 @@ namespace PacketTypes { static uint8_t _getDataRawSize(BasePack* obj) { return obj->packInfo->packSize; }; - static uint8_t* _getDataRawPtr(BasePack* obj) { - return obj->packInfo->buffer; - }; - public: bool available() { if (isAvailable) { isAvailable = false; isRawAvailable = false; return true; } else { return false; } }; @@ -66,6 +62,7 @@ namespace PacketTypes { uint8_t getErrorHighSignal() { return packInfo->err.highSignal; }; uint8_t getErrorOther() { return packInfo->err.other; }; uint16_t getTunerTime() { return packInfo->rTime; }; + uint8_t* getDataRawPtr() { return packInfo->buffer; }; }; @@ -84,7 +81,6 @@ namespace PacketTypes { uint8_t getDataSize() { return _getDataSize(this); }; uint8_t* getDataPrt() { return _getDataPrt(this); }; uint8_t getDataRawSize() { return _getDataRawSize(this); }; - uint8_t* getDataRawPtr() { return _getDataRawPtr(this); }; private: bool checkAddress() override { @@ -109,7 +105,6 @@ namespace PacketTypes { uint8_t getDataSize() { return _getDataSize(this); }; uint8_t* getDataPrt() { return _getDataPrt(this); }; uint8_t getDataRawSize() { return _getDataRawSize(this); }; - uint8_t* getDataRawPtr() { return _getDataRawPtr(this); }; private: bool checkAddress() override { bool ret; @@ -129,10 +124,11 @@ namespace PacketTypes { Accept() { msgOffset = 0; addressFromOffset = 1; - DataOffset = 1; + DataOffset = 3; } uint16_t getAddrFrom() { return _getAddrFrom(this); }; + uint8_t getCustomByte() { return packInfo->buffer[DataOffset]; }; private: bool checkAddress() override { return true; } };