mirror of
https://github.com/Theaninova/Arduino-IRremote.git
synced 2025-12-23 23:06:14 +00:00
Reduce one-line-if's down to one line
This commit is contained in:
508
IRremote.cpp
508
IRremote.cpp
@@ -166,12 +166,8 @@ void IRsend::sendRaw (unsigned int buf[], int len, int hz)
|
|||||||
{
|
{
|
||||||
enableIROut(hz);
|
enableIROut(hz);
|
||||||
for (int i = 0; i < len; i++) {
|
for (int i = 0; i < len; i++) {
|
||||||
if (i & 1) {
|
if (i & 1) space(buf[i]) ;
|
||||||
space(buf[i]);
|
else mark (buf[i]) ;
|
||||||
}
|
|
||||||
else {
|
|
||||||
mark(buf[i]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
space(0); // Just to be sure
|
space(0); // Just to be sure
|
||||||
}
|
}
|
||||||
@@ -216,13 +212,8 @@ void IRsend::sendRC6 (unsigned long data, int nbits)
|
|||||||
space(RC6_T1);
|
space(RC6_T1);
|
||||||
int t;
|
int t;
|
||||||
for (int i = 0; i < nbits; i++) {
|
for (int i = 0; i < nbits; i++) {
|
||||||
if (i == 3) {
|
if (i == 3) t = RC6_T1 * 2 ; // double-wide trailer bit
|
||||||
// double-wide trailer bit
|
else t = RC6_T1 ;
|
||||||
t = 2 * RC6_T1;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
t = RC6_T1;
|
|
||||||
}
|
|
||||||
if (data & TOPBIT) {
|
if (data & TOPBIT) {
|
||||||
mark(t);
|
mark(t);
|
||||||
space(t);
|
space(t);
|
||||||
@@ -249,20 +240,14 @@ void IRsend::sendPanasonic (unsigned int address, unsigned long data)
|
|||||||
for(int i=0;i<16;i++)
|
for(int i=0;i<16;i++)
|
||||||
{
|
{
|
||||||
mark(PANASONIC_BIT_MARK);
|
mark(PANASONIC_BIT_MARK);
|
||||||
if (address & 0x8000) {
|
if (address & 0x8000) space(PANASONIC_ONE_SPACE) ;
|
||||||
space(PANASONIC_ONE_SPACE);
|
else space(PANASONIC_ZERO_SPACE) ;
|
||||||
} else {
|
|
||||||
space(PANASONIC_ZERO_SPACE);
|
|
||||||
}
|
|
||||||
address <<= 1;
|
address <<= 1;
|
||||||
}
|
}
|
||||||
for (int i=0; i < 32; i++) {
|
for (int i=0; i < 32; i++) {
|
||||||
mark(PANASONIC_BIT_MARK);
|
mark(PANASONIC_BIT_MARK);
|
||||||
if (data & TOPBIT) {
|
if (data & TOPBIT) space(PANASONIC_ONE_SPACE) ;
|
||||||
space(PANASONIC_ONE_SPACE);
|
else space(PANASONIC_ZERO_SPACE) ;
|
||||||
} else {
|
|
||||||
space(PANASONIC_ZERO_SPACE);
|
|
||||||
}
|
|
||||||
data <<= 1;
|
data <<= 1;
|
||||||
}
|
}
|
||||||
mark(PANASONIC_BIT_MARK);
|
mark(PANASONIC_BIT_MARK);
|
||||||
@@ -408,8 +393,7 @@ void IRrecv::enableIRIn ( )
|
|||||||
void IRrecv::blink13 (int blinkflag)
|
void IRrecv::blink13 (int blinkflag)
|
||||||
{
|
{
|
||||||
irparams.blinkflag = blinkflag;
|
irparams.blinkflag = blinkflag;
|
||||||
if (blinkflag)
|
if (blinkflag) pinMode(BLINKLED, OUTPUT) ;
|
||||||
pinMode(BLINKLED, OUTPUT);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//+=============================================================================
|
//+=============================================================================
|
||||||
@@ -428,10 +412,7 @@ ISR (TIMER_INTR_NAME)
|
|||||||
uint8_t irdata = (uint8_t)digitalRead(irparams.recvpin);
|
uint8_t irdata = (uint8_t)digitalRead(irparams.recvpin);
|
||||||
|
|
||||||
irparams.timer++; // One more 50us tick
|
irparams.timer++; // One more 50us tick
|
||||||
if (irparams.rawlen >= RAWBUF) {
|
if (irparams.rawlen >= RAWBUF) irparams.rcvstate = STATE_STOP ; // Buffer overflow
|
||||||
// Buffer overflow
|
|
||||||
irparams.rcvstate = STATE_STOP;
|
|
||||||
}
|
|
||||||
switch(irparams.rcvstate) {
|
switch(irparams.rcvstate) {
|
||||||
case STATE_IDLE: // In the middle of a gap
|
case STATE_IDLE: // In the middle of a gap
|
||||||
if (irdata == MARK) {
|
if (irdata == MARK) {
|
||||||
@@ -472,18 +453,13 @@ ISR (TIMER_INTR_NAME)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case STATE_STOP: // waiting, measuring gap
|
case STATE_STOP: // waiting, measuring gap
|
||||||
if (irdata == MARK) { // reset gap timer
|
if (irdata == MARK) irparams.timer = 0 ; // reset gap timer
|
||||||
irparams.timer = 0;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (irparams.blinkflag) {
|
if (irparams.blinkflag) {
|
||||||
if (irdata == MARK) {
|
if (irdata == MARK) BLINKLED_ON() ; // turn pin 13 LED on
|
||||||
BLINKLED_ON(); // turn pin 13 LED on
|
else BLINKLED_OFF() ; // turn pin 13 LED off
|
||||||
}
|
|
||||||
else {
|
|
||||||
BLINKLED_OFF(); // turn pin 13 LED off
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -503,123 +479,95 @@ int IRrecv::decode (decode_results *results)
|
|||||||
{
|
{
|
||||||
results->rawbuf = irparams.rawbuf;
|
results->rawbuf = irparams.rawbuf;
|
||||||
results->rawlen = irparams.rawlen;
|
results->rawlen = irparams.rawlen;
|
||||||
if (irparams.rcvstate != STATE_STOP) {
|
if (irparams.rcvstate != STATE_STOP) return ERR ;
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
#ifdef DECODE_NEC
|
#ifdef DECODE_NEC
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
Serial.println("Attempting NEC decode");
|
Serial.println("Attempting NEC decode");
|
||||||
#endif
|
#endif
|
||||||
if (decodeNEC(results)) {
|
if (decodeNEC(results)) return DECODED ;
|
||||||
return DECODED;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DECODE_SONY
|
#ifdef DECODE_SONY
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
Serial.println("Attempting Sony decode");
|
Serial.println("Attempting Sony decode");
|
||||||
#endif
|
#endif
|
||||||
if (decodeSony(results)) {
|
if (decodeSony(results)) return DECODED ;
|
||||||
return DECODED;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DECODE_SANYO
|
#ifdef DECODE_SANYO
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
Serial.println("Attempting Sanyo decode");
|
Serial.println("Attempting Sanyo decode");
|
||||||
#endif
|
#endif
|
||||||
if (decodeSanyo(results)) {
|
if (decodeSanyo(results)) return DECODED ;
|
||||||
return DECODED;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DECODE_MITSUBISHI
|
#ifdef DECODE_MITSUBISHI
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
Serial.println("Attempting Mitsubishi decode");
|
Serial.println("Attempting Mitsubishi decode");
|
||||||
#endif
|
#endif
|
||||||
if (decodeMitsubishi(results)) {
|
if (decodeMitsubishi(results)) return DECODED ;
|
||||||
return DECODED;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DECODE_RC5
|
#ifdef DECODE_RC5
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
Serial.println("Attempting RC5 decode");
|
Serial.println("Attempting RC5 decode");
|
||||||
#endif
|
#endif
|
||||||
if (decodeRC5(results)) {
|
if (decodeRC5(results)) return DECODED ;
|
||||||
return DECODED;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DECODE_RC6
|
#ifdef DECODE_RC6
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
Serial.println("Attempting RC6 decode");
|
Serial.println("Attempting RC6 decode");
|
||||||
#endif
|
#endif
|
||||||
if (decodeRC6(results)) {
|
if (decodeRC6(results)) return DECODED ;
|
||||||
return DECODED;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DECODE_PANASONIC
|
#ifdef DECODE_PANASONIC
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
Serial.println("Attempting Panasonic decode");
|
Serial.println("Attempting Panasonic decode");
|
||||||
#endif
|
#endif
|
||||||
if (decodePanasonic(results)) {
|
if (decodePanasonic(results)) return DECODED ;
|
||||||
return DECODED;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DECODE_LG
|
#ifdef DECODE_LG
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
Serial.println("Attempting LG decode");
|
Serial.println("Attempting LG decode");
|
||||||
#endif
|
#endif
|
||||||
if (decodeLG(results)) {
|
if (decodeLG(results)) return DECODED ;
|
||||||
return DECODED;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DECODE_JVC
|
#ifdef DECODE_JVC
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
Serial.println("Attempting JVC decode");
|
Serial.println("Attempting JVC decode");
|
||||||
#endif
|
#endif
|
||||||
if (decodeJVC(results)) {
|
if (decodeJVC(results)) return DECODED ;
|
||||||
return DECODED;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DECODE_SAMSUNG
|
#ifdef DECODE_SAMSUNG
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
Serial.println("Attempting SAMSUNG decode");
|
Serial.println("Attempting SAMSUNG decode");
|
||||||
#endif
|
#endif
|
||||||
if (decodeSAMSUNG(results)) {
|
if (decodeSAMSUNG(results)) return DECODED ;
|
||||||
return DECODED;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DECODE_WHYNTER
|
#ifdef DECODE_WHYNTER
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
Serial.println("Attempting Whynter decode");
|
Serial.println("Attempting Whynter decode");
|
||||||
#endif
|
#endif
|
||||||
if (decodeWhynter(results)) {
|
if (decodeWhynter(results)) return DECODED ;
|
||||||
return DECODED;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef AIWA_RC_T501
|
#ifdef AIWA_RC_T501
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
Serial.println("Attempting Aiwa RC-T501 decode");
|
Serial.println("Attempting Aiwa RC-T501 decode");
|
||||||
#endif
|
#endif
|
||||||
if (decodeAiwaRCT501(results)) {
|
if (decodeAiwaRCT501(results)) return DECODED ;
|
||||||
return DECODED;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// decodeHash returns a hash on any input.
|
// decodeHash returns a hash on any input.
|
||||||
// Thus, it needs to be last in the list.
|
// Thus, it needs to be last in the list.
|
||||||
// If you add any decodes, add them before this.
|
// If you add any decodes, add them before this.
|
||||||
if (decodeHash(results)) {
|
if (decodeHash(results)) return DECODED ;
|
||||||
return DECODED;
|
|
||||||
}
|
|
||||||
// Throw away and start over
|
// Throw away and start over
|
||||||
resume();
|
resume();
|
||||||
return ERR;
|
return ERR;
|
||||||
@@ -633,9 +581,7 @@ long IRrecv::decodeNEC (decode_results *results)
|
|||||||
long data = 0;
|
long data = 0;
|
||||||
int offset = 1; // Skip first space
|
int offset = 1; // Skip first space
|
||||||
// Initial mark
|
// Initial mark
|
||||||
if (!MATCH_MARK(results->rawbuf[offset], NEC_HDR_MARK)) {
|
if (!MATCH_MARK(results->rawbuf[offset], NEC_HDR_MARK)) return ERR ;
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
offset++;
|
offset++;
|
||||||
// Check for repeat
|
// Check for repeat
|
||||||
if (irparams.rawlen == 4 &&
|
if (irparams.rawlen == 4 &&
|
||||||
@@ -646,28 +592,16 @@ long IRrecv::decodeNEC (decode_results *results)
|
|||||||
results->decode_type = NEC;
|
results->decode_type = NEC;
|
||||||
return DECODED;
|
return DECODED;
|
||||||
}
|
}
|
||||||
if (irparams.rawlen < 2 * NEC_BITS + 4) {
|
if (irparams.rawlen < 2 * NEC_BITS + 4) return ERR ;
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
// Initial space
|
// Initial space
|
||||||
if (!MATCH_SPACE(results->rawbuf[offset], NEC_HDR_SPACE)) {
|
if (!MATCH_SPACE(results->rawbuf[offset], NEC_HDR_SPACE)) return ERR ;
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
offset++;
|
offset++;
|
||||||
for (int i = 0; i < NEC_BITS; i++) {
|
for (int i = 0; i < NEC_BITS; i++) {
|
||||||
if (!MATCH_MARK(results->rawbuf[offset], NEC_BIT_MARK)) {
|
if (!MATCH_MARK(results->rawbuf[offset], NEC_BIT_MARK)) return ERR ;
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
offset++;
|
offset++;
|
||||||
if (MATCH_SPACE(results->rawbuf[offset], NEC_ONE_SPACE)) {
|
if (MATCH_SPACE(results->rawbuf[offset], NEC_ONE_SPACE)) data = (data << 1) | 1 ;
|
||||||
data = (data << 1) | 1;
|
else if (MATCH_SPACE(results->rawbuf[offset], NEC_ZERO_SPACE)) data <<= 1 ;
|
||||||
}
|
else return ERR ;
|
||||||
else if (MATCH_SPACE(results->rawbuf[offset], NEC_ZERO_SPACE)) {
|
|
||||||
data <<= 1;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
offset++;
|
offset++;
|
||||||
}
|
}
|
||||||
// Success
|
// Success
|
||||||
@@ -683,9 +617,7 @@ long IRrecv::decodeNEC (decode_results *results)
|
|||||||
long IRrecv::decodeSony (decode_results *results)
|
long IRrecv::decodeSony (decode_results *results)
|
||||||
{
|
{
|
||||||
long data = 0;
|
long data = 0;
|
||||||
if (irparams.rawlen < 2 * SONY_BITS + 2) {
|
if (irparams.rawlen < 2 * SONY_BITS + 2) return ERR ;
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
int offset = 0; // Dont skip first space, check its size
|
int offset = 0; // Dont skip first space, check its size
|
||||||
|
|
||||||
// Some Sony's deliver repeats fast after first
|
// Some Sony's deliver repeats fast after first
|
||||||
@@ -704,25 +636,15 @@ long IRrecv::decodeSony (decode_results *results)
|
|||||||
offset++;
|
offset++;
|
||||||
|
|
||||||
// Initial mark
|
// Initial mark
|
||||||
if (!MATCH_MARK(results->rawbuf[offset], SONY_HDR_MARK)) {
|
if (!MATCH_MARK(results->rawbuf[offset], SONY_HDR_MARK)) return ERR ;
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
offset++;
|
offset++;
|
||||||
|
|
||||||
while (offset + 1 < irparams.rawlen) {
|
while (offset + 1 < irparams.rawlen) {
|
||||||
if (!MATCH_SPACE(results->rawbuf[offset], SONY_HDR_SPACE)) {
|
if (!MATCH_SPACE(results->rawbuf[offset], SONY_HDR_SPACE)) break ;
|
||||||
break;
|
|
||||||
}
|
|
||||||
offset++;
|
offset++;
|
||||||
if (MATCH_MARK(results->rawbuf[offset], SONY_ONE_MARK)) {
|
if (MATCH_MARK(results->rawbuf[offset], SONY_ONE_MARK)) data = (data << 1) | 1 ;
|
||||||
data = (data << 1) | 1;
|
else if (MATCH_MARK(results->rawbuf[offset], SONY_ZERO_MARK)) data <<= 1 ;
|
||||||
}
|
else return ERR ;
|
||||||
else if (MATCH_MARK(results->rawbuf[offset], SONY_ZERO_MARK)) {
|
|
||||||
data <<= 1;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
offset++;
|
offset++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -744,54 +666,34 @@ long IRrecv::decodeWhynter (decode_results *results)
|
|||||||
{
|
{
|
||||||
long data = 0;
|
long data = 0;
|
||||||
|
|
||||||
if (irparams.rawlen < 2 * WHYNTER_BITS + 6) {
|
if (irparams.rawlen < 2 * WHYNTER_BITS + 6) return ERR ;
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
|
|
||||||
int offset = 1; // skip initial space
|
int offset = 1; // skip initial space
|
||||||
|
|
||||||
// sequence begins with a bit mark and a zero space
|
// sequence begins with a bit mark and a zero space
|
||||||
if (!MATCH_MARK(results->rawbuf[offset], WHYNTER_BIT_MARK)) {
|
if (!MATCH_MARK(results->rawbuf[offset], WHYNTER_BIT_MARK)) return ERR ;
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
offset++;
|
offset++;
|
||||||
if (!MATCH_SPACE(results->rawbuf[offset], WHYNTER_ZERO_SPACE)) {
|
if (!MATCH_SPACE(results->rawbuf[offset], WHYNTER_ZERO_SPACE)) return ERR ;
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
offset++;
|
offset++;
|
||||||
|
|
||||||
// header mark and space
|
// header mark and space
|
||||||
if (!MATCH_MARK(results->rawbuf[offset], WHYNTER_HDR_MARK)) {
|
if (!MATCH_MARK(results->rawbuf[offset], WHYNTER_HDR_MARK)) return ERR ;
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
offset++;
|
offset++;
|
||||||
if (!MATCH_SPACE(results->rawbuf[offset], WHYNTER_HDR_SPACE)) {
|
if (!MATCH_SPACE(results->rawbuf[offset], WHYNTER_HDR_SPACE)) return ERR ;
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
offset++;
|
offset++;
|
||||||
|
|
||||||
// data bits
|
// data bits
|
||||||
for (int i = 0; i < WHYNTER_BITS; i++) {
|
for (int i = 0; i < WHYNTER_BITS; i++) {
|
||||||
if (!MATCH_MARK(results->rawbuf[offset], WHYNTER_BIT_MARK)) {
|
if (!MATCH_MARK(results->rawbuf[offset], WHYNTER_BIT_MARK)) return ERR ;
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
offset++;
|
offset++;
|
||||||
if (MATCH_SPACE(results->rawbuf[offset], WHYNTER_ONE_SPACE)) {
|
if (MATCH_SPACE(results->rawbuf[offset], WHYNTER_ONE_SPACE)) data = (data << 1) | 1 ;
|
||||||
data = (data << 1) | 1;
|
else if (MATCH_SPACE(results->rawbuf[offset],WHYNTER_ZERO_SPACE)) data <<= 1 ;
|
||||||
}
|
else return ERR ;
|
||||||
else if (MATCH_SPACE(results->rawbuf[offset],WHYNTER_ZERO_SPACE)) {
|
|
||||||
data <<= 1;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
offset++;
|
offset++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// trailing mark
|
// trailing mark
|
||||||
if (!MATCH_MARK(results->rawbuf[offset], WHYNTER_BIT_MARK)) {
|
if (!MATCH_MARK(results->rawbuf[offset], WHYNTER_BIT_MARK)) return ERR ;
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
// Success
|
// Success
|
||||||
results->bits = WHYNTER_BITS;
|
results->bits = WHYNTER_BITS;
|
||||||
results->value = data;
|
results->value = data;
|
||||||
@@ -808,9 +710,7 @@ long IRrecv::decodeWhynter (decode_results *results)
|
|||||||
long IRrecv::decodeSanyo (decode_results *results)
|
long IRrecv::decodeSanyo (decode_results *results)
|
||||||
{
|
{
|
||||||
long data = 0;
|
long data = 0;
|
||||||
if (irparams.rawlen < 2 * SANYO_BITS + 2) {
|
if (irparams.rawlen < 2 * SANYO_BITS + 2) return ERR ;
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
int offset = 0; // Skip first space
|
int offset = 0; // Skip first space
|
||||||
// Initial space
|
// Initial space
|
||||||
|
|
||||||
@@ -832,31 +732,19 @@ long IRrecv::decodeSanyo (decode_results *results)
|
|||||||
offset++;
|
offset++;
|
||||||
|
|
||||||
// Initial mark
|
// Initial mark
|
||||||
if (!MATCH_MARK(results->rawbuf[offset], SANYO_HDR_MARK)) {
|
if (!MATCH_MARK(results->rawbuf[offset], SANYO_HDR_MARK)) return ERR ;
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
offset++;
|
offset++;
|
||||||
|
|
||||||
// Skip Second Mark
|
// Skip Second Mark
|
||||||
if (!MATCH_MARK(results->rawbuf[offset], SANYO_HDR_MARK)) {
|
if (!MATCH_MARK(results->rawbuf[offset], SANYO_HDR_MARK)) return ERR ;
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
offset++;
|
offset++;
|
||||||
|
|
||||||
while (offset + 1 < irparams.rawlen) {
|
while (offset + 1 < irparams.rawlen) {
|
||||||
if (!MATCH_SPACE(results->rawbuf[offset], SANYO_HDR_SPACE)) {
|
if (!MATCH_SPACE(results->rawbuf[offset], SANYO_HDR_SPACE)) break ;
|
||||||
break;
|
|
||||||
}
|
|
||||||
offset++;
|
offset++;
|
||||||
if (MATCH_MARK(results->rawbuf[offset], SANYO_ONE_MARK)) {
|
if (MATCH_MARK(results->rawbuf[offset], SANYO_ONE_MARK)) data = (data << 1) | 1 ;
|
||||||
data = (data << 1) | 1;
|
else if (MATCH_MARK(results->rawbuf[offset], SANYO_ZERO_MARK)) data <<= 1 ;
|
||||||
}
|
else return ERR ;
|
||||||
else if (MATCH_MARK(results->rawbuf[offset], SANYO_ZERO_MARK)) {
|
|
||||||
data <<= 1;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
offset++;
|
offset++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -880,9 +768,7 @@ long IRrecv::decodeMitsubishi (decode_results *results)
|
|||||||
{
|
{
|
||||||
// Serial.print("?!? decoding Mitsubishi:");Serial.print(irparams.rawlen); Serial.print(" want "); Serial.println( 2 * MITSUBISHI_BITS + 2);
|
// Serial.print("?!? decoding Mitsubishi:");Serial.print(irparams.rawlen); Serial.print(" want "); Serial.println( 2 * MITSUBISHI_BITS + 2);
|
||||||
long data = 0;
|
long data = 0;
|
||||||
if (irparams.rawlen < 2 * MITSUBISHI_BITS + 2) {
|
if (irparams.rawlen < 2 * MITSUBISHI_BITS + 2) return ERR ;
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
int offset = 0; // Skip first space
|
int offset = 0; // Skip first space
|
||||||
// Initial space
|
// Initial space
|
||||||
|
|
||||||
@@ -912,26 +798,14 @@ long IRrecv::decodeMitsubishi (decode_results *results)
|
|||||||
// 14200 7 41 7 42 7 42 7 17 7 17 7 18 7 41 7 18 7 17 7 17 7 18 7 41 8 17 7 17 7 18 7 17 7
|
// 14200 7 41 7 42 7 42 7 17 7 17 7 18 7 41 7 18 7 17 7 17 7 18 7 41 8 17 7 17 7 18 7 17 7
|
||||||
|
|
||||||
// Initial Space
|
// Initial Space
|
||||||
if (!MATCH_MARK(results->rawbuf[offset], MITSUBISHI_HDR_SPACE)) {
|
if (!MATCH_MARK(results->rawbuf[offset], MITSUBISHI_HDR_SPACE)) return ERR ;
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
offset++;
|
offset++;
|
||||||
while (offset + 1 < irparams.rawlen) {
|
while (offset + 1 < irparams.rawlen) {
|
||||||
if (MATCH_MARK(results->rawbuf[offset], MITSUBISHI_ONE_MARK)) {
|
if (MATCH_MARK(results->rawbuf[offset], MITSUBISHI_ONE_MARK)) data = (data << 1) | 1 ;
|
||||||
data = (data << 1) | 1;
|
else if (MATCH_MARK(results->rawbuf[offset], MITSUBISHI_ZERO_MARK)) data <<= 1 ;
|
||||||
}
|
else return ERR ;
|
||||||
else if (MATCH_MARK(results->rawbuf[offset], MITSUBISHI_ZERO_MARK)) {
|
|
||||||
data <<= 1;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// Serial.println("A"); Serial.println(offset); Serial.println(results->rawbuf[offset]);
|
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
offset++;
|
offset++;
|
||||||
if (!MATCH_SPACE(results->rawbuf[offset], MITSUBISHI_HDR_SPACE)) {
|
if (!MATCH_SPACE(results->rawbuf[offset], MITSUBISHI_HDR_SPACE)) break ;
|
||||||
// Serial.println("B"); Serial.println(offset); Serial.println(results->rawbuf[offset]);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
offset++;
|
offset++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -958,27 +832,16 @@ long IRrecv::decodeMitsubishi (decode_results *results)
|
|||||||
//
|
//
|
||||||
int IRrecv::getRClevel (decode_results *results, int *offset, int *used, int t1)
|
int IRrecv::getRClevel (decode_results *results, int *offset, int *used, int t1)
|
||||||
{
|
{
|
||||||
if (*offset >= results->rawlen) {
|
if (*offset >= results->rawlen) return SPACE ; // After end of recorded buffer, assume SPACE.
|
||||||
// After end of recorded buffer, assume SPACE.
|
|
||||||
return SPACE;
|
|
||||||
}
|
|
||||||
int width = results->rawbuf[*offset];
|
int width = results->rawbuf[*offset];
|
||||||
int val = ((*offset) % 2) ? MARK : SPACE;
|
int val = ((*offset) % 2) ? MARK : SPACE;
|
||||||
int correction = (val == MARK) ? MARK_EXCESS : - MARK_EXCESS;
|
int correction = (val == MARK) ? MARK_EXCESS : - MARK_EXCESS;
|
||||||
|
|
||||||
int avail;
|
int avail;
|
||||||
if (MATCH(width, t1 + correction)) {
|
if (MATCH(width, t1 + correction)) avail = 1 ;
|
||||||
avail = 1;
|
else if (MATCH(width, 2*t1 + correction)) avail = 2 ;
|
||||||
}
|
else if (MATCH(width, 3*t1 + correction)) avail = 3 ;
|
||||||
else if (MATCH(width, 2*t1 + correction)) {
|
else return -1 ;
|
||||||
avail = 2;
|
|
||||||
}
|
|
||||||
else if (MATCH(width, 3*t1 + correction)) {
|
|
||||||
avail = 3;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
(*used)++;
|
(*used)++;
|
||||||
if (*used >= avail) {
|
if (*used >= avail) {
|
||||||
@@ -1000,31 +863,21 @@ int IRrecv::getRClevel (decode_results *results, int *offset, int *used, int
|
|||||||
#ifdef DECODE_RC5
|
#ifdef DECODE_RC5
|
||||||
long IRrecv::decodeRC5 (decode_results *results)
|
long IRrecv::decodeRC5 (decode_results *results)
|
||||||
{
|
{
|
||||||
if (irparams.rawlen < MIN_RC5_SAMPLES + 2) {
|
if (irparams.rawlen < MIN_RC5_SAMPLES + 2) return ERR ;
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
int offset = 1; // Skip gap space
|
int offset = 1; // Skip gap space
|
||||||
long data = 0;
|
long data = 0;
|
||||||
int used = 0;
|
int used = 0;
|
||||||
// Get start bits
|
// Get start bits
|
||||||
if (getRClevel(results, &offset, &used, RC5_T1) != MARK) return ERR;
|
if (getRClevel(results, &offset, &used, RC5_T1) != MARK) return ERR ;
|
||||||
if (getRClevel(results, &offset, &used, RC5_T1) != SPACE) return ERR;
|
if (getRClevel(results, &offset, &used, RC5_T1) != SPACE) return ERR ;
|
||||||
if (getRClevel(results, &offset, &used, RC5_T1) != MARK) return ERR;
|
if (getRClevel(results, &offset, &used, RC5_T1) != MARK) return ERR ;
|
||||||
int nbits;
|
int nbits;
|
||||||
for (nbits = 0; offset < irparams.rawlen; nbits++) {
|
for (nbits = 0; offset < irparams.rawlen; nbits++) {
|
||||||
int levelA = getRClevel(results, &offset, &used, RC5_T1);
|
int levelA = getRClevel(results, &offset, &used, RC5_T1);
|
||||||
int levelB = getRClevel(results, &offset, &used, RC5_T1);
|
int levelB = getRClevel(results, &offset, &used, RC5_T1);
|
||||||
if (levelA == SPACE && levelB == MARK) {
|
if (levelA == SPACE && levelB == MARK) data = (data << 1) | 1 ; // 1 bit
|
||||||
// 1 bit
|
else if (levelA == MARK && levelB == SPACE) data <<= 1 ; // zero bit
|
||||||
data = (data << 1) | 1;
|
else return ERR ;
|
||||||
}
|
|
||||||
else if (levelA == MARK && levelB == SPACE) {
|
|
||||||
// zero bit
|
|
||||||
data <<= 1;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Success
|
// Success
|
||||||
@@ -1039,24 +892,18 @@ long IRrecv::decodeRC5 (decode_results *results)
|
|||||||
#ifdef DECODE_RC6
|
#ifdef DECODE_RC6
|
||||||
long IRrecv::decodeRC6 (decode_results *results)
|
long IRrecv::decodeRC6 (decode_results *results)
|
||||||
{
|
{
|
||||||
if (results->rawlen < MIN_RC6_SAMPLES) {
|
if (results->rawlen < MIN_RC6_SAMPLES) return ERR ;
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
int offset = 1; // Skip first space
|
int offset = 1; // Skip first space
|
||||||
// Initial mark
|
// Initial mark
|
||||||
if (!MATCH_MARK(results->rawbuf[offset], RC6_HDR_MARK)) {
|
if (!MATCH_MARK(results->rawbuf[offset], RC6_HDR_MARK)) return ERR ;
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
offset++;
|
offset++;
|
||||||
if (!MATCH_SPACE(results->rawbuf[offset], RC6_HDR_SPACE)) {
|
if (!MATCH_SPACE(results->rawbuf[offset], RC6_HDR_SPACE)) return ERR ;
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
offset++;
|
offset++;
|
||||||
long data = 0;
|
long data = 0;
|
||||||
int used = 0;
|
int used = 0;
|
||||||
// Get start bit (1)
|
// Get start bit (1)
|
||||||
if (getRClevel(results, &offset, &used, RC6_T1) != MARK) return ERR;
|
if (getRClevel(results, &offset, &used, RC6_T1) != MARK) return ERR ;
|
||||||
if (getRClevel(results, &offset, &used, RC6_T1) != SPACE) return ERR;
|
if (getRClevel(results, &offset, &used, RC6_T1) != SPACE) return ERR ;
|
||||||
int nbits;
|
int nbits;
|
||||||
for (nbits = 0; offset < results->rawlen; nbits++) {
|
for (nbits = 0; offset < results->rawlen; nbits++) {
|
||||||
int levelA, levelB; // Next two levels
|
int levelA, levelB; // Next two levels
|
||||||
@@ -1070,17 +917,9 @@ long IRrecv::decodeRC6 (decode_results *results)
|
|||||||
// T bit is double wide; make sure second half matches
|
// T bit is double wide; make sure second half matches
|
||||||
if (levelB != getRClevel(results, &offset, &used, RC6_T1)) return ERR;
|
if (levelB != getRClevel(results, &offset, &used, RC6_T1)) return ERR;
|
||||||
}
|
}
|
||||||
if (levelA == MARK && levelB == SPACE) { // reversed compared to RC5
|
if (levelA == MARK && levelB == SPACE) data = (data << 1) | 1 ; // 1-bit (reversed compared to RC5)
|
||||||
// 1 bit
|
else if (levelA == SPACE && levelB == MARK) data <<= 1 ; // zero bit
|
||||||
data = (data << 1) | 1;
|
else return ERR ; // Error
|
||||||
}
|
|
||||||
else if (levelA == SPACE && levelB == MARK) {
|
|
||||||
// zero bit
|
|
||||||
data <<= 1;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return ERR; // Error
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// Success
|
// Success
|
||||||
results->bits = nbits;
|
results->bits = nbits;
|
||||||
@@ -1097,27 +936,17 @@ long IRrecv::decodePanasonic (decode_results *results)
|
|||||||
unsigned long long data = 0;
|
unsigned long long data = 0;
|
||||||
int offset = 1;
|
int offset = 1;
|
||||||
|
|
||||||
if (!MATCH_MARK(results->rawbuf[offset], PANASONIC_HDR_MARK)) {
|
if (!MATCH_MARK(results->rawbuf[offset], PANASONIC_HDR_MARK)) return ERR ;
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
offset++;
|
offset++;
|
||||||
if (!MATCH_MARK(results->rawbuf[offset], PANASONIC_HDR_SPACE)) {
|
if (!MATCH_MARK(results->rawbuf[offset], PANASONIC_HDR_SPACE)) return ERR ;
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
offset++;
|
offset++;
|
||||||
|
|
||||||
// decode address
|
// decode address
|
||||||
for (int i = 0; i < PANASONIC_BITS; i++) {
|
for (int i = 0; i < PANASONIC_BITS; i++) {
|
||||||
if (!MATCH_MARK(results->rawbuf[offset++], PANASONIC_BIT_MARK)) {
|
if (!MATCH_MARK(results->rawbuf[offset++], PANASONIC_BIT_MARK)) return ERR ;
|
||||||
return ERR;
|
if (MATCH_SPACE(results->rawbuf[offset],PANASONIC_ONE_SPACE)) data = (data << 1) | 1 ;
|
||||||
}
|
else if (MATCH_SPACE(results->rawbuf[offset],PANASONIC_ZERO_SPACE)) data <<= 1 ;
|
||||||
if (MATCH_SPACE(results->rawbuf[offset],PANASONIC_ONE_SPACE)) {
|
else return ERR ;
|
||||||
data = (data << 1) | 1;
|
|
||||||
} else if (MATCH_SPACE(results->rawbuf[offset],PANASONIC_ZERO_SPACE)) {
|
|
||||||
data <<= 1;
|
|
||||||
} else {
|
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
offset++;
|
offset++;
|
||||||
}
|
}
|
||||||
results->value = (unsigned long)data;
|
results->value = (unsigned long)data;
|
||||||
@@ -1136,38 +965,22 @@ long IRrecv::decodeLG (decode_results *results)
|
|||||||
int offset = 1; // Skip first space
|
int offset = 1; // Skip first space
|
||||||
|
|
||||||
// Initial mark
|
// Initial mark
|
||||||
if (!MATCH_MARK(results->rawbuf[offset], LG_HDR_MARK)) {
|
if (!MATCH_MARK(results->rawbuf[offset], LG_HDR_MARK)) return ERR ;
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
offset++;
|
offset++;
|
||||||
if (irparams.rawlen < 2 * LG_BITS + 1 ) {
|
if (irparams.rawlen < 2 * LG_BITS + 1 ) return ERR ;
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
// Initial space
|
// Initial space
|
||||||
if (!MATCH_SPACE(results->rawbuf[offset], LG_HDR_SPACE)) {
|
if (!MATCH_SPACE(results->rawbuf[offset], LG_HDR_SPACE)) return ERR ;
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
offset++;
|
offset++;
|
||||||
for (int i = 0; i < LG_BITS; i++) {
|
for (int i = 0; i < LG_BITS; i++) {
|
||||||
if (!MATCH_MARK(results->rawbuf[offset], LG_BIT_MARK)) {
|
if (!MATCH_MARK(results->rawbuf[offset], LG_BIT_MARK)) return ERR ;
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
offset++;
|
offset++;
|
||||||
if (MATCH_SPACE(results->rawbuf[offset], LG_ONE_SPACE)) {
|
if (MATCH_SPACE(results->rawbuf[offset], LG_ONE_SPACE)) data = (data << 1) | 1 ;
|
||||||
data = (data << 1) | 1;
|
else if (MATCH_SPACE(results->rawbuf[offset], LG_ZERO_SPACE)) data <<= 1 ;
|
||||||
}
|
else return ERR ;
|
||||||
else if (MATCH_SPACE(results->rawbuf[offset], LG_ZERO_SPACE)) {
|
|
||||||
data <<= 1;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
offset++;
|
offset++;
|
||||||
}
|
}
|
||||||
//Stop bit
|
//Stop bit
|
||||||
if (!MATCH_MARK(results->rawbuf[offset], LG_BIT_MARK)){
|
if (!MATCH_MARK(results->rawbuf[offset], LG_BIT_MARK)) return ERR ;
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
// Success
|
// Success
|
||||||
results->bits = LG_BITS;
|
results->bits = LG_BITS;
|
||||||
results->value = data;
|
results->value = data;
|
||||||
@@ -1194,38 +1007,22 @@ long IRrecv::decodeJVC (decode_results *results)
|
|||||||
return DECODED;
|
return DECODED;
|
||||||
}
|
}
|
||||||
// Initial mark
|
// Initial mark
|
||||||
if (!MATCH_MARK(results->rawbuf[offset], JVC_HDR_MARK)) {
|
if (!MATCH_MARK(results->rawbuf[offset], JVC_HDR_MARK)) return ERR ;
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
offset++;
|
offset++;
|
||||||
if (irparams.rawlen < 2 * JVC_BITS + 1 ) {
|
if (irparams.rawlen < 2 * JVC_BITS + 1 ) return ERR ;
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
// Initial space
|
// Initial space
|
||||||
if (!MATCH_SPACE(results->rawbuf[offset], JVC_HDR_SPACE)) {
|
if (!MATCH_SPACE(results->rawbuf[offset], JVC_HDR_SPACE)) return ERR ;
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
offset++;
|
offset++;
|
||||||
for (int i = 0; i < JVC_BITS; i++) {
|
for (int i = 0; i < JVC_BITS; i++) {
|
||||||
if (!MATCH_MARK(results->rawbuf[offset], JVC_BIT_MARK)) {
|
if (!MATCH_MARK(results->rawbuf[offset], JVC_BIT_MARK)) return ERR ;
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
offset++;
|
offset++;
|
||||||
if (MATCH_SPACE(results->rawbuf[offset], JVC_ONE_SPACE)) {
|
if (MATCH_SPACE(results->rawbuf[offset], JVC_ONE_SPACE)) data = (data << 1) | 1 ;
|
||||||
data = (data << 1) | 1;
|
else if (MATCH_SPACE(results->rawbuf[offset], JVC_ZERO_SPACE)) data <<= 1 ;
|
||||||
}
|
else return ERR ;
|
||||||
else if (MATCH_SPACE(results->rawbuf[offset], JVC_ZERO_SPACE)) {
|
|
||||||
data <<= 1;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
offset++;
|
offset++;
|
||||||
}
|
}
|
||||||
//Stop bit
|
//Stop bit
|
||||||
if (!MATCH_MARK(results->rawbuf[offset], JVC_BIT_MARK)){
|
if (!MATCH_MARK(results->rawbuf[offset], JVC_BIT_MARK)) return ERR ;
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
// Success
|
// Success
|
||||||
results->bits = JVC_BITS;
|
results->bits = JVC_BITS;
|
||||||
results->value = data;
|
results->value = data;
|
||||||
@@ -1243,9 +1040,7 @@ long IRrecv::decodeSAMSUNG (decode_results *results)
|
|||||||
long data = 0;
|
long data = 0;
|
||||||
int offset = 1; // Skip first space
|
int offset = 1; // Skip first space
|
||||||
// Initial mark
|
// Initial mark
|
||||||
if (!MATCH_MARK(results->rawbuf[offset], SAMSUNG_HDR_MARK)) {
|
if (!MATCH_MARK(results->rawbuf[offset], SAMSUNG_HDR_MARK)) return ERR ;
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
offset++;
|
offset++;
|
||||||
// Check for repeat
|
// Check for repeat
|
||||||
if (irparams.rawlen == 4 &&
|
if (irparams.rawlen == 4 &&
|
||||||
@@ -1256,28 +1051,16 @@ long IRrecv::decodeSAMSUNG (decode_results *results)
|
|||||||
results->decode_type = SAMSUNG;
|
results->decode_type = SAMSUNG;
|
||||||
return DECODED;
|
return DECODED;
|
||||||
}
|
}
|
||||||
if (irparams.rawlen < 2 * SAMSUNG_BITS + 4) {
|
if (irparams.rawlen < 2 * SAMSUNG_BITS + 4) return ERR ;
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
// Initial space
|
// Initial space
|
||||||
if (!MATCH_SPACE(results->rawbuf[offset], SAMSUNG_HDR_SPACE)) {
|
if (!MATCH_SPACE(results->rawbuf[offset], SAMSUNG_HDR_SPACE)) return ERR ;
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
offset++;
|
offset++;
|
||||||
for (int i = 0; i < SAMSUNG_BITS; i++) {
|
for (int i = 0; i < SAMSUNG_BITS; i++) {
|
||||||
if (!MATCH_MARK(results->rawbuf[offset], SAMSUNG_BIT_MARK)) {
|
if (!MATCH_MARK(results->rawbuf[offset], SAMSUNG_BIT_MARK)) return ERR ;
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
offset++;
|
offset++;
|
||||||
if (MATCH_SPACE(results->rawbuf[offset], SAMSUNG_ONE_SPACE)) {
|
if (MATCH_SPACE(results->rawbuf[offset], SAMSUNG_ONE_SPACE)) data = (data << 1) | 1 ;
|
||||||
data = (data << 1) | 1;
|
else if (MATCH_SPACE(results->rawbuf[offset], SAMSUNG_ZERO_SPACE)) data <<= 1 ;
|
||||||
}
|
else return ERR ;
|
||||||
else if (MATCH_SPACE(results->rawbuf[offset], SAMSUNG_ZERO_SPACE)) {
|
|
||||||
data <<= 1;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
offset++;
|
offset++;
|
||||||
}
|
}
|
||||||
// Success
|
// Success
|
||||||
@@ -1300,49 +1083,30 @@ long IRrecv::decodeAiwaRCT501 (decode_results *results)
|
|||||||
int offset = 1; // skip first garbage read
|
int offset = 1; // skip first garbage read
|
||||||
|
|
||||||
// Check SIZE
|
// Check SIZE
|
||||||
if(irparams.rawlen < 2 * (AIWA_RC_T501_SUM_BITS) + 4) {
|
if (irparams.rawlen < 2 * (AIWA_RC_T501_SUM_BITS) + 4) return ERR ;
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check HDR
|
// Check HDR
|
||||||
if(!MATCH_MARK(results->rawbuf[offset], AIWA_RC_T501_HDR_MARK)) {
|
if (!MATCH_MARK(results->rawbuf[offset], AIWA_RC_T501_HDR_MARK)) return ERR ;
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
offset++;
|
offset++;
|
||||||
|
|
||||||
// Check HDR space
|
// Check HDR space
|
||||||
if(!MATCH_SPACE(results->rawbuf[offset], AIWA_RC_T501_HDR_SPACE)) {
|
if (!MATCH_SPACE(results->rawbuf[offset], AIWA_RC_T501_HDR_SPACE)) return ERR ;
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
offset++;
|
offset++;
|
||||||
|
|
||||||
offset += 26; // skip pre-data - optional
|
offset += 26; // skip pre-data - optional
|
||||||
while(offset < irparams.rawlen - 4) {
|
while(offset < irparams.rawlen - 4) {
|
||||||
if(MATCH_MARK(results->rawbuf[offset], AIWA_RC_T501_BIT_MARK)) {
|
if (MATCH_MARK(results->rawbuf[offset], AIWA_RC_T501_BIT_MARK)) offset++ ;
|
||||||
offset++;
|
else return ERR ;
|
||||||
}
|
|
||||||
else {
|
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ONE & ZERO
|
// ONE & ZERO
|
||||||
if(MATCH_SPACE(results->rawbuf[offset], AIWA_RC_T501_ONE_SPACE)) {
|
if (MATCH_SPACE(results->rawbuf[offset], AIWA_RC_T501_ONE_SPACE)) data = (data << 1) | 1 ;
|
||||||
data = (data << 1) | 1;
|
else if (MATCH_SPACE(results->rawbuf[offset], AIWA_RC_T501_ZERO_SPACE)) data <<= 1 ;
|
||||||
}
|
else break ; // End of one & zero detected
|
||||||
else if(MATCH_SPACE(results->rawbuf[offset], AIWA_RC_T501_ZERO_SPACE)) {
|
|
||||||
data <<= 1;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// End of one & zero detected
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
offset++;
|
offset++;
|
||||||
}
|
}
|
||||||
|
|
||||||
results->bits = (offset - 1) / 2;
|
results->bits = (offset - 1) / 2;
|
||||||
if(results->bits < 42) {
|
if (results->bits < 42) return ERR ;
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
results->value = data;
|
results->value = data;
|
||||||
results->decode_type = AIWA_RC_T501;
|
results->decode_type = AIWA_RC_T501;
|
||||||
return DECODED;
|
return DECODED;
|
||||||
@@ -1369,15 +1133,9 @@ long IRrecv::decodeAiwaRCT501 (decode_results *results)
|
|||||||
//
|
//
|
||||||
int IRrecv::compare (unsigned int oldval, unsigned int newval)
|
int IRrecv::compare (unsigned int oldval, unsigned int newval)
|
||||||
{
|
{
|
||||||
if (newval < oldval * .8) {
|
if (newval < oldval * .8) return 0 ;
|
||||||
return 0;
|
else if (oldval < newval * .8) return 2 ;
|
||||||
}
|
else return 1 ;
|
||||||
else if (oldval < newval * .8) {
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//+=============================================================================
|
//+=============================================================================
|
||||||
@@ -1392,9 +1150,7 @@ int IRrecv::compare (unsigned int oldval, unsigned int newval)
|
|||||||
long IRrecv::decodeHash (decode_results *results)
|
long IRrecv::decodeHash (decode_results *results)
|
||||||
{
|
{
|
||||||
// Require at least 6 samples to prevent triggering on noise
|
// Require at least 6 samples to prevent triggering on noise
|
||||||
if (results->rawlen < 6) {
|
if (results->rawlen < 6) return ERR ;
|
||||||
return ERR;
|
|
||||||
}
|
|
||||||
long hash = FNV_BASIS_32;
|
long hash = FNV_BASIS_32;
|
||||||
for (int i = 1; i+2 < results->rawlen; i++) {
|
for (int i = 1; i+2 < results->rawlen; i++) {
|
||||||
int value = compare(results->rawbuf[i], results->rawbuf[i+2]);
|
int value = compare(results->rawbuf[i], results->rawbuf[i+2]);
|
||||||
@@ -1511,11 +1267,8 @@ void IRsend::sendAiwaRCT501 (int code)
|
|||||||
// Send pre-data
|
// Send pre-data
|
||||||
for(i=0; i < 26; i++) {
|
for(i=0; i < 26; i++) {
|
||||||
mark(AIWA_RC_T501_BIT_MARK);
|
mark(AIWA_RC_T501_BIT_MARK);
|
||||||
if(pre & TOPBIT) {
|
if (pre & TOPBIT) space(AIWA_RC_T501_ONE_SPACE) ;
|
||||||
space(AIWA_RC_T501_ONE_SPACE);
|
else space(AIWA_RC_T501_ZERO_SPACE) ;
|
||||||
} else {
|
|
||||||
space(AIWA_RC_T501_ZERO_SPACE);
|
|
||||||
}
|
|
||||||
pre <<= 1;
|
pre <<= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1524,11 +1277,8 @@ void IRsend::sendAiwaRCT501 (int code)
|
|||||||
// Send code
|
// Send code
|
||||||
for(i=0; i < 15; i++) {
|
for(i=0; i < 15; i++) {
|
||||||
mark(AIWA_RC_T501_BIT_MARK);
|
mark(AIWA_RC_T501_BIT_MARK);
|
||||||
if(code & TOPBIT) {
|
if (code & TOPBIT) space(AIWA_RC_T501_ONE_SPACE) ;
|
||||||
space(AIWA_RC_T501_ONE_SPACE);
|
else space(AIWA_RC_T501_ZERO_SPACE) ;
|
||||||
} else {
|
|
||||||
space(AIWA_RC_T501_ZERO_SPACE);
|
|
||||||
}
|
|
||||||
code <<= 1;
|
code <<= 1;
|
||||||
}
|
}
|
||||||
// POST-DATA, 1 bit, 0x0
|
// POST-DATA, 1 bit, 0x0
|
||||||
|
|||||||
Reference in New Issue
Block a user