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