mirror of
https://github.com/Show-maket/IR-protocol.git
synced 2026-04-28 03:08:08 +00:00
fix msgTypeReceive and isReceive
This commit is contained in:
@ -1,5 +1,6 @@
|
||||
#include "IR_DecoderRaw.h"
|
||||
#include "IR_Encoder.h"
|
||||
#include <cstring>
|
||||
|
||||
IR_DecoderRaw::IR_DecoderRaw(const uint8_t pin, uint16_t addr, IR_Encoder *encPair) : encoder(encPair)
|
||||
{
|
||||
@ -587,6 +588,15 @@ void IR_DecoderRaw::writeToBuffer(bool bit)
|
||||
#endif
|
||||
}
|
||||
|
||||
// Тип приёма (для isReceive): выставляем сразу после первого байта, ДО проверки «Конец».
|
||||
// Иначе при packSize==1 один и тот же шаг i_dataBuffer==8 одновременно «закрывает» кадр (msgTypeReceive=0)
|
||||
// и снова выставляет msgTypeReceive ниже — флаг залипает, пока не придёт ошибка/другой кадр.
|
||||
if (packSize && (i_dataBuffer == 8))
|
||||
{
|
||||
msgTypeReceive = (dataBuffer[0] >> 5) | 0b11111000;
|
||||
// SerialUSB.println(msgTypeReceive & IR_MASK_MSG_TYPE);
|
||||
}
|
||||
|
||||
if (packSize && (i_dataBuffer == packSize * bitPerByte))
|
||||
{ // Конец
|
||||
#ifdef IRDEBUG_INFO
|
||||
@ -631,12 +641,11 @@ void IR_DecoderRaw::writeToBuffer(bool bit)
|
||||
}
|
||||
OUT_BRUTEFORCE:;
|
||||
#endif
|
||||
}
|
||||
|
||||
if (packSize && (i_dataBuffer == 8)) {
|
||||
msgTypeReceive = (dataBuffer[0]>>5) | 0b11111000;
|
||||
// SerialUSB.println(msgTypeReceive & IR_MASK_MSG_TYPE);
|
||||
|
||||
if (!isAvailable && packSize > 0 && packSize <= dataByteSizeMax) {
|
||||
memcpy(rejectBuffer, dataBuffer, packSize);
|
||||
rejectPackSize = static_cast<uint8_t>(packSize);
|
||||
isRejectAvailable = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -651,9 +660,7 @@ bool IR_DecoderRaw::crcCheck(uint8_t len, crc_t &crc)
|
||||
crc = (crc8(dataBuffer, 0, len, poly1) << 8) & ~((crc_t)0xFF);
|
||||
crc |= crc8(dataBuffer, 0, len + 1, poly2) & (crc_t)0xFF;
|
||||
|
||||
if (
|
||||
crc &&
|
||||
dataBuffer[len] == (crc >> 8) & 0xFF &&
|
||||
if (dataBuffer[len] == (crc >> 8) & 0xFF &&
|
||||
dataBuffer[len + 1] == (crc & 0xFF))
|
||||
{
|
||||
crcOK = true;
|
||||
@ -666,6 +673,14 @@ bool IR_DecoderRaw::crcCheck(uint8_t len, crc_t &crc)
|
||||
return crcOK;
|
||||
}
|
||||
|
||||
bool IR_DecoderRaw::availableReject()
|
||||
{
|
||||
if (!isRejectAvailable)
|
||||
return false;
|
||||
isRejectAvailable = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
uint16_t IR_DecoderRaw::ceil_div(uint16_t val, uint16_t divider)
|
||||
{
|
||||
int ret = val / divider;
|
||||
|
||||
Reference in New Issue
Block a user