mirror of
https://github.com/Theaninova/Arduino-IRremote.git
synced 2026-01-10 19:52:50 +00:00
working on restructuring and renaming. Change IRremote.h to AIRremote.h
If there are other ideas for a better name then we can use that, A = Arduino in case it wasnt obvious.
This commit is contained in:
344
AIRremote.h
Normal file
344
AIRremote.h
Normal file
@@ -0,0 +1,344 @@
|
||||
|
||||
//******************************************************************************
|
||||
// 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 AIRremote_h
|
||||
#define AIRremote_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
|
||||
|
||||
#define DECODE_LEGO_PF 0 // NOT WRITTEN
|
||||
#define SEND_LEGO_PF 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,
|
||||
LEGO_PF,
|
||||
}
|
||||
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
|
||||
//......................................................................
|
||||
# if DECODE_LEGO_PF
|
||||
bool decodeLegoPowerFunctions (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 (const 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
|
||||
//......................................................................
|
||||
# if SEND_LEGO_PF
|
||||
void sendLegoPowerFunctions (uint16_t data, bool repeat = true) ;
|
||||
# endif
|
||||
} ;
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user