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