| 
							- #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
 - 
 
 
  |