mirror of
https://github.com/Show-maket/IR-protocol.git
synced 2025-05-04 15:20:16 +00:00
add listen and fix
This commit is contained in:
parent
63e8328755
commit
791d90ee00
@ -35,7 +35,6 @@ void IR_Decoder::writeToBuffer(bool bit) {
|
|||||||
//const auto testval = bufferBitSizeMax;
|
//const auto testval = bufferBitSizeMax;
|
||||||
if ((bufBitPos >= (8 * msgBytes) - syncBits) && !isMsgAvaliable) {
|
if ((bufBitPos >= (8 * msgBytes) - syncBits) && !isMsgAvaliable) {
|
||||||
switch ((rawBuffer[0] >> 5) & IR_MASK_MSG_TYPE) {
|
switch ((rawBuffer[0] >> 5) & IR_MASK_MSG_TYPE) {
|
||||||
|
|
||||||
case IR_MSG_ACCEPT:
|
case IR_MSG_ACCEPT:
|
||||||
if (bufBitPos >= ((msgBytes + addrBytes + crcBytes) * (8 + 3)) - syncBits) {
|
if (bufBitPos >= ((msgBytes + addrBytes + crcBytes) * (8 + 3)) - syncBits) {
|
||||||
const uint8_t dataSize = msgBytes + addrBytes;
|
const uint8_t dataSize = msgBytes + addrBytes;
|
||||||
@ -67,11 +66,9 @@ void IR_Decoder::writeToBuffer(bool bit) {
|
|||||||
const uint8_t dataSize = (rawBuffer[0] & IR_MASK_MSG_INFO);
|
const uint8_t dataSize = (rawBuffer[0] & IR_MASK_MSG_INFO);
|
||||||
isRawAvaliable = true;
|
isRawAvaliable = true;
|
||||||
isMsgAvaliable = crcCheck(dataSize);
|
isMsgAvaliable = crcCheck(dataSize);
|
||||||
if (isMsgAvaliable && checkAddr(3, 4)
|
if (isMsgAvaliable && checkAddr(3, 4)) {
|
||||||
) {
|
|
||||||
gotData._isAvaliable = true;
|
gotData._isAvaliable = true;
|
||||||
gotData._set(dataBuffer, (dataSize)+crcBytes, crcValue, errorCounter, riseSyncTime);
|
gotData._set(dataBuffer, (dataSize)+crcBytes, crcValue, errorCounter, riseSyncTime);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
gotRawData._isAvaliable = true;
|
gotRawData._isAvaliable = true;
|
||||||
gotRawData._set(dataBuffer, (dataSize)+crcBytes, crcValue, errorCounter, riseSyncTime);
|
gotRawData._set(dataBuffer, (dataSize)+crcBytes, crcValue, errorCounter, riseSyncTime);
|
||||||
@ -171,6 +168,10 @@ uint16_t IR_Decoder::ceil_div(uint16_t val, uint16_t divider) {
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void IR_Decoder::listen(){
|
||||||
|
if(isRecive && micros()-prevRise > IR_timeout*2) {isRecive = false;}
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////
|
||||||
//////////////////////////////////// isr ///////////////////////////////////////////
|
//////////////////////////////////// isr ///////////////////////////////////////////
|
||||||
////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////
|
||||||
@ -180,6 +181,7 @@ void IR_Decoder::isr() { // в прерывании вызываем isr()
|
|||||||
if (isPairSending) return;
|
if (isPairSending) return;
|
||||||
|
|
||||||
if (micros() - prevRise > IR_timeout) { // первый
|
if (micros() - prevRise > IR_timeout) { // первый
|
||||||
|
isRecive = true;
|
||||||
isPreamb = true;
|
isPreamb = true;
|
||||||
frontCounter = preambFronts - 1U;
|
frontCounter = preambFronts - 1U;
|
||||||
errorCounter = 0;
|
errorCounter = 0;
|
||||||
|
28
IR_Decoder.h
28
IR_Decoder.h
@ -36,6 +36,8 @@ public:
|
|||||||
|
|
||||||
// @return Буффер переполнился
|
// @return Буффер переполнился
|
||||||
bool isOverflow() { return isBufferOverflow; };
|
bool isOverflow() { return isBufferOverflow; };
|
||||||
|
bool isReciving() { return isRecive; };
|
||||||
|
void listen();
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
@ -43,15 +45,15 @@ public:
|
|||||||
friend IR_Decoder;
|
friend IR_Decoder;
|
||||||
protected:
|
protected:
|
||||||
bool _isAvaliable = false;
|
bool _isAvaliable = false;
|
||||||
uint8_t _msgType;
|
uint8_t _msgType = 0;
|
||||||
uint16_t _addrFrom = 0;
|
uint16_t _addrFrom = 0;
|
||||||
uint16_t _addrTo = 0;
|
uint16_t _addrTo = 0;
|
||||||
uint8_t* _data = nullptr;
|
uint8_t* _data = nullptr;
|
||||||
uint8_t _dataRawSize = 0;
|
uint8_t _dataRawSize = 0;
|
||||||
uint16_t _crcPackVal;
|
uint16_t _crcPackVal = 0;
|
||||||
uint16_t _crcCalcVal;
|
uint16_t _crcCalcVal = 0;
|
||||||
uint16_t _errCount;
|
uint16_t _errCount = 0;
|
||||||
uint16_t _bitPeriod;
|
uint16_t _bitPeriod = 0;
|
||||||
|
|
||||||
void _set(uint8_t* ptr, uint8_t len, uint16_t crc, uint16_t err, uint16_t rTime) {
|
void _set(uint8_t* ptr, uint8_t len, uint16_t crc, uint16_t err, uint16_t rTime) {
|
||||||
_crcCalcVal = crc;
|
_crcCalcVal = crc;
|
||||||
@ -65,6 +67,7 @@ public:
|
|||||||
ini();
|
ini();
|
||||||
_isAvaliable = true;
|
_isAvaliable = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
virtual void ini();
|
virtual void ini();
|
||||||
|
|
||||||
@ -97,6 +100,7 @@ public:
|
|||||||
String printData(uint8_t mode = 10) {
|
String printData(uint8_t mode = 10) {
|
||||||
return printBytes(data(), dataSize(), mode);
|
return printBytes(data(), dataSize(), mode);
|
||||||
}
|
}
|
||||||
|
~Data(){};
|
||||||
private:
|
private:
|
||||||
void ini() override {
|
void ini() override {
|
||||||
_addrFrom = (_data[1] << 8) | _data[2];
|
_addrFrom = (_data[1] << 8) | _data[2];
|
||||||
@ -105,9 +109,9 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class RawData : public Data {
|
// class RawData : public Data {
|
||||||
|
|
||||||
};
|
// };
|
||||||
|
|
||||||
class Accept : public InputData {
|
class Accept : public InputData {
|
||||||
public:
|
public:
|
||||||
@ -135,10 +139,12 @@ public:
|
|||||||
friend IR_Decoder;
|
friend IR_Decoder;
|
||||||
private:
|
private:
|
||||||
bool _isAvaliable = false;
|
bool _isAvaliable = false;
|
||||||
uint16_t _tune;
|
uint16_t _errCount = 0;
|
||||||
|
uint16_t _tune = 0;
|
||||||
public:
|
public:
|
||||||
bool avaliable() { return _isAvaliable; };
|
bool avaliable() { return _isAvaliable; };
|
||||||
uint16_t getTune() { return _tune; };
|
uint16_t getTune() { return _tune; };
|
||||||
|
uint16_t errorCount() { return _errCount; };
|
||||||
void resetAvaliable() { _isAvaliable = false; };
|
void resetAvaliable() { _isAvaliable = false; };
|
||||||
private:
|
private:
|
||||||
void _set(uint16_t val) {
|
void _set(uint16_t val) {
|
||||||
@ -148,7 +154,8 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
Data gotData;
|
Data gotData;
|
||||||
RawData gotRawData;
|
Data gotRawData;
|
||||||
|
// RawData gotRawData;
|
||||||
Accept gotAccept;
|
Accept gotAccept;
|
||||||
Request gotRequest;
|
Request gotRequest;
|
||||||
RawTune gotTune;
|
RawTune gotTune;
|
||||||
@ -159,6 +166,9 @@ private:
|
|||||||
bool isPairSending = false;
|
bool isPairSending = false;
|
||||||
bool IsPairSendLOW = false;
|
bool IsPairSendLOW = false;
|
||||||
|
|
||||||
|
|
||||||
|
volatile bool isRecive = false;
|
||||||
|
|
||||||
bool isWaitingAccept = false;
|
bool isWaitingAccept = false;
|
||||||
uint16_t addrWaitingFrom = 0;
|
uint16_t addrWaitingFrom = 0;
|
||||||
|
|
||||||
|
@ -106,7 +106,7 @@ const auto viewValue = bitTime;
|
|||||||
class IR_FOX {
|
class IR_FOX {
|
||||||
private:
|
private:
|
||||||
bool isSending = false;
|
bool isSending = false;
|
||||||
public:
|
protected:
|
||||||
uint8_t crc8(uint8_t* data, uint8_t start, uint8_t end, uint8_t poly) { //TODO: сделать возможность межбайтовой проверки
|
uint8_t crc8(uint8_t* data, uint8_t start, uint8_t end, uint8_t poly) { //TODO: сделать возможность межбайтовой проверки
|
||||||
uint8_t crc = 0xff;
|
uint8_t crc = 0xff;
|
||||||
size_t i, j;
|
size_t i, j;
|
||||||
@ -121,6 +121,7 @@ public:
|
|||||||
}
|
}
|
||||||
return crc;
|
return crc;
|
||||||
}
|
}
|
||||||
|
public:
|
||||||
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;
|
||||||
@ -151,4 +152,5 @@ public:
|
|||||||
str += " ";
|
str += " ";
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user