diff --git a/ir_Aiwa.cpp b/ir_Aiwa.cpp deleted file mode 100644 index 50ec58d..0000000 --- a/ir_Aiwa.cpp +++ /dev/null @@ -1,105 +0,0 @@ -#include "IRremote.h" -#include "IRremoteInt.h" - -//============================================================================== -// AAA IIIII W W AAA -// A A I W W A A -// AAAAA I W W W AAAAA -// A A I W W W A A -// A A IIIII WWW A A -//============================================================================== - -// Based off the RC-T501 RCU -// Lirc file http://lirc.sourceforge.net/remotes/aiwa/RC-T501 - -#define AIWA_RC_T501_HZ 38 -#define AIWA_RC_T501_BITS 15 -#define AIWA_RC_T501_PRE_BITS 26 -#define AIWA_RC_T501_POST_BITS 1 -#define AIWA_RC_T501_SUM_BITS (AIWA_RC_T501_PRE_BITS + AIWA_RC_T501_BITS + AIWA_RC_T501_POST_BITS) -#define AIWA_RC_T501_HDR_MARK 8800 -#define AIWA_RC_T501_HDR_SPACE 4500 -#define AIWA_RC_T501_BIT_MARK 500 -#define AIWA_RC_T501_ONE_SPACE 600 -#define AIWA_RC_T501_ZERO_SPACE 1700 - -//+============================================================================= -#if SEND_AIWA_RC_T501 -void IRsend::sendAiwaRCT501 (int code) -{ - unsigned long pre = 0x0227EEC0; // 26-bits - - // Set IR carrier frequency - enableIROut(AIWA_RC_T501_HZ); - - // Header - mark(AIWA_RC_T501_HDR_MARK); - space(AIWA_RC_T501_HDR_SPACE); - - // Send "pre" data - for (unsigned long mask = 1UL << (26 - 1); mask; mask >>= 1) { - mark(AIWA_RC_T501_BIT_MARK); - if (pre & mask) space(AIWA_RC_T501_ONE_SPACE) ; - else space(AIWA_RC_T501_ZERO_SPACE) ; - } - -//-v- THIS CODE LOOKS LIKE IT MIGHT BE WRONG - CHECK! -// 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 first code bit - code <<= 1; - // Send code - for (int i = 0; i < 15; i++) { - mark(AIWA_RC_T501_BIT_MARK); - if (code & 0x80000000) space(AIWA_RC_T501_ONE_SPACE) ; - else space(AIWA_RC_T501_ZERO_SPACE) ; - code <<= 1; - } - -//-^- THIS CODE LOOKS LIKE IT MIGHT BE WRONG - CHECK! - - // POST-DATA, 1 bit, 0x0 - mark(AIWA_RC_T501_BIT_MARK); - space(AIWA_RC_T501_ZERO_SPACE); - - mark(AIWA_RC_T501_BIT_MARK); - space(0); -} -#endif - -//+============================================================================= -#if DECODE_AIWA_RC_T501 -bool IRrecv::decodeAiwaRCT501 (decode_results *results) -{ - 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 diff --git a/ir_Denon.cpp b/ir_Denon.cpp deleted file mode 100644 index c54e286..0000000 --- a/ir_Denon.cpp +++ /dev/null @@ -1,94 +0,0 @@ -#include "IRremote.h" -#include "IRremoteInt.h" - -// Reverse Engineered by looking at RAW dumps generated by IRremote - -// I have since discovered that Denon publish all their IR codes: -// https://www.google.co.uk/search?q=DENON+MASTER+IR+Hex+Command+Sheet -// -> http://assets.denon.com/documentmaster/us/denon%20master%20ir%20hex.xls - -// Having looked at the official Denon Pronto sheet and reverse engineered -// the timing values from it, it is obvious that Denon have a range of -// different timings and protocols ...the values here work for my AVR-3801 Amp! - -//============================================================================== -// DDDD EEEEE N N OOO N N -// D D E NN N O O NN N -// D D EEE N N N O O N N N -// D D E N NN O O N NN -// DDDD EEEEE N N OOO N N -//============================================================================== - -#define BITS 14 // The number of bits in the command - -#define HDR_MARK 300 // The length of the Header:Mark -#define HDR_SPACE 750 // The lenght of the Header:Space - -#define BIT_MARK 300 // The length of a Bit:Mark -#define ONE_SPACE 1800 // The length of a Bit:Space for 1's -#define ZERO_SPACE 750 // The length of a Bit:Space for 0's - -//+============================================================================= -// -#if SEND_DENON -void IRsend::sendDenon (unsigned long data, int nbits) -{ - // Set IR carrier frequency - enableIROut(38); - - // Header - mark (HDR_MARK); - space(HDR_SPACE); - - // Data - for (unsigned long mask = 1UL << (nbits - 1); mask; mask >>= 1) { - if (data & mask) { - mark (BIT_MARK); - space(ONE_SPACE); - } else { - mark (BIT_MARK); - space(ZERO_SPACE); - } - } - - // Footer - mark(BIT_MARK); - space(0); // Always end with the LED off -} -#endif - -//+============================================================================= -// -#if DECODE_DENON -bool IRrecv::decodeDenon (decode_results *results) -{ - unsigned long data = 0; // Somewhere to build our code - int offset = 1; // Skip the Gap reading - - // Check we have the right amount of data - if (irparams.rawlen != 1 + 2 + (2 * BITS) + 1) return false ; - - // Check initial Mark+Space match - if (!MATCH_MARK (results->rawbuf[offset++], HDR_MARK )) return false ; - if (!MATCH_SPACE(results->rawbuf[offset++], HDR_SPACE)) return false ; - - // Read the bits in - for (int i = 0; i < BITS; i++) { - // Each bit looks like: MARK + SPACE_1 -> 1 - // or : MARK + SPACE_0 -> 0 - if (!MATCH_MARK(results->rawbuf[offset++], BIT_MARK)) return false ; - - // IR data is big-endian, so we shuffle it in from the right: - if (MATCH_SPACE(results->rawbuf[offset], ONE_SPACE)) data = (data << 1) | 1 ; - else if (MATCH_SPACE(results->rawbuf[offset], ZERO_SPACE)) data = (data << 1) | 0 ; - else return false ; - offset++; - } - - // Success - results->bits = BITS; - results->value = data; - results->decode_type = DENON; - return true; -} -#endif diff --git a/ir_Dish.cpp b/ir_Dish.cpp deleted file mode 100644 index fa8e065..0000000 --- a/ir_Dish.cpp +++ /dev/null @@ -1,54 +0,0 @@ -#include "IRremote.h" -#include "IRremoteInt.h" - -//============================================================================== -// DDDD IIIII SSSS H H -// D D I S H H -// D D I SSS HHHHH -// D D I S H H -// DDDD IIIII SSSS H H -//============================================================================== - -// Sharp and DISH support by Todd Treece ( http://unionbridge.org/design/ircommand ) -// -// The sned function needs to be repeated 4 times -// -// Only send the last for characters of the hex. -// I.E. Use 0x1C10 instead of 0x0000000000001C10 as listed in the LIRC file. -// -// Here is the LIRC file I found that seems to match the remote codes from the -// oscilloscope: -// 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 - -//+============================================================================= -#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 = 1UL << (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); - } - } - mark(DISH_HDR_MARK); //added 26th March 2016, by AnalysIR ( https://www.AnalysIR.com ) -} -#endif - diff --git a/ir_JVC.cpp b/ir_JVC.cpp deleted file mode 100644 index eeec20f..0000000 --- a/ir_JVC.cpp +++ /dev/null @@ -1,101 +0,0 @@ -#include "IRremote.h" -#include "IRremoteInt.h" - -//============================================================================== -// JJJJJ V V CCCC -// J V V C -// J V V C -// J J V V C -// J V CCCC -//============================================================================== - -#define JVC_BITS 16 -#define JVC_HDR_MARK 8000 -#define JVC_HDR_SPACE 4000 -#define JVC_BIT_MARK 600 -#define JVC_ONE_SPACE 1600 -#define JVC_ZERO_SPACE 550 -#define JVC_RPT_LENGTH 60000 - -//+============================================================================= -// 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); - - // Only send the Header if this is NOT a repeat command - if (!repeat){ - mark(JVC_HDR_MARK); - space(JVC_HDR_SPACE); - } - - // Data - for (unsigned long mask = 1UL << (nbits - 1); mask; mask >>= 1) { - if (data & mask) { - mark(JVC_BIT_MARK); - space(JVC_ONE_SPACE); - } else { - mark(JVC_BIT_MARK); - space(JVC_ZERO_SPACE); - } - } - - // Footer - mark(JVC_BIT_MARK); - space(0); // Always end with the LED off -} -#endif - -//+============================================================================= -#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; - results->decode_type = JVC; - return true; - } - - // Initial mark - if (!MATCH_MARK(results->rawbuf[offset++], JVC_HDR_MARK)) return false ; - - if (irparams.rawlen < (2 * JVC_BITS) + 1 ) return false ; - - // Initial space - 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 ; - - if (MATCH_SPACE(results->rawbuf[offset], JVC_ONE_SPACE)) data = (data << 1) | 1 ; - else if (MATCH_SPACE(results->rawbuf[offset], JVC_ZERO_SPACE)) data = (data << 1) | 0 ; - else return false ; - offset++; - } - - // Stop bit - if (!MATCH_MARK(results->rawbuf[offset], JVC_BIT_MARK)) return false ; - - // Success - results->bits = JVC_BITS; - results->value = data; - results->decode_type = JVC; - - return true; -} -#endif - diff --git a/ir_LG.cpp b/ir_LG.cpp deleted file mode 100644 index ba532cb..0000000 --- a/ir_LG.cpp +++ /dev/null @@ -1,80 +0,0 @@ -#include "IRremote.h" -#include "IRremoteInt.h" - -//============================================================================== -// L GGGG -// L G -// L G GG -// L G G -// LLLLL GGG -//============================================================================== - -#define LG_BITS 28 - -#define LG_HDR_MARK 8000 -#define LG_HDR_SPACE 4000 -#define LG_BIT_MARK 600 -#define LG_ONE_SPACE 1600 -#define LG_ZERO_SPACE 550 -#define LG_RPT_LENGTH 60000 - -//+============================================================================= -#if DECODE_LG -bool IRrecv::decodeLG (decode_results *results) -{ - long data = 0; - int offset = 1; // Skip first space - - // 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 ; - - if (MATCH_SPACE(results->rawbuf[offset], LG_ONE_SPACE)) data = (data << 1) | 1 ; - else if (MATCH_SPACE(results->rawbuf[offset], LG_ZERO_SPACE)) data = (data << 1) | 0 ; - else return false ; - offset++; - } - - // Stop bit - if (!MATCH_MARK(results->rawbuf[offset], LG_BIT_MARK)) return false ; - - // Success - results->bits = LG_BITS; - results->value = data; - results->decode_type = LG; - return true; -} -#endif - -//+============================================================================= -#if SEND_LG -void IRsend::sendLG (unsigned long data, int nbits) -{ - // Set IR carrier frequency - enableIROut(38); - - // Header - mark(LG_HDR_MARK); - space(LG_HDR_SPACE); - mark(LG_BIT_MARK); - - // Data - for (unsigned long mask = 1UL << (nbits - 1); mask; mask >>= 1) { - if (data & mask) { - space(LG_ONE_SPACE); - mark(LG_BIT_MARK); - } else { - space(LG_ZERO_SPACE); - mark(LG_BIT_MARK); - } - } - space(0); // Always end with the LED off -} -#endif - diff --git a/ir_Lego_PF.cpp b/ir_Lego_PF.cpp deleted file mode 100644 index 37d507c..0000000 --- a/ir_Lego_PF.cpp +++ /dev/null @@ -1,46 +0,0 @@ -#include "IRremote.h" -#include "IRremoteInt.h" -#include "ir_Lego_PF_BitStreamEncoder.h" - -//============================================================================== -// L EEEEEE EEEE OOOO -// L E E O O -// L EEEE E EEE O O -// L E E E O O LEGO Power Functions -// LLLLLL EEEEEE EEEE OOOO Copyright (c) 2016 Philipp Henkel -//============================================================================== - -// Supported Devices -// LEGO® Power Functions IR Receiver 8884 - -//+============================================================================= -// -#if SEND_LEGO_PF - -#if DEBUG -namespace { -void logFunctionParameters(uint16_t data, bool repeat) { - DBG_PRINT("sendLegoPowerFunctions(data="); - DBG_PRINT(data); - DBG_PRINT(", repeat="); - DBG_PRINTLN(repeat?"true)" : "false)"); -} -} // anonymous namespace -#endif // DEBUG - -void IRsend::sendLegoPowerFunctions(uint16_t data, bool repeat) -{ -#if DEBUG - ::logFunctionParameters(data, repeat); -#endif // DEBUG - - enableIROut(38); - static LegoPfBitStreamEncoder bitStreamEncoder; - bitStreamEncoder.reset(data, repeat); - do { - mark(bitStreamEncoder.getMarkDuration()); - space(bitStreamEncoder.getPauseDuration()); - } while (bitStreamEncoder.next()); -} - -#endif // SEND_LEGO_PF diff --git a/ir_Lego_PF_BitStreamEncoder.h b/ir_Lego_PF_BitStreamEncoder.h deleted file mode 100644 index 7689cde..0000000 --- a/ir_Lego_PF_BitStreamEncoder.h +++ /dev/null @@ -1,115 +0,0 @@ - -//============================================================================== -// L EEEEEE EEEE OOOO -// L E E O O -// L EEEE E EEE O O -// L E E E O O LEGO Power Functions -// LLLLLL EEEEEE EEEE OOOO Copyright (c) 2016 Philipp Henkel -//============================================================================== - -//+============================================================================= -// - -class LegoPfBitStreamEncoder { - private: - uint16_t data; - bool repeatMessage; - int messageBitIdx; - int repeatCount; - int messageLength; - - // HIGH data bit = IR mark + high pause - // LOW data bit = IR mark + low pause - static const int LOW_BIT_DURATION = 421; - static const int HIGH_BIT_DURATION = 711; - static const int START_BIT_DURATION = 1184; - static const int STOP_BIT_DURATION = 1184; - static const int IR_MARK_DURATION = 158; - static const int HIGH_PAUSE_DURATION = HIGH_BIT_DURATION - IR_MARK_DURATION; - static const int LOW_PAUSE_DURATION = LOW_BIT_DURATION - IR_MARK_DURATION; - static const int START_PAUSE_DURATION = START_BIT_DURATION - IR_MARK_DURATION; - static const int STOP_PAUSE_DURATION = STOP_BIT_DURATION - IR_MARK_DURATION; - static const int MESSAGE_BITS = 18; - static const int MAX_MESSAGE_LENGTH = 16000; - - public: - void reset(uint16_t data, bool repeatMessage) { - this->data = data; - this->repeatMessage = repeatMessage; - messageBitIdx = 0; - repeatCount = 0; - messageLength = getMessageLength(); - } - - int getChannelId() const { return 1 + ((data >> 12) & 0x3); } - - int getMessageLength() const { - // Sum up all marks - int length = MESSAGE_BITS * IR_MARK_DURATION; - - // Sum up all pauses - length += START_PAUSE_DURATION; - for (unsigned long mask = 1UL << 15; mask; mask >>= 1) { - if (data & mask) { - length += HIGH_PAUSE_DURATION; - } else { - length += LOW_PAUSE_DURATION; - } - } - length += STOP_PAUSE_DURATION; - return length; - } - - boolean next() { - messageBitIdx++; - if (messageBitIdx >= MESSAGE_BITS) { - repeatCount++; - messageBitIdx = 0; - } - if (repeatCount >= 1 && !repeatMessage) { - return false; - } else if (repeatCount >= 5) { - return false; - } else { - return true; - } - } - - int getMarkDuration() const { return IR_MARK_DURATION; } - - int getPauseDuration() const { - if (messageBitIdx == 0) - return START_PAUSE_DURATION; - else if (messageBitIdx < MESSAGE_BITS - 1) { - return getDataBitPause(); - } else { - return getStopPause(); - } - } - - private: - int getDataBitPause() const { - const int pos = MESSAGE_BITS - 2 - messageBitIdx; - const bool isHigh = data & (1 << pos); - return isHigh ? HIGH_PAUSE_DURATION : LOW_PAUSE_DURATION; - } - - int getStopPause() const { - if (repeatMessage) { - return getRepeatStopPause(); - } else { - return STOP_PAUSE_DURATION; - } - } - - int getRepeatStopPause() const { - if (repeatCount == 0 || repeatCount == 1) { - return STOP_PAUSE_DURATION + 5 * MAX_MESSAGE_LENGTH - messageLength; - } else if (repeatCount == 2 || repeatCount == 3) { - return STOP_PAUSE_DURATION - + (6 + 2 * getChannelId()) * MAX_MESSAGE_LENGTH - messageLength; - } else { - return STOP_PAUSE_DURATION; - } - } -}; diff --git a/ir_Mitsubishi.cpp b/ir_Mitsubishi.cpp deleted file mode 100644 index 7f83e53..0000000 --- a/ir_Mitsubishi.cpp +++ /dev/null @@ -1,85 +0,0 @@ -#include "IRremote.h" -#include "IRremoteInt.h" - -//============================================================================== -// MMMMM IIIII TTTTT SSSS U U BBBB IIIII SSSS H H IIIII -// M M M I T S U U B B I S H H I -// M M M I T SSS U U BBBB I SSS HHHHH I -// M M I T S U U B B I S H H I -// M M IIIII T SSSS UUU BBBBB IIIII SSSS H H IIIII -//============================================================================== - -// Looks like Sony except for timings, 48 chars of data and time/space different - -#define MITSUBISHI_BITS 16 - -// Mitsubishi RM 75501 -// 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 -// #define MITSUBISHI_HDR_MARK 250 // seen range 3500 -#define MITSUBISHI_HDR_SPACE 350 // 7*50+100 -#define MITSUBISHI_ONE_MARK 1950 // 41*50-100 -#define MITSUBISHI_ZERO_MARK 750 // 17*50-100 -// #define MITSUBISHI_DOUBLE_SPACE_USECS 800 // usually ssee 713 - not using ticks as get number wrapround -// #define MITSUBISHI_RPT_LENGTH 45000 - -//+============================================================================= -#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; - if (irparams.rawlen < 2 * MITSUBISHI_BITS + 2) return false ; - int offset = 0; // Skip first space - // Initial space - -#if 0 - // Put this back in for debugging - note can't use #DEBUG as if Debug on we don't see the repeat cos of the delay - Serial.print("IR Gap: "); - Serial.println( results->rawbuf[offset]); - Serial.println( "test against:"); - Serial.println(results->rawbuf[offset]); -#endif - -#if 0 - // Not seeing double keys from Mitsubishi - if (results->rawbuf[offset] < MITSUBISHI_DOUBLE_SPACE_USECS) { - // Serial.print("IR Gap found: "); - results->bits = 0; - results->value = REPEAT; - results->decode_type = MITSUBISHI; - return true; - } -#endif - - offset++; - - // Typical - // 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 - if (!MATCH_MARK(results->rawbuf[offset], MITSUBISHI_HDR_SPACE)) return false ; - offset++; - - while (offset + 1 < irparams.rawlen) { - if (MATCH_MARK(results->rawbuf[offset], MITSUBISHI_ONE_MARK)) data = (data << 1) | 1 ; - else if (MATCH_MARK(results->rawbuf[offset], MITSUBISHI_ZERO_MARK)) data <<= 1 ; - else return false ; - offset++; - - if (!MATCH_SPACE(results->rawbuf[offset], MITSUBISHI_HDR_SPACE)) break ; - offset++; - } - - // Success - results->bits = (offset - 1) / 2; - if (results->bits < MITSUBISHI_BITS) { - results->bits = 0; - return false; - } - - results->value = data; - results->decode_type = MITSUBISHI; - return true; -} -#endif - diff --git a/ir_NEC.cpp b/ir_NEC.cpp deleted file mode 100644 index 3b49321..0000000 --- a/ir_NEC.cpp +++ /dev/null @@ -1,98 +0,0 @@ -#include "IRremote.h" -#include "IRremoteInt.h" - -//============================================================================== -// N N EEEEE CCCC -// NN N E C -// N N N EEE C -// N NN E C -// N N EEEEE CCCC -//============================================================================== - -#define NEC_BITS 32 -#define NEC_HDR_MARK 9000 -#define NEC_HDR_SPACE 4500 -#define NEC_BIT_MARK 560 -#define NEC_ONE_SPACE 1690 -#define NEC_ZERO_SPACE 560 -#define NEC_RPT_SPACE 2250 - -//+============================================================================= -#if SEND_NEC -void IRsend::sendNEC (unsigned long data, int nbits) -{ - // Set IR carrier frequency - enableIROut(38); - - // Header - mark(NEC_HDR_MARK); - space(NEC_HDR_SPACE); - - // Data - for (unsigned long mask = 1UL << (nbits - 1); mask; mask >>= 1) { - if (data & mask) { - mark(NEC_BIT_MARK); - space(NEC_ONE_SPACE); - } else { - mark(NEC_BIT_MARK); - space(NEC_ZERO_SPACE); - } - } - - // Footer - mark(NEC_BIT_MARK); - space(0); // Always end with the LED off -} -#endif - -//+============================================================================= -// NECs have a repeat only 4 items long -// -#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!? - - // Check header "mark" - if (!MATCH_MARK(results->rawbuf[offset], NEC_HDR_MARK)) return false ; - offset++; - - // Check for repeat - if ( (irparams.rawlen == 4) - && MATCH_SPACE(results->rawbuf[offset ], NEC_RPT_SPACE) - && MATCH_MARK (results->rawbuf[offset+1], NEC_BIT_MARK ) - ) { - results->bits = 0; - results->value = REPEAT; - results->decode_type = NEC; - return true; - } - - // Check we have enough data - if (irparams.rawlen < (2 * NEC_BITS) + 4) return false ; - - // Check header "space" - if (!MATCH_SPACE(results->rawbuf[offset], NEC_HDR_SPACE)) return false ; - offset++; - - // Build the data - for (int i = 0; i < NEC_BITS; i++) { - // Check data "mark" - if (!MATCH_MARK(results->rawbuf[offset], NEC_BIT_MARK)) return false ; - offset++; - // Suppend this bit - if (MATCH_SPACE(results->rawbuf[offset], NEC_ONE_SPACE )) data = (data << 1) | 1 ; - else if (MATCH_SPACE(results->rawbuf[offset], NEC_ZERO_SPACE)) data = (data << 1) | 0 ; - else return false ; - offset++; - } - - // Success - results->bits = NEC_BITS; - results->value = data; - results->decode_type = NEC; - - return true; -} -#endif diff --git a/ir_Panasonic.cpp b/ir_Panasonic.cpp deleted file mode 100644 index dc0dd73..0000000 --- a/ir_Panasonic.cpp +++ /dev/null @@ -1,78 +0,0 @@ -#include "IRremote.h" -#include "IRremoteInt.h" - -//============================================================================== -// PPPP AAA N N AAA SSSS OOO N N IIIII CCCC -// P P A A NN N A A S O O NN N I C -// PPPP AAAAA N N N AAAAA SSS O O N N N I C -// P A A N NN A A S O O N NN I C -// 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 - -//+============================================================================= -#if SEND_PANASONIC -void IRsend::sendPanasonic (unsigned int address, unsigned long data) -{ - // Set IR carrier frequency - enableIROut(35); - - // Header - mark(PANASONIC_HDR_MARK); - space(PANASONIC_HDR_SPACE); - - // Address - for (unsigned long mask = 1UL << (16 - 1); mask; mask >>= 1) { - mark(PANASONIC_BIT_MARK); - if (address & mask) space(PANASONIC_ONE_SPACE) ; - else space(PANASONIC_ZERO_SPACE) ; - } - - // Data - for (unsigned long mask = 1UL << (32 - 1); mask; mask >>= 1) { - mark(PANASONIC_BIT_MARK); - if (data & mask) space(PANASONIC_ONE_SPACE) ; - else space(PANASONIC_ZERO_SPACE) ; - } - - // Footer - mark(PANASONIC_BIT_MARK); - space(0); // Always end with the LED off -} -#endif - -//+============================================================================= -#if DECODE_PANASONIC -bool IRrecv::decodePanasonic (decode_results *results) -{ - unsigned long long data = 0; - int offset = 1; - - 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++) { - if (!MATCH_MARK(results->rawbuf[offset++], PANASONIC_BIT_MARK)) return false ; - - if (MATCH_SPACE(results->rawbuf[offset],PANASONIC_ONE_SPACE )) data = (data << 1) | 1 ; - else if (MATCH_SPACE(results->rawbuf[offset],PANASONIC_ZERO_SPACE)) data = (data << 1) | 0 ; - else return false ; - offset++; - } - - results->value = (unsigned long)data; - results->address = (unsigned int)(data >> 32); - results->decode_type = PANASONIC; - results->bits = PANASONIC_BITS; - - return true; -} -#endif - diff --git a/ir_RC5_RC6.cpp b/ir_RC5_RC6.cpp deleted file mode 100644 index 10e7927..0000000 --- a/ir_RC5_RC6.cpp +++ /dev/null @@ -1,207 +0,0 @@ -#include "IRremote.h" -#include "IRremoteInt.h" - -//+============================================================================= -// Gets one undecoded level at a time from the raw buffer. -// The RC5/6 decoding is easier if the data is broken into time intervals. -// E.g. if the buffer has MARK for 2 time intervals and SPACE for 1, -// successive calls to getRClevel will return MARK, MARK, SPACE. -// offset and used are updated to keep track of the current position. -// t1 is the time interval for a single bit in microseconds. -// Returns -1 for error (measured time interval is not a multiple of t1). -// -#if (DECODE_RC5 || DECODE_RC6) -int IRrecv::getRClevel (decode_results *results, int *offset, int *used, int t1) -{ - int width; - int val; - int correction; - int avail; - - if (*offset >= results->rawlen) return SPACE ; // After end of recorded buffer, assume SPACE. - width = results->rawbuf[*offset]; - val = ((*offset) % 2) ? MARK : SPACE; - correction = (val == MARK) ? MARK_EXCESS : - MARK_EXCESS; - - if (MATCH(width, ( t1) + correction)) avail = 1 ; - else if (MATCH(width, (2*t1) + correction)) avail = 2 ; - else if (MATCH(width, (3*t1) + correction)) avail = 3 ; - else return -1 ; - - (*used)++; - if (*used >= avail) { - *used = 0; - (*offset)++; - } - - DBG_PRINTLN( (val == MARK) ? "MARK" : "SPACE" ); - - return val; -} -#endif - -//============================================================================== -// RRRR CCCC 55555 -// R R C 5 -// RRRR C 5555 -// R R C 5 -// R R CCCC 5555 -// -// NB: First bit must be a one (start bit) -// -#define MIN_RC5_SAMPLES 11 -#define RC5_T1 889 -#define RC5_RPT_LENGTH 46000 - -//+============================================================================= -#if SEND_RC5 -void IRsend::sendRC5 (unsigned long data, int nbits) -{ - // Set IR carrier frequency - enableIROut(36); - - // Start - mark(RC5_T1); - space(RC5_T1); - mark(RC5_T1); - - // Data - for (unsigned long mask = 1UL << (nbits - 1); mask; mask >>= 1) { - if (data & mask) { - space(RC5_T1); // 1 is space, then mark - mark(RC5_T1); - } else { - mark(RC5_T1); - space(RC5_T1); - } - } - - space(0); // Always end with the LED off -} -#endif - -//+============================================================================= -#if DECODE_RC5 -bool IRrecv::decodeRC5 (decode_results *results) -{ - int nbits; - long data = 0; - int used = 0; - int offset = 1; // Skip gap space - - if (irparams.rawlen < MIN_RC5_SAMPLES + 2) return false ; - - // Get start bits - if (getRClevel(results, &offset, &used, RC5_T1) != MARK) return false ; - if (getRClevel(results, &offset, &used, RC5_T1) != SPACE) return false ; - if (getRClevel(results, &offset, &used, RC5_T1) != MARK) return false ; - - for (nbits = 0; offset < irparams.rawlen; nbits++) { - int levelA = getRClevel(results, &offset, &used, RC5_T1); - int levelB = getRClevel(results, &offset, &used, RC5_T1); - - if ((levelA == SPACE) && (levelB == MARK )) data = (data << 1) | 1 ; - else if ((levelA == MARK ) && (levelB == SPACE)) data = (data << 1) | 0 ; - else return false ; - } - - // Success - results->bits = nbits; - results->value = data; - results->decode_type = RC5; - return true; -} -#endif - -//+============================================================================= -// RRRR CCCC 6666 -// R R C 6 -// RRRR C 6666 -// R R C 6 6 -// R R CCCC 666 -// -// NB : Caller needs to take care of flipping the toggle bit -// -#define MIN_RC6_SAMPLES 1 -#define RC6_HDR_MARK 2666 -#define RC6_HDR_SPACE 889 -#define RC6_T1 444 -#define RC6_RPT_LENGTH 46000 - -#if SEND_RC6 -void IRsend::sendRC6 (unsigned long data, int nbits) -{ - // Set IR carrier frequency - enableIROut(36); - - // Header - mark(RC6_HDR_MARK); - space(RC6_HDR_SPACE); - - // Start bit - mark(RC6_T1); - space(RC6_T1); - - // Data - for (unsigned long i = 1, mask = 1UL << (nbits - 1); mask; i++, mask >>= 1) { - // The fourth bit we send is a "double width trailer bit" - int t = (i == 4) ? (RC6_T1 * 2) : (RC6_T1) ; - if (data & mask) { - mark(t); - space(t); - } else { - space(t); - mark(t); - } - } - - space(0); // Always end with the LED off -} -#endif - -//+============================================================================= -#if DECODE_RC6 -bool IRrecv::decodeRC6 (decode_results *results) -{ - int nbits; - long data = 0; - int used = 0; - int offset = 1; // Skip first space - - if (results->rawlen < MIN_RC6_SAMPLES) return false ; - - // Initial mark - if (!MATCH_MARK(results->rawbuf[offset++], RC6_HDR_MARK)) return false ; - if (!MATCH_SPACE(results->rawbuf[offset++], RC6_HDR_SPACE)) return false ; - - // Get start bit (1) - if (getRClevel(results, &offset, &used, RC6_T1) != MARK) return false ; - if (getRClevel(results, &offset, &used, RC6_T1) != SPACE) return false ; - - for (nbits = 0; offset < results->rawlen; nbits++) { - int levelA, levelB; // Next two levels - - levelA = getRClevel(results, &offset, &used, RC6_T1); - if (nbits == 3) { - // T bit is double wide; make sure second half matches - if (levelA != getRClevel(results, &offset, &used, RC6_T1)) return false; - } - - levelB = getRClevel(results, &offset, &used, RC6_T1); - if (nbits == 3) { - // T bit is double wide; make sure second half matches - if (levelB != getRClevel(results, &offset, &used, RC6_T1)) return false; - } - - if ((levelA == MARK ) && (levelB == SPACE)) data = (data << 1) | 1 ; // inverted compared to RC5 - else if ((levelA == SPACE) && (levelB == MARK )) data = (data << 1) | 0 ; // ... - else return false ; // Error - } - - // Success - results->bits = nbits; - results->value = data; - results->decode_type = RC6; - return true; -} -#endif diff --git a/ir_Samsung.cpp b/ir_Samsung.cpp deleted file mode 100644 index 224487d..0000000 --- a/ir_Samsung.cpp +++ /dev/null @@ -1,92 +0,0 @@ -#include "IRremote.h" -#include "IRremoteInt.h" - -//============================================================================== -// SSSS AAA MMM SSSS U U N N GGGG -// S A A M M M S U U NN N G -// SSS AAAAA M M M SSS U U N N N G GG -// S A A M M S U U N NN G G -// SSSS A A M M SSSS UUU N N GGG -//============================================================================== - -#define SAMSUNG_BITS 32 -#define SAMSUNG_HDR_MARK 5000 -#define SAMSUNG_HDR_SPACE 5000 -#define SAMSUNG_BIT_MARK 560 -#define SAMSUNG_ONE_SPACE 1600 -#define SAMSUNG_ZERO_SPACE 560 -#define SAMSUNG_RPT_SPACE 2250 - -//+============================================================================= -#if SEND_SAMSUNG -void IRsend::sendSAMSUNG (unsigned long data, int nbits) -{ - // Set IR carrier frequency - enableIROut(38); - - // Header - mark(SAMSUNG_HDR_MARK); - space(SAMSUNG_HDR_SPACE); - - // Data - for (unsigned long mask = 1UL << (nbits - 1); mask; mask >>= 1) { - if (data & mask) { - mark(SAMSUNG_BIT_MARK); - space(SAMSUNG_ONE_SPACE); - } else { - mark(SAMSUNG_BIT_MARK); - space(SAMSUNG_ZERO_SPACE); - } - } - - // Footer - mark(SAMSUNG_BIT_MARK); - space(0); // Always end with the LED off -} -#endif - -//+============================================================================= -// SAMSUNGs have a repeat only 4 items long -// -#if DECODE_SAMSUNG -bool IRrecv::decodeSAMSUNG (decode_results *results) -{ - long data = 0; - int offset = 1; // Skip first space - - // Initial mark - if (!MATCH_MARK(results->rawbuf[offset], SAMSUNG_HDR_MARK)) return false ; - offset++; - - // Check for repeat - if ( (irparams.rawlen == 4) - && MATCH_SPACE(results->rawbuf[offset], SAMSUNG_RPT_SPACE) - && MATCH_MARK(results->rawbuf[offset+1], SAMSUNG_BIT_MARK) - ) { - results->bits = 0; - results->value = REPEAT; - results->decode_type = SAMSUNG; - return true; - } - if (irparams.rawlen < (2 * SAMSUNG_BITS) + 4) return false ; - - // Initial space - if (!MATCH_SPACE(results->rawbuf[offset++], SAMSUNG_HDR_SPACE)) return false ; - - for (int i = 0; i < SAMSUNG_BITS; i++) { - if (!MATCH_MARK(results->rawbuf[offset++], SAMSUNG_BIT_MARK)) return false ; - - if (MATCH_SPACE(results->rawbuf[offset], SAMSUNG_ONE_SPACE)) data = (data << 1) | 1 ; - else if (MATCH_SPACE(results->rawbuf[offset], SAMSUNG_ZERO_SPACE)) data = (data << 1) | 0 ; - else return false ; - offset++; - } - - // Success - results->bits = SAMSUNG_BITS; - results->value = data; - results->decode_type = SAMSUNG; - return true; -} -#endif - diff --git a/ir_Sanyo.cpp b/ir_Sanyo.cpp deleted file mode 100644 index c775d61..0000000 --- a/ir_Sanyo.cpp +++ /dev/null @@ -1,76 +0,0 @@ -#include "IRremote.h" -#include "IRremoteInt.h" - -//============================================================================== -// SSSS AAA N N Y Y OOO -// S A A NN N Y Y O O -// SSS AAAAA N N N Y O O -// S A A N NN Y O O -// SSSS A A N N Y OOO -//============================================================================== - -// I think this is a Sanyo decoder: Serial = SA 8650B -// Looks like Sony except for timings, 48 chars of data and time/space different - -#define SANYO_BITS 12 -#define SANYO_HDR_MARK 3500 // seen range 3500 -#define SANYO_HDR_SPACE 950 // seen 950 -#define SANYO_ONE_MARK 2400 // seen 2400 -#define SANYO_ZERO_MARK 700 // seen 700 -#define SANYO_DOUBLE_SPACE_USECS 800 // usually ssee 713 - not using ticks as get number wrapround -#define SANYO_RPT_LENGTH 45000 - -//+============================================================================= -#if DECODE_SANYO -bool IRrecv::decodeSanyo (decode_results *results) -{ - long data = 0; - int offset = 0; // Skip first space <-- CHECK THIS! - - if (irparams.rawlen < (2 * SANYO_BITS) + 2) return false ; - -#if 0 - // Put this back in for debugging - note can't use #DEBUG as if Debug on we don't see the repeat cos of the delay - Serial.print("IR Gap: "); - Serial.println( results->rawbuf[offset]); - Serial.println( "test against:"); - Serial.println(results->rawbuf[offset]); -#endif - - // Initial space - if (results->rawbuf[offset] < SANYO_DOUBLE_SPACE_USECS) { - //Serial.print("IR Gap found: "); - results->bits = 0; - results->value = REPEAT; - results->decode_type = SANYO; - return true; - } - offset++; - - // Initial mark - if (!MATCH_MARK(results->rawbuf[offset++], SANYO_HDR_MARK)) return false ; - - // Skip Second Mark - if (!MATCH_MARK(results->rawbuf[offset++], SANYO_HDR_MARK)) return false ; - - while (offset + 1 < irparams.rawlen) { - if (!MATCH_SPACE(results->rawbuf[offset++], SANYO_HDR_SPACE)) break ; - - if (MATCH_MARK(results->rawbuf[offset], SANYO_ONE_MARK)) data = (data << 1) | 1 ; - else if (MATCH_MARK(results->rawbuf[offset], SANYO_ZERO_MARK)) data = (data << 1) | 0 ; - else return false ; - offset++; - } - - // Success - results->bits = (offset - 1) / 2; - if (results->bits < 12) { - results->bits = 0; - return false; - } - - results->value = data; - results->decode_type = SANYO; - return true; -} -#endif diff --git a/ir_Sharp.cpp b/ir_Sharp.cpp deleted file mode 100644 index 73462c5..0000000 --- a/ir_Sharp.cpp +++ /dev/null @@ -1,71 +0,0 @@ -#include "IRremote.h" -#include "IRremoteInt.h" - -//============================================================================== -// SSSS H H AAA RRRR PPPP -// S H H A A R R P P -// SSS HHHHH AAAAA RRRR PPPP -// S H H A A R R P -// SSSS H H A A R R P -//============================================================================== - -// Sharp and DISH support by Todd Treece: http://unionbridge.org/design/ircommand -// -// The send function has the necessary repeat built in because of the need to -// invert the signal. -// -// Sharp protocol documentation: -// http://www.sbprojects.com/knowledge/ir/sharp.htm -// -// Here is the LIRC file I found that seems to match the remote codes from the -// oscilloscope: -// Sharp LCD TV: -// http://lirc.sourceforge.net/remotes/sharp/GA538WJSA - -#define SHARP_BITS 15 -#define SHARP_BIT_MARK 245 -#define SHARP_ONE_SPACE 1805 -#define SHARP_ZERO_SPACE 795 -#define SHARP_GAP 600000 -#define SHARP_RPT_SPACE 3000 - -#define SHARP_TOGGLE_MASK 0x3FF - -//+============================================================================= -#if SEND_SHARP -void IRsend::sendSharpRaw (unsigned long data, int nbits) -{ - enableIROut(38); - - // Sending codes in bursts of 3 (normal, inverted, normal) makes transmission - // much more reliable. That's the exact behaviour of CD-S6470 remote control. - for (int n = 0; n < 3; n++) { - for (unsigned long mask = 1UL << (nbits - 1); mask; mask >>= 1) { - if (data & mask) { - mark(SHARP_BIT_MARK); - space(SHARP_ONE_SPACE); - } else { - mark(SHARP_BIT_MARK); - space(SHARP_ZERO_SPACE); - } - } - - mark(SHARP_BIT_MARK); - space(SHARP_ZERO_SPACE); - delay(40); - - data = data ^ SHARP_TOGGLE_MASK; - } -} -#endif - -//+============================================================================= -// Sharp send compatible with data obtained through decodeSharp() -// ^^^^^^^^^^^^^ FUNCTION MISSING! -// -#if SEND_SHARP -void IRsend::sendSharp (unsigned int address, unsigned int command) -{ - sendSharpRaw((address << 10) | (command << 2) | 2, SHARP_BITS); -} -#endif diff --git a/ir_Sony.cpp b/ir_Sony.cpp deleted file mode 100644 index 31e67cf..0000000 --- a/ir_Sony.cpp +++ /dev/null @@ -1,95 +0,0 @@ -#include "IRremote.h" -#include "IRremoteInt.h" - -//============================================================================== -// SSSS OOO N N Y Y -// S O O NN N Y Y -// SSS O O N N N Y -// S O O N NN Y -// SSSS OOO N N Y -//============================================================================== - -#define SONY_BITS 12 -#define SONY_HDR_MARK 2400 -#define SONY_HDR_SPACE 600 -#define SONY_ONE_MARK 1200 -#define SONY_ZERO_MARK 600 -#define SONY_RPT_LENGTH 45000 -#define SONY_DOUBLE_SPACE_USECS 500 // usually ssee 713 - not using ticks as get number wrapround - -//+============================================================================= -#if SEND_SONY -void IRsend::sendSony (unsigned long data, int nbits) -{ - // Set IR carrier frequency - enableIROut(40); - - // Header - mark(SONY_HDR_MARK); - space(SONY_HDR_SPACE); - - // Data - for (unsigned long mask = 1UL << (nbits - 1); mask; mask >>= 1) { - if (data & mask) { - mark(SONY_ONE_MARK); - space(SONY_HDR_SPACE); - } else { - mark(SONY_ZERO_MARK); - space(SONY_HDR_SPACE); - } - } - - // We will have ended with LED off -} -#endif - -//+============================================================================= -#if DECODE_SONY -bool IRrecv::decodeSony (decode_results *results) -{ - long data = 0; - int offset = 0; // Dont skip first space, check its size - - if (irparams.rawlen < (2 * SONY_BITS) + 2) return false ; - - // Some Sony's deliver repeats fast after first - // unfortunately can't spot difference from of repeat from two fast clicks - if (results->rawbuf[offset] < SONY_DOUBLE_SPACE_USECS) { - // Serial.print("IR Gap found: "); - results->bits = 0; - results->value = REPEAT; - -# ifdef DECODE_SANYO - results->decode_type = SANYO; -# else - results->decode_type = UNKNOWN; -# endif - - return true; - } - offset++; - - // Initial mark - if (!MATCH_MARK(results->rawbuf[offset++], SONY_HDR_MARK)) return false ; - - while (offset + 1 < irparams.rawlen) { - if (!MATCH_SPACE(results->rawbuf[offset++], SONY_HDR_SPACE)) break ; - - if (MATCH_MARK(results->rawbuf[offset], SONY_ONE_MARK)) data = (data << 1) | 1 ; - else if (MATCH_MARK(results->rawbuf[offset], SONY_ZERO_MARK)) data = (data << 1) | 0 ; - else return false ; - offset++; - } - - // Success - results->bits = (offset - 1) / 2; - if (results->bits < 12) { - results->bits = 0; - return false; - } - results->value = data; - results->decode_type = SONY; - return true; -} -#endif - diff --git a/ir_Template.cpp b/ir_Template.cpp deleted file mode 100644 index eee2b0b..0000000 --- a/ir_Template.cpp +++ /dev/null @@ -1,179 +0,0 @@ -/* -Assuming the protocol we are adding is for the (imaginary) manufacturer: Shuzu - -Our fantasy protocol is a standard protocol, so we can use this standard -template without too much work. Some protocols are quite unique and will require -considerably more work in this file! It is way beyond the scope of this text to -explain how to reverse engineer "unusual" IR protocols. But, unless you own an -oscilloscope, the starting point is probably to use the rawDump.ino sketch and -try to spot the pattern! - -Before you start, make sure the IR library is working OK: - # Open up the Arduino IDE - # Load up the rawDump.ino example sketch - # Run it - -Now we can start to add our new protocol... - -1. Copy this file to : ir_Shuzu.cpp - -2. Replace all occurrences of "Shuzu" with the name of your protocol. - -3. Tweak the #defines to suit your protocol. - -4. If you're lucky, tweaking the #defines will make the default send() function - work. - -5. Again, if you're lucky, tweaking the #defines will have made the default - decode() function work. - -You have written the code to support your new protocol! - -Now you must do a few things to add it to the IRremote system: - -1. Open IRremote.h and make the following changes: - REMEMEBER to change occurences of "SHUZU" with the name of your protocol - - A. At the top, in the section "Supported Protocols", add: - #define DECODE_SHUZU 1 - #define SEND_SHUZU 1 - - B. In the section "enumerated list of all supported formats", add: - SHUZU, - to the end of the list (notice there is a comma after the protocol name) - - C. Further down in "Main class for receiving IR", add: - //...................................................................... - #if DECODE_SHUZU - bool decodeShuzu (decode_results *results) ; - #endif - - D. Further down in "Main class for sending IR", add: - //...................................................................... - #if SEND_SHUZU - void sendShuzu (unsigned long data, int nbits) ; - #endif - - E. Save your changes and close the file - -2. Now open irRecv.cpp and make the following change: - - A. In the function IRrecv::decode(), add: - #ifdef DECODE_NEC - DBG_PRINTLN("Attempting Shuzu decode"); - if (decodeShuzu(results)) return true ; - #endif - - B. Save your changes and close the file - -You will probably want to add your new protocol to the example sketch - -3. Open MyDocuments\Arduino\libraries\IRremote\examples\IRrecvDumpV2.ino - - A. In the encoding() function, add: - case SHUZU: Serial.print("SHUZU"); break ; - -Now open the Arduino IDE, load up the rawDump.ino sketch, and run it. -Hopefully it will compile and upload. -If it doesn't, you've done something wrong. Check your work. -If you can't get it to work - seek help from somewhere. - -If you get this far, I will assume you have successfully added your new protocol -There is one last thing to do. - -1. Delete this giant instructional comment. - -2. Send a copy of your work to us so we can include it in the library and - others may benefit from your hard work and maybe even write a song about how - great you are for helping them! :) - -Regards, - BlueChip -*/ - -#include "IRremote.h" -#include "IRremoteInt.h" - -//============================================================================== -// -// -// S H U Z U -// -// -//============================================================================== - -#define BITS 32 // The number of bits in the command - -#define HDR_MARK 1000 // The length of the Header:Mark -#define HDR_SPACE 2000 // The lenght of the Header:Space - -#define BIT_MARK 3000 // The length of a Bit:Mark -#define ONE_SPACE 4000 // The length of a Bit:Space for 1's -#define ZERO_SPACE 5000 // The length of a Bit:Space for 0's - -#define OTHER 1234 // Other things you may need to define - -//+============================================================================= -// -#if SEND_SHUZU -void IRsend::sendShuzu (unsigned long data, int nbits) -{ - // Set IR carrier frequency - enableIROut(38); - - // Header - mark (HDR_MARK); - space(HDR_SPACE); - - // Data - for (unsigned long mask = 1UL << (nbits - 1); mask; mask >>= 1) { - if (data & mask) { - mark (BIT_MARK); - space(ONE_SPACE); - } else { - mark (BIT_MARK); - space(ZERO_SPACE); - } - } - - // Footer - mark(BIT_MARK); - space(0); // Always end with the LED off -} -#endif - -//+============================================================================= -// -#if DECODE_SHUZU -bool IRrecv::decodeShuzu (decode_results *results) -{ - unsigned long data = 0; // Somewhere to build our code - int offset = 1; // Skip the Gap reading - - // Check we have the right amount of data - if (irparams.rawlen != 1 + 2 + (2 * BITS) + 1) return false ; - - // Check initial Mark+Space match - if (!MATCH_MARK (results->rawbuf[offset++], HDR_MARK )) return false ; - if (!MATCH_SPACE(results->rawbuf[offset++], HDR_SPACE)) return false ; - - // Read the bits in - for (int i = 0; i < SHUZU_BITS; i++) { - // Each bit looks like: MARK + SPACE_1 -> 1 - // or : MARK + SPACE_0 -> 0 - if (!MATCH_MARK(results->rawbuf[offset++], BIT_MARK)) return false ; - - // IR data is big-endian, so we shuffle it in from the right: - if (MATCH_SPACE(results->rawbuf[offset], ONE_SPACE)) data = (data << 1) | 1 ; - else if (MATCH_SPACE(results->rawbuf[offset], ZERO_SPACE)) data = (data << 1) | 0 ; - else return false ; - offset++; - } - - // Success - results->bits = BITS; - results->value = data; - results->decode_type = SHUZU; - return true; -} -#endif diff --git a/ir_Whynter.cpp b/ir_Whynter.cpp deleted file mode 100644 index a830562..0000000 --- a/ir_Whynter.cpp +++ /dev/null @@ -1,91 +0,0 @@ -#include "IRremote.h" -#include "IRremoteInt.h" - -//============================================================================== -// W W H H Y Y N N TTTTT EEEEE RRRRR -// W W H H Y Y NN N T E R R -// W W W HHHHH Y N N N T EEE RRRR -// W W W H H Y N NN T E R R -// WWW H H Y N N T EEEEE R R -//============================================================================== - -#define WHYNTER_BITS 32 -#define WHYNTER_HDR_MARK 2850 -#define WHYNTER_HDR_SPACE 2850 -#define WHYNTER_BIT_MARK 750 -#define WHYNTER_ONE_MARK 750 -#define WHYNTER_ONE_SPACE 2150 -#define WHYNTER_ZERO_MARK 750 -#define WHYNTER_ZERO_SPACE 750 - -//+============================================================================= -#if SEND_WHYNTER -void IRsend::sendWhynter (unsigned long data, int nbits) -{ - // Set IR carrier frequency - enableIROut(38); - - // Start - mark(WHYNTER_ZERO_MARK); - space(WHYNTER_ZERO_SPACE); - - // Header - mark(WHYNTER_HDR_MARK); - space(WHYNTER_HDR_SPACE); - - // Data - for (unsigned long mask = 1UL << (nbits - 1); mask; mask >>= 1) { - if (data & mask) { - mark(WHYNTER_ONE_MARK); - space(WHYNTER_ONE_SPACE); - } else { - mark(WHYNTER_ZERO_MARK); - space(WHYNTER_ZERO_SPACE); - } - } - - // Footer - mark(WHYNTER_ZERO_MARK); - space(WHYNTER_ZERO_SPACE); // Always end with the LED off -} -#endif - -//+============================================================================= -#if DECODE_WHYNTER -bool IRrecv::decodeWhynter (decode_results *results) -{ - long data = 0; - int offset = 1; // skip initial space - - // Check we have the right amount of data - if (irparams.rawlen < (2 * WHYNTER_BITS) + 6) return false ; - - // Sequence begins with a bit mark and a zero space - if (!MATCH_MARK (results->rawbuf[offset++], WHYNTER_BIT_MARK )) return false ; - if (!MATCH_SPACE(results->rawbuf[offset++], WHYNTER_ZERO_SPACE)) return false ; - - // header mark and space - if (!MATCH_MARK (results->rawbuf[offset++], WHYNTER_HDR_MARK )) return false ; - if (!MATCH_SPACE(results->rawbuf[offset++], WHYNTER_HDR_SPACE)) return false ; - - // data bits - for (int i = 0; i < WHYNTER_BITS; i++) { - if (!MATCH_MARK(results->rawbuf[offset++], WHYNTER_BIT_MARK)) return false ; - - if (MATCH_SPACE(results->rawbuf[offset], WHYNTER_ONE_SPACE )) data = (data << 1) | 1 ; - else if (MATCH_SPACE(results->rawbuf[offset], WHYNTER_ZERO_SPACE)) data = (data << 1) | 0 ; - else return false ; - offset++; - } - - // trailing mark - if (!MATCH_MARK(results->rawbuf[offset], WHYNTER_BIT_MARK)) return false ; - - // Success - results->bits = WHYNTER_BITS; - results->value = data; - results->decode_type = WHYNTER; - return true; -} -#endif -