mirror of
https://github.com/Show-maket/IR-protocol.git
synced 2025-05-04 15:20:16 +00:00
more static
This commit is contained in:
parent
9cd391bda7
commit
9d315c8f23
@ -6,7 +6,7 @@
|
|||||||
#define TestOut 13
|
#define TestOut 13
|
||||||
|
|
||||||
IR_Encoder::IR_Encoder(uint16_t addr, uint8_t pin, uint8_t tune = 0, IR_Decoder* decPair) {
|
IR_Encoder::IR_Encoder(uint16_t addr, uint8_t pin, uint8_t tune = 0, IR_Decoder* decPair) {
|
||||||
sendBuffer = new uint8_t[dataByteSizeMax] { 0 };
|
// sendBuffer = new uint8_t[dataByteSizeMax] { 0 };
|
||||||
ir_out = pin;
|
ir_out = pin;
|
||||||
pinMode(ir_out, OUTPUT);
|
pinMode(ir_out, OUTPUT);
|
||||||
addrSelf = addr;
|
addrSelf = addr;
|
||||||
@ -21,7 +21,7 @@ IR_Encoder::IR_Encoder(uint16_t addr, uint8_t pin, uint8_t tune = 0, IR_Decoder*
|
|||||||
IR_Encoder::~IR_Encoder() {
|
IR_Encoder::~IR_Encoder() {
|
||||||
delete [] bitHigh;
|
delete [] bitHigh;
|
||||||
delete [] bitLow;
|
delete [] bitLow;
|
||||||
delete [] sendBuffer;
|
// delete [] sendBuffer;
|
||||||
};
|
};
|
||||||
|
|
||||||
void IR_Encoder::sendData(uint16_t addrTo, uint8_t* data, uint8_t len, bool needAccept = false) {
|
void IR_Encoder::sendData(uint16_t addrTo, uint8_t* data, uint8_t len, bool needAccept = false) {
|
||||||
@ -32,99 +32,87 @@ void IR_Encoder::sendData(uint16_t addrTo, uint8_t* data, uint8_t len, bool nee
|
|||||||
}
|
}
|
||||||
|
|
||||||
void IR_Encoder::sendACK(uint16_t addrTo, uint8_t addInfo, bool forAll = false) {
|
void IR_Encoder::sendACK(uint16_t addrTo, uint8_t addInfo, bool forAll = false) {
|
||||||
uint8_t* ptr = new uint8_t[msgBytes + addrBytes + crcBytes] { 0 };
|
memset(sendBuffer, 0x00, dataByteSizeMax);
|
||||||
|
sendBuffer[0] = IR_MSG_ACCEPT << 5;
|
||||||
ptr[0] = IR_MSG_ACCEPT << 5;
|
sendBuffer[0] |= addInfo & IR_MASK_MSG_INFO;
|
||||||
ptr[0] |= addInfo & IR_MASK_MSG_INFO;
|
|
||||||
|
|
||||||
// addr_self
|
// addr_self
|
||||||
if (!forAll) {
|
if (!forAll) {
|
||||||
ptr[1] = addrSelf >> 8 & 0xFF;
|
sendBuffer[1] = addrSelf >> 8 & 0xFF;
|
||||||
ptr[2] = addrSelf & 0xFF;
|
sendBuffer[2] = addrSelf & 0xFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
// data crc
|
// data crc
|
||||||
ptr[3] = crc8(ptr, 0, 3, poly1) & 0xFF;
|
sendBuffer[3] = crc8(sendBuffer, 0, 3, poly1) & 0xFF;
|
||||||
ptr[4] = crc8(ptr, 0, 4, poly2) & 0xFF;
|
sendBuffer[4] = crc8(sendBuffer, 0, 4, poly2) & 0xFF;
|
||||||
|
|
||||||
rawSend(ptr, msgBytes + addrBytes + crcBytes);
|
rawSend(sendBuffer, msgBytes + addrBytes + crcBytes);
|
||||||
|
|
||||||
// освобождение ресурсов
|
|
||||||
delete ptr;
|
|
||||||
ptr = nullptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void IR_Encoder::sendRequest(uint16_t addrTo, uint8_t addInfo) {
|
void IR_Encoder::sendRequest(uint16_t addrTo, uint8_t addInfo) {
|
||||||
uint8_t* ptr = new uint8_t[msgBytes + addrBytes + crcBytes] { 0 };
|
memset(sendBuffer, 0x00, dataByteSizeMax);
|
||||||
|
sendBuffer[0] = IR_MSG_REQUEST << 5;
|
||||||
ptr[0] = IR_MSG_REQUEST << 5;
|
sendBuffer[0] |= addInfo & IR_MASK_MSG_INFO;
|
||||||
ptr[0] |= addInfo & IR_MASK_MSG_INFO;
|
|
||||||
|
|
||||||
// addr_self
|
// addr_self
|
||||||
ptr[1] = addrSelf >> 8 & 0xFF;
|
sendBuffer[1] = addrSelf >> 8 & 0xFF;
|
||||||
ptr[2] = addrSelf & 0xFF;
|
sendBuffer[2] = addrSelf & 0xFF;
|
||||||
|
|
||||||
//addr_to
|
//addr_to
|
||||||
ptr[3] = addrTo >> 8 & 0xFF;
|
sendBuffer[3] = addrTo >> 8 & 0xFF;
|
||||||
ptr[4] = addrTo & 0xFF;
|
sendBuffer[4] = addrTo & 0xFF;
|
||||||
|
|
||||||
// data crc
|
// data crc
|
||||||
ptr[5] = crc8(ptr, 0, 5, poly1) & 0xFF;
|
sendBuffer[5] = crc8(sendBuffer, 0, 5, poly1) & 0xFF;
|
||||||
ptr[6] = crc8(ptr, 0, 6, poly2) & 0xFF;
|
sendBuffer[6] = crc8(sendBuffer, 0, 6, poly2) & 0xFF;
|
||||||
|
|
||||||
rawSend(ptr, msgBytes + addrBytes + addrBytes + crcBytes);
|
rawSend(sendBuffer, msgBytes + addrBytes + addrBytes + crcBytes);
|
||||||
|
|
||||||
// освобождение ресурсов
|
|
||||||
delete ptr;
|
|
||||||
ptr = nullptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void IR_Encoder::_sendData(uint16_t addrTo, uint8_t* data, uint8_t len, uint8_t msgType) {
|
void IR_Encoder::_sendData(uint16_t addrTo, uint8_t* data, uint8_t len, uint8_t msgType) {
|
||||||
|
memset(sendBuffer, 0x00, dataByteSizeMax);
|
||||||
|
|
||||||
uint8_t packSize = msgBytes + addrBytes + addrBytes + len + crcBytes;
|
uint8_t packSize = msgBytes + addrBytes + addrBytes + len + crcBytes;
|
||||||
uint8_t dataStart = msgBytes + addrBytes + addrBytes;
|
uint8_t dataStart = msgBytes + addrBytes + addrBytes;
|
||||||
|
|
||||||
// создание массива для отправки
|
|
||||||
uint8_t* ptr = new uint8_t[packSize] { 0 };
|
|
||||||
//memset(ptr, 0, sizeof(ptr));
|
|
||||||
|
|
||||||
// формирование массива
|
// формирование массива
|
||||||
// msg_type
|
// msg_type
|
||||||
ptr[0] = msgType;
|
sendBuffer[0] = msgType;
|
||||||
|
|
||||||
// addr_self
|
// addr_self
|
||||||
ptr[1] = addrSelf >> 8 & 0xFF;
|
sendBuffer[1] = addrSelf >> 8 & 0xFF;
|
||||||
ptr[2] = addrSelf & 0xFF;
|
sendBuffer[2] = addrSelf & 0xFF;
|
||||||
|
|
||||||
// addr_to
|
// addr_to
|
||||||
ptr[3] = addrTo >> 8 & 0xFF;
|
sendBuffer[3] = addrTo >> 8 & 0xFF;
|
||||||
ptr[4] = addrTo & 0xFF;
|
sendBuffer[4] = addrTo & 0xFF;
|
||||||
|
|
||||||
for (uint16_t i = dataStart; i < dataStart + len; i++) {
|
for (uint16_t i = dataStart; i < dataStart + len; i++) {
|
||||||
ptr[i] = ((uint8_t*)data)[i - dataStart];
|
sendBuffer[i] = ((uint8_t*)data)[i - dataStart];
|
||||||
}
|
}
|
||||||
|
|
||||||
// data crc
|
// data crc
|
||||||
ptr[packSize - crcBytes] = crc8(ptr, 0, packSize - crcBytes, poly1) & 0xFF;
|
sendBuffer[packSize - crcBytes] = crc8(sendBuffer, 0, packSize - crcBytes, poly1) & 0xFF;
|
||||||
ptr[packSize - crcBytes + 1] = crc8(ptr, 0, packSize - crcBytes + 1, poly2) & 0xFF;
|
sendBuffer[packSize - crcBytes + 1] = crc8(sendBuffer, 0, packSize - crcBytes + 1, poly2) & 0xFF;
|
||||||
|
|
||||||
if (decoder != nullptr) {
|
if (decoder != nullptr) {
|
||||||
decoder->isWaitingAccept = ((msgType >> 5) & IR_MASK_MSG_TYPE == IR_MSG_DATA_ACCEPT);
|
decoder->isWaitingAccept = ((msgType >> 5) & IR_MASK_MSG_TYPE == IR_MSG_DATA_ACCEPT);
|
||||||
decoder->addrWaitingFrom = addrTo;
|
decoder->addrWaitingFrom = addrTo;
|
||||||
}
|
}
|
||||||
// отправка
|
// отправка
|
||||||
rawSend(ptr, packSize);
|
rawSend(sendBuffer, packSize);
|
||||||
|
|
||||||
// освобождение ресурсов
|
|
||||||
delete ptr;
|
|
||||||
ptr = nullptr;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void IR_Encoder::rawSend(uint8_t* ptr, uint8_t len) {
|
void IR_Encoder::rawSend(uint8_t* ptr, uint8_t len) {
|
||||||
|
if(isSending){
|
||||||
|
//TODO: Обработка повторной отправки
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
digitalToggle(9); digitalToggle(9);
|
digitalToggle(9); digitalToggle(9);
|
||||||
memset(sendBuffer, 0x00, dataByteSizeMax);
|
// memset(sendBuffer, 0x00, dataByteSizeMax);
|
||||||
memcpy(sendBuffer, ptr, len);
|
// memcpy(sendBuffer, ptr, len);
|
||||||
sendLen = len;
|
sendLen = len;
|
||||||
// *sendBuffer = 0b10010011;
|
// *sendBuffer = 0b10010011;
|
||||||
isSending = true;
|
isSending = true;
|
||||||
|
@ -52,7 +52,8 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
uint8_t sendLen;
|
uint8_t sendLen;
|
||||||
uint8_t* sendBuffer; /// @brief Буффер данных для отправки
|
uint8_t sendBuffer[dataByteSizeMax] { 0 }; /// @brief Буффер данных для отправки
|
||||||
|
// uint8_t
|
||||||
|
|
||||||
volatile bool isSending = false;
|
volatile bool isSending = false;
|
||||||
// volatile bool genState = HIGH;
|
// volatile bool genState = HIGH;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user