Browse Source

Prevent resending messages from rfin in RF Bridge (#561)

rfm69
Xose Pérez 6 years ago
parent
commit
2dc4f28dd9
1 changed files with 18 additions and 8 deletions
  1. +18
    -8
      code/espurna/rfbridge.ino

+ 18
- 8
code/espurna/rfbridge.ino View File

@ -443,37 +443,47 @@ String rfbRetrieve(unsigned char id, bool status) {
} }
void rfbStatus(unsigned char id, bool status) { void rfbStatus(unsigned char id, bool status) {
String value = rfbRetrieve(id, status); String value = rfbRetrieve(id, status);
if (value.length() > 0) { if (value.length() > 0) {
bool same = _rfbSameOnOff(id); bool same = _rfbSameOnOff(id);
#if RF_RAW_SUPPORT #if RF_RAW_SUPPORT
byte message[RF_MAX_MESSAGE_SIZE]; byte message[RF_MAX_MESSAGE_SIZE];
int len = _rfbToArray(value.c_str(), message, 0); int len = _rfbToArray(value.c_str(), message, 0);
if (len == RF_MESSAGE_SIZE && // probably a standard msg if (len == RF_MESSAGE_SIZE && // probably a standard msg
(message[0] != RF_CODE_START || // raw would start with 0xAA (message[0] != RF_CODE_START || // raw would start with 0xAA
message[1] != RF_CODE_RFOUT_BUCKET || // followed by 0xB0, message[1] != RF_CODE_RFOUT_BUCKET || // followed by 0xB0,
message[2] + 4 != len || // needs a valid length, message[2] + 4 != len || // needs a valid length,
message[len-1] != RF_CODE_STOP)) { // and finish with 0x55 message[len-1] != RF_CODE_STOP)) { // and finish with 0x55
unsigned char times = RF_SEND_TIMES;
if (same) times = _rfbin ? 0 : 1;
_rfbSend(message, times);
if (!_rfbin) {
unsigned char times = same ? 1 : RF_SEND_TIMES;
_rfbSend(message, times);
}
} else { } else {
_rfbSendRawOnce(message, len); // send a raw message _rfbSendRawOnce(message, len); // send a raw message
} }
#else // RF_RAW_SUPPORT #else // RF_RAW_SUPPORT
byte message[RF_MESSAGE_SIZE];
_rfbToArray(value.c_str(), message);
unsigned char times = RF_SEND_TIMES;
if (same) times = _rfbin ? 0 : 1;
_rfbSend(message, times);
if (!_rfbin) {
byte message[RF_MESSAGE_SIZE];
_rfbToArray(value.c_str(), message);
unsigned char times = same ? 1 : RF_SEND_TIMES;
_rfbSend(message, times);
}
#endif // RF_RAW_SUPPORT #endif // RF_RAW_SUPPORT
} }
_rfbin = false;
} }
void rfbLearn(unsigned char id, bool status) { void rfbLearn(unsigned char id, bool status) {


Loading…
Cancel
Save