Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: ir_NEC.cpp
- Revision:
- 0:70c8e56bac45
diff -r 000000000000 -r 70c8e56bac45 ir_NEC.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ir_NEC.cpp Sat Jan 23 06:16:48 2016 +0000
@@ -0,0 +1,98 @@
+#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