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

Dependents:   mbed-os-example-FinalReal_copy

Revision:
0:70c8e56bac45
Child:
3:17440cf7ab90
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/IRremote.h	Sat Jan 23 06:16:48 2016 +0000
@@ -0,0 +1,332 @@
+
+//******************************************************************************
+// IRremote
+// Version 2.0.1 June, 2015
+// Copyright 2009 Ken Shirriff
+// For details, see http://arcfn.com/2009/08/multi-protocol-infrared-remote-library.html
+// Edited by Mitra to add new controller SANYO
+//
+// Interrupt code based on NECIRrcv by Joe Knapp
+// http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1210243556
+// Also influenced by http://zovirl.com/2008/11/12/building-a-universal-remote-with-an-arduino/
+//
+// JVC and Panasonic protocol added by Kristian Lauszus (Thanks to zenwheel and other people at the original blog post)
+// LG added by Darryl Smith (based on the JVC protocol)
+// Whynter A/C ARC-110WD added by Francesco Meschia
+//******************************************************************************
+
+#ifndef IRremote_h
+#define IRremote_h
+
+//------------------------------------------------------------------------------
+// The ISR header contains several useful macros the user may wish to use
+//
+#include "IRremoteInt.h"
+
+//------------------------------------------------------------------------------
+// Supported IR protocols
+// Each protocol you include costs memory and, during decode, costs time
+// Disable (set to 0) all the protocols you do not need/want!
+//
+#define DECODE_RC5           1
+#define SEND_RC5             1
+
+#define DECODE_RC6           1
+#define SEND_RC6             1
+
+#define DECODE_NEC           1
+#define SEND_NEC             1
+
+#define DECODE_SONY          1
+#define SEND_SONY            1
+
+#define DECODE_PANASONIC     1
+#define SEND_PANASONIC       1
+
+#define DECODE_JVC           1
+#define SEND_JVC             1
+
+#define DECODE_SAMSUNG       1
+#define SEND_SAMSUNG         1
+
+#define DECODE_WHYNTER       1
+#define SEND_WHYNTER         1
+
+#define DECODE_AIWA_RC_T501  1
+#define SEND_AIWA_RC_T501    1
+
+#define DECODE_LG            1
+#define SEND_LG              1 
+
+#define DECODE_SANYO         1
+#define SEND_SANYO           0 // NOT WRITTEN
+
+#define DECODE_MITSUBISHI    1
+#define SEND_MITSUBISHI      0 // NOT WRITTEN
+
+#define DECODE_DISH          0 // NOT WRITTEN
+#define SEND_DISH            1
+
+#define DECODE_SHARP         0 // NOT WRITTEN
+#define SEND_SHARP           1
+
+#define DECODE_DENON         1
+#define SEND_DENON           1
+
+#define DECODE_PRONTO        0 // This function doe not logically make sense
+#define SEND_PRONTO          1
+
+//------------------------------------------------------------------------------
+// When sending a Pronto code we request to send either the "once" code
+//                                                   or the "repeat" code
+// If the code requested does not exist we can request to fallback on the
+// other code (the one we did not explicitly request)
+//
+// I would suggest that "fallback" will be the standard calling method
+// The last paragraph on this page discusses the rationale of this idea:
+//   http://www.remotecentral.com/features/irdisp2.htm
+//
+#define PRONTO_ONCE        false
+#define PRONTO_REPEAT      true
+#define PRONTO_FALLBACK    true
+#define PRONTO_NOFALLBACK  false
+
+//------------------------------------------------------------------------------
+// An enumerated list of all supported formats
+// You do NOT need to remove entries from this list when disabling protocols!
+//
+typedef
+	enum {
+		UNKNOWN      = -1,
+		UNUSED       =  0,
+		RC5,
+		RC6,
+		NEC,
+		SONY,
+		PANASONIC,
+		JVC,
+		SAMSUNG,
+		WHYNTER,
+		AIWA_RC_T501,
+		LG,
+		SANYO,
+		MITSUBISHI,
+		DISH,
+		SHARP,
+		DENON,
+		PRONTO,
+	}
+decode_type_t;
+
+//------------------------------------------------------------------------------
+// Set DEBUG to 1 for lots of lovely debug output
+//
+#define DEBUG  0
+
+//------------------------------------------------------------------------------
+// Debug directives
+//
+#if DEBUG
+#	define DBG_PRINT(...)    Serial.print(__VA_ARGS__)
+#	define DBG_PRINTLN(...)  Serial.println(__VA_ARGS__)
+#else
+#	define DBG_PRINT(...)
+#	define DBG_PRINTLN(...)
+#endif
+
+//------------------------------------------------------------------------------
+// Mark & Space matching functions
+//
+int  MATCH       (int measured, int desired) ;
+int  MATCH_MARK  (int measured_ticks, int desired_us) ;
+int  MATCH_SPACE (int measured_ticks, int desired_us) ;
+
+//------------------------------------------------------------------------------
+// Results returned from the decoder
+//
+class decode_results
+{
+	public:
+		decode_type_t          decode_type;  // UNKNOWN, NEC, SONY, RC5, ...
+		unsigned int           address;      // Used by Panasonic & Sharp [16-bits]
+		unsigned long          value;        // Decoded value [max 32-bits]
+		int                    bits;         // Number of bits in decoded value
+		volatile unsigned int  *rawbuf;      // Raw intervals in 50uS ticks
+		int                    rawlen;       // Number of records in rawbuf
+		int                    overflow;     // true iff IR raw code too long
+};
+
+//------------------------------------------------------------------------------
+// Decoded value for NEC when a repeat code is received
+//
+#define REPEAT 0xFFFFFFFF
+
+//------------------------------------------------------------------------------
+// Main class for receiving IR
+//
+class IRrecv
+{
+	public:
+		IRrecv (int recvpin) ;
+		IRrecv (int recvpin, int blinkpin);
+
+		void  blink13    (int blinkflag) ;
+		int   decode     (decode_results *results) ;
+		void  enableIRIn ( ) ;
+		bool  isIdle     ( ) ;
+		void  resume     ( ) ;
+
+	private:
+		long  decodeHash (decode_results *results) ;
+		int   compare    (unsigned int oldval, unsigned int newval) ;
+
+		//......................................................................
+#		if (DECODE_RC5 || DECODE_RC6)
+			// This helper function is shared by RC5 and RC6
+			int  getRClevel (decode_results *results,  int *offset,  int *used,  int t1) ;
+#		endif
+#		if DECODE_RC5
+			bool  decodeRC5        (decode_results *results) ;
+#		endif
+#		if DECODE_RC6
+			bool  decodeRC6        (decode_results *results) ;
+#		endif
+		//......................................................................
+#		if DECODE_NEC
+			bool  decodeNEC        (decode_results *results) ;
+#		endif
+		//......................................................................
+#		if DECODE_SONY
+			bool  decodeSony       (decode_results *results) ;
+#		endif
+		//......................................................................
+#		if DECODE_PANASONIC
+			bool  decodePanasonic  (decode_results *results) ;
+#		endif
+		//......................................................................
+#		if DECODE_JVC
+			bool  decodeJVC        (decode_results *results) ;
+#		endif
+		//......................................................................
+#		if DECODE_SAMSUNG
+			bool  decodeSAMSUNG    (decode_results *results) ;
+#		endif
+		//......................................................................
+#		if DECODE_WHYNTER
+			bool  decodeWhynter    (decode_results *results) ;
+#		endif
+		//......................................................................
+#		if DECODE_AIWA_RC_T501
+			bool  decodeAiwaRCT501 (decode_results *results) ;
+#		endif
+		//......................................................................
+#		if DECODE_LG
+			bool  decodeLG         (decode_results *results) ;
+#		endif
+		//......................................................................
+#		if DECODE_SANYO
+			bool  decodeSanyo      (decode_results *results) ;
+#		endif
+		//......................................................................
+#		if DECODE_MITSUBISHI
+			bool  decodeMitsubishi (decode_results *results) ;
+#		endif
+		//......................................................................
+#		if DECODE_DISH
+			bool  decodeDish (decode_results *results) ; // NOT WRITTEN
+#		endif
+		//......................................................................
+#		if DECODE_SHARP
+			bool  decodeSharp (decode_results *results) ; // NOT WRITTEN
+#		endif
+		//......................................................................
+#		if DECODE_DENON
+			bool  decodeDenon (decode_results *results) ;
+#		endif
+} ;
+
+//------------------------------------------------------------------------------
+// Main class for sending IR
+//
+class IRsend
+{
+	public:
+		IRsend () { }
+
+		void  custom_delay_usec (unsigned long uSecs);
+		void  enableIROut 		(int khz) ;
+		void  mark        		(unsigned int usec) ;
+		void  space       		(unsigned int usec) ;
+		void  sendRaw     		(unsigned int buf[],  unsigned int len,  unsigned int hz) ;
+
+		//......................................................................
+#		if SEND_RC5
+			void  sendRC5        (unsigned long data,  int nbits) ;
+#		endif
+#		if SEND_RC6
+			void  sendRC6        (unsigned long data,  int nbits) ;
+#		endif
+		//......................................................................
+#		if SEND_NEC
+			void  sendNEC        (unsigned long data,  int nbits) ;
+#		endif
+		//......................................................................
+#		if SEND_SONY
+			void  sendSony       (unsigned long data,  int nbits) ;
+#		endif
+		//......................................................................
+#		if SEND_PANASONIC
+			void  sendPanasonic  (unsigned int address,  unsigned long data) ;
+#		endif
+		//......................................................................
+#		if SEND_JVC
+			// JVC does NOT repeat by sending a separate code (like NEC does).
+			// The JVC protocol repeats by skipping the header.
+			// To send a JVC repeat signal, send the original code value
+			//   and set 'repeat' to true
+			void  sendJVC        (unsigned long data,  int nbits,  bool repeat) ;
+#		endif
+		//......................................................................
+#		if SEND_SAMSUNG
+			void  sendSAMSUNG    (unsigned long data,  int nbits) ;
+#		endif
+		//......................................................................
+#		if SEND_WHYNTER
+			void  sendWhynter    (unsigned long data,  int nbits) ;
+#		endif
+		//......................................................................
+#		if SEND_AIWA_RC_T501
+			void  sendAiwaRCT501 (int code) ;
+#		endif
+		//......................................................................
+#		if SEND_LG
+			void  sendLG         (unsigned long data,  int nbits) ;
+#		endif
+		//......................................................................
+#		if SEND_SANYO
+			void  sendSanyo      ( ) ; // NOT WRITTEN
+#		endif
+		//......................................................................
+#		if SEND_MISUBISHI
+			void  sendMitsubishi ( ) ; // NOT WRITTEN
+#		endif
+		//......................................................................
+#		if SEND_DISH
+			void  sendDISH       (unsigned long data,  int nbits) ;
+#		endif
+		//......................................................................
+#		if SEND_SHARP
+			void  sendSharpRaw   (unsigned long data,  int nbits) ;
+			void  sendSharp      (unsigned int address,  unsigned int command) ;
+#		endif
+		//......................................................................
+#		if SEND_DENON
+			void  sendDenon      (unsigned long data,  int nbits) ;
+#		endif
+		//......................................................................
+#		if SEND_PRONTO
+			void  sendPronto     (char* code,  bool repeat,  bool fallback) ;
+#		endif
+} ;
+
+#endif