Infrared remote library for Arduino: send and receive infrared signals with multiple protocols Port from Arduino-IRremote https://github.com/z3t0/Arduino-IRremote

Dependents:   Lilnija_29012017 NucleoF042K6_IRReceiver

Revision:
0:70c8e56bac45
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ir_LG.cpp	Sat Jan 23 06:16:48 2016 +0000
@@ -0,0 +1,80 @@
+#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
+