Skip to content

Commit

Permalink
More cleanup and a few minor optimisations
Browse files Browse the repository at this point in the history
  • Loading branch information
csBlueChip committed Jun 20, 2015
1 parent 66dee2f commit eb0360e
Show file tree
Hide file tree
Showing 14 changed files with 536 additions and 480 deletions.
419 changes: 239 additions & 180 deletions IRremote.h

Large diffs are not rendered by default.

70 changes: 34 additions & 36 deletions ir_Aiwa.cpp
Expand Up @@ -24,7 +24,7 @@
#define AIWA_RC_T501_ZERO_SPACE 1700

//+=============================================================================
#ifdef SEND_AIWA_RC_T501
#if SEND_AIWA_RC_T501
void IRsend::sendAiwaRCT501 (int code)
{
unsigned long pre = 0x0227EEC0; // 26-bits
Expand All @@ -48,7 +48,8 @@ void IRsend::sendAiwaRCT501 (int code)
// it only send 15bits and ignores the top bit
// then uses TOPBIT which is 0x80000000 to check the bit code
// I suspect TOPBIT should be changed to 0x00008000
// Skip firts code bit

// Skip first code bit
code <<= 1;
// Send code
for (int i = 0; i < 15; i++) {
Expand All @@ -57,6 +58,7 @@ void IRsend::sendAiwaRCT501 (int code)
else space(AIWA_RC_T501_ZERO_SPACE) ;
code <<= 1;
}

//-^- THIS CODE LOOKS LIKE IT MIGHT BE WRONG - CHECK!

// POST-DATA, 1 bit, 0x0
Expand All @@ -69,40 +71,36 @@ void IRsend::sendAiwaRCT501 (int code)
#endif

//+=============================================================================
#ifdef DECODE_AIWA_RC_T501
long IRrecv::decodeAiwaRCT501 (decode_results *results)
#if DECODE_AIWA_RC_T501
bool IRrecv::decodeAiwaRCT501 (decode_results *results)
{
int data = 0;
int offset = 1; // skip first garbage read

// Check SIZE
if (irparams.rawlen < 2 * (AIWA_RC_T501_SUM_BITS) + 4) return false ;

// Check HDR
if (!MATCH_MARK(results->rawbuf[offset], AIWA_RC_T501_HDR_MARK)) return false ;
offset++;

// Check HDR space
if (!MATCH_SPACE(results->rawbuf[offset], AIWA_RC_T501_HDR_SPACE)) return false ;
offset++;

offset += 26; // skip pre-data - optional
while(offset < irparams.rawlen - 4) {
if (MATCH_MARK(results->rawbuf[offset], AIWA_RC_T501_BIT_MARK)) offset++ ;
else return false ;

// ONE & ZERO
if (MATCH_SPACE(results->rawbuf[offset], AIWA_RC_T501_ONE_SPACE)) 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
offset++;
}

results->bits = (offset - 1) / 2;
if (results->bits < 42) return false ;
results->value = data;
results->decode_type = AIWA_RC_T501;
return true;
int data = 0;
int offset = 1;

// Check SIZE
if (irparams.rawlen < 2 * (AIWA_RC_T501_SUM_BITS) + 4) return false ;

// Check HDR Mark/Space
if (!MATCH_MARK (results->rawbuf[offset++], AIWA_RC_T501_HDR_MARK )) return false ;
if (!MATCH_SPACE(results->rawbuf[offset++], AIWA_RC_T501_HDR_SPACE)) return false ;

offset += 26; // skip pre-data - optional
while(offset < irparams.rawlen - 4) {
if (MATCH_MARK(results->rawbuf[offset], AIWA_RC_T501_BIT_MARK)) offset++ ;
else return false ;

// ONE & ZERO
if (MATCH_SPACE(results->rawbuf[offset], AIWA_RC_T501_ONE_SPACE)) data = (data << 1) | 1 ;
else if (MATCH_SPACE(results->rawbuf[offset], AIWA_RC_T501_ZERO_SPACE)) data = (data << 1) | 0 ;
else break ; // End of one & zero detected
offset++;
}

results->bits = (offset - 1) / 2;
if (results->bits < 42) return false ;

results->value = data;
results->decode_type = AIWA_RC_T501;
return true;
}
#endif

48 changes: 23 additions & 25 deletions ir_Dish.cpp
Expand Up @@ -21,35 +21,33 @@
// DISH NETWORK (echostar 301):
// http://lirc.sourceforge.net/remotes/echostar/301_501_3100_5100_58xx_59xx

#define DISH_BITS 16

#define DISH_HDR_MARK 400
#define DISH_HDR_SPACE 6100
#define DISH_BIT_MARK 400
#define DISH_ONE_SPACE 1700
#define DISH_ZERO_SPACE 2800
#define DISH_RPT_SPACE 6200
#define DISH_TOP_BIT 0x8000
#define DISH_BITS 16
#define DISH_HDR_MARK 400
#define DISH_HDR_SPACE 6100
#define DISH_BIT_MARK 400
#define DISH_ONE_SPACE 1700
#define DISH_ZERO_SPACE 2800
#define DISH_RPT_SPACE 6200

//+=============================================================================
#ifdef SEND_DISH
#if SEND_DISH
void IRsend::sendDISH (unsigned long data, int nbits)
{
// Set IR carrier frequency
enableIROut(56);

mark(DISH_HDR_MARK);
space(DISH_HDR_SPACE);

for (unsigned long mask = 1 << (nbits - 1); mask; mask >>= 1) {
if (data & mask) {
mark(DISH_BIT_MARK);
space(DISH_ONE_SPACE);
} else {
mark(DISH_BIT_MARK);
space(DISH_ZERO_SPACE);
}
}
// Set IR carrier frequency
enableIROut(56);

mark(DISH_HDR_MARK);
space(DISH_HDR_SPACE);

for (unsigned long mask = 1 << (nbits - 1); mask; mask >>= 1) {
if (data & mask) {
mark(DISH_BIT_MARK);
space(DISH_ONE_SPACE);
} else {
mark(DISH_BIT_MARK);
space(DISH_ZERO_SPACE);
}
}
}
#endif

38 changes: 21 additions & 17 deletions ir_JVC.cpp
Expand Up @@ -18,8 +18,13 @@
#define JVC_RPT_LENGTH 60000

//+=============================================================================
#ifdef SEND_JVC
void IRsend::sendJVC (unsigned long data, int nbits, int repeat)
// JVC does NOT repeat by sending a separate code (like NEC does).
// The JVC protocol repeats by skipping the header.
// To send a JVC repeat signal, send the original code value
// and set 'repeat' to true
//
#if SEND_JVC
void IRsend::sendJVC (unsigned long data, int nbits, bool repeat)
{
// Set IR carrier frequency
enableIROut(38);
Expand Down Expand Up @@ -48,37 +53,36 @@ void IRsend::sendJVC (unsigned long data, int nbits, int repeat)
#endif

//+=============================================================================
#ifdef DECODE_JVC
long IRrecv::decodeJVC (decode_results *results)
#if DECODE_JVC
bool IRrecv::decodeJVC (decode_results *results)
{
long data = 0;
int offset = 1; // Skip first space

// Check for repeat
if (irparams.rawlen - 1 == 33 &&
MATCH_MARK(results->rawbuf[offset], JVC_BIT_MARK) &&
MATCH_MARK(results->rawbuf[irparams.rawlen-1], JVC_BIT_MARK)) {
results->bits = 0;
results->value = REPEAT;
if ( (irparams.rawlen - 1 == 33)
&& MATCH_MARK(results->rawbuf[offset], JVC_BIT_MARK)
&& MATCH_MARK(results->rawbuf[irparams.rawlen-1], JVC_BIT_MARK)
) {
results->bits = 0;
results->value = REPEAT;
results->decode_type = JVC;
return true;
}

// Initial mark
if (!MATCH_MARK(results->rawbuf[offset], JVC_HDR_MARK)) return false ;
offset++;
if (!MATCH_MARK(results->rawbuf[offset++], JVC_HDR_MARK)) return false ;

if (irparams.rawlen < 2 * JVC_BITS + 1 ) return false ;
if (irparams.rawlen < (2 * JVC_BITS) + 1 ) return false ;

// Initial space
if (!MATCH_SPACE(results->rawbuf[offset], JVC_HDR_SPACE)) return false ;
offset++;
if (!MATCH_SPACE(results->rawbuf[offset++], JVC_HDR_SPACE)) return false ;

for (int i = 0; i < JVC_BITS; i++) {
if (!MATCH_MARK(results->rawbuf[offset], JVC_BIT_MARK)) return false ;
offset++;
if (!MATCH_MARK(results->rawbuf[offset++], JVC_BIT_MARK)) return false ;

if (MATCH_SPACE(results->rawbuf[offset], JVC_ONE_SPACE)) data = (data << 1) | 1 ;
else if (MATCH_SPACE(results->rawbuf[offset], JVC_ZERO_SPACE)) data <<= 1 ;
else if (MATCH_SPACE(results->rawbuf[offset], JVC_ZERO_SPACE)) data = (data << 1) | 0 ;
else return false ;
offset++;
}
Expand Down
28 changes: 14 additions & 14 deletions ir_LG.cpp
Expand Up @@ -19,24 +19,24 @@
#define LG_RPT_LENGTH 60000

//+=============================================================================
#ifdef DECODE_LG
long IRrecv::decodeLG (decode_results *results)
#if DECODE_LG
bool IRrecv::decodeLG (decode_results *results)
{
long data = 0;
int offset = 1; // Skip first space

// Initial mark
if (!MATCH_MARK(results->rawbuf[offset], LG_HDR_MARK)) return false ;
offset++;
if (irparams.rawlen < 2 * LG_BITS + 1 ) return false ;
// Initial space
if (!MATCH_SPACE(results->rawbuf[offset], LG_HDR_SPACE)) return false ;
offset++;
// Check we have the right amount of data
if (irparams.rawlen < (2 * LG_BITS) + 1 ) return false ;

// Initial mark/space
if (!MATCH_MARK(results->rawbuf[offset++], LG_HDR_MARK)) return false ;
if (!MATCH_SPACE(results->rawbuf[offset++], LG_HDR_SPACE)) return false ;

for (int i = 0; i < LG_BITS; i++) {
if (!MATCH_MARK(results->rawbuf[offset], LG_BIT_MARK)) return false ;
offset++;
if (!MATCH_MARK(results->rawbuf[offset++], LG_BIT_MARK)) return false ;

if (MATCH_SPACE(results->rawbuf[offset], LG_ONE_SPACE)) data = (data << 1) | 1 ;
else if (MATCH_SPACE(results->rawbuf[offset], LG_ZERO_SPACE)) data <<= 1 ;
else if (MATCH_SPACE(results->rawbuf[offset], LG_ZERO_SPACE)) data = (data << 1) | 0 ;
else return false ;
offset++;
}
Expand All @@ -45,8 +45,8 @@ long IRrecv::decodeLG (decode_results *results)
if (!MATCH_MARK(results->rawbuf[offset], LG_BIT_MARK)) return false ;

// Success
results->bits = LG_BITS;
results->value = data;
results->bits = LG_BITS;
results->value = data;
results->decode_type = LG;
return true;
}
Expand Down
4 changes: 2 additions & 2 deletions ir_Mitsubishi.cpp
Expand Up @@ -23,8 +23,8 @@
// #define MITSUBISHI_RPT_LENGTH 45000

//+=============================================================================
#ifdef DECODE_MITSUBISHI
long IRrecv::decodeMitsubishi (decode_results *results)
#if DECODE_MITSUBISHI
bool IRrecv::decodeMitsubishi (decode_results *results)
{
// Serial.print("?!? decoding Mitsubishi:");Serial.print(irparams.rawlen); Serial.print(" want "); Serial.println( 2 * MITSUBISHI_BITS + 2);
long data = 0;
Expand Down
6 changes: 3 additions & 3 deletions ir_NEC.cpp
Expand Up @@ -18,7 +18,7 @@
#define NEC_RPT_SPACE 2250

//+=============================================================================
#ifdef SEND_NEC
#if SEND_NEC
void IRsend::sendNEC (unsigned long data, int nbits)
{
// Set IR carrier frequency
Expand Down Expand Up @@ -48,8 +48,8 @@ void IRsend::sendNEC (unsigned long data, int nbits)
//+=============================================================================
// NECs have a repeat only 4 items long
//
#ifdef DECODE_NEC
long IRrecv::decodeNEC (decode_results *results)
#if DECODE_NEC
bool IRrecv::decodeNEC (decode_results *results)
{
long data = 0; // We decode in to here; Start with nothing
int offset = 1; // Index in to results; Skip first entry!?
Expand Down
28 changes: 13 additions & 15 deletions ir_Panasonic.cpp
Expand Up @@ -9,15 +9,15 @@
// P A A N N A A SSSS OOO N N IIIII CCCC
//==============================================================================

#define PANASONIC_BITS 48
#define PANASONIC_HDR_MARK 3502
#define PANASONIC_HDR_SPACE 1750
#define PANASONIC_BIT_MARK 502
#define PANASONIC_ONE_SPACE 1244
#define PANASONIC_ZERO_SPACE 400
#define PANASONIC_BITS 48
#define PANASONIC_HDR_MARK 3502
#define PANASONIC_HDR_SPACE 1750
#define PANASONIC_BIT_MARK 502
#define PANASONIC_ONE_SPACE 1244
#define PANASONIC_ZERO_SPACE 400

//+=============================================================================
#ifdef SEND_PANASONIC
#if SEND_PANASONIC
void IRsend::sendPanasonic (unsigned int address, unsigned long data)
{
// Set IR carrier frequency
Expand Down Expand Up @@ -48,16 +48,14 @@ void IRsend::sendPanasonic (unsigned int address, unsigned long data)
#endif

//+=============================================================================
#ifdef DECODE_PANASONIC
long IRrecv::decodePanasonic (decode_results *results)
#if DECODE_PANASONIC
bool IRrecv::decodePanasonic (decode_results *results)
{
unsigned long long data = 0;
int offset = 1;
unsigned long long data = 0;
int offset = 1;

if (!MATCH_MARK(results->rawbuf[offset], PANASONIC_HDR_MARK)) return false ;
offset++;
if (!MATCH_MARK(results->rawbuf[offset], PANASONIC_HDR_SPACE)) return false ;
offset++;
if (!MATCH_MARK(results->rawbuf[offset++], PANASONIC_HDR_MARK )) return false ;
if (!MATCH_MARK(results->rawbuf[offset++], PANASONIC_HDR_SPACE)) return false ;

// decode address
for (int i = 0; i < PANASONIC_BITS; i++) {
Expand Down

0 comments on commit eb0360e

Please sign in to comment.