|
|
|
|
/* IRLibRecvBase.h
|
|
|
|
|
* Part of IRLib Library for Arduino receiving, decoding, and sending
|
|
|
|
|
* infrared signals. See COPYRIGHT.txt and LICENSE.txt for more information.
|
|
|
|
|
*
|
|
|
|
|
* This module contains the base class classes for receiving IR signals. You will not create
|
|
|
|
|
* instances of this class, rather it is used as a base class for the 3 different
|
|
|
|
|
* receiver classes. These are the original IRrecv which uses a 50us timer interrupt.
|
|
|
|
|
* The IRrecvPCI version that uses pin change interrupts and IRrecvLoop which uses no timers
|
|
|
|
|
* or interrupts. Each of these has its own .h and .cpp file.
|
|
|
|
|
*
|
|
|
|
|
* The IRrecvLoop files are in this folder. However the other two receivers in their own
|
|
|
|
|
* separate libraries. That is because their interrupt service routines can conflict
|
|
|
|
|
* with other ISRs. The ISRs conflict would occur even if you did not create an instance
|
|
|
|
|
* of their receiver classes. Similarly the frequency detection receiver which also uses
|
|
|
|
|
* interrupts is also in a separate folder IRLibFreq.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#ifndef IRLibRecvBase_h
|
|
|
|
|
#define IRLibRecvBase_h
|
|
|
|
|
#include "IRLibGlobals.h"
|
|
|
|
|
|
|
|
|
|
/* Below are default values for initializing various receiver parameters.
|
|
|
|
|
* Each of these can be set using methods or variables in the base class
|
|
|
|
|
* however these are the defaults if you do not specifically set them.
|
|
|
|
|
*/
|
|
|
|
|
#define DEFAULT_BLINK_PIN LED_BUILTIN //NOTE: LED_BUILTIN is an Arduino constant
|
|
|
|
|
#define DEFAULT_BLINK_ENABLED false
|
|
|
|
|
#define DEFAULT_MARK_EXCESS 50
|
|
|
|
|
#define DEFAULT_FRAME_TIMEOUT 7800 //maximum length of SPACE Sbefore we assume frame ended
|
|
|
|
|
//DEFAULT_TIMEOUT should be 1.25*the_largest_space_any_valid_IR_protocol_might_have.
|
|
|
|
|
//In IRremote library ir_Dish.cpp space they use DISH_RPT_SPACE 6200 while referenced says
|
|
|
|
|
//about 6000. If we take 6200*1.25= 7750 rounded up we will use 7800. Previous IRLib
|
|
|
|
|
//value was 10000 was probably too large. Thanks to Gabriel Staples for this note.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Base receiver class. Do not create instance. Only used as base for other
|
|
|
|
|
* receiver classes. See documentation for description of each method or variable.
|
|
|
|
|
*/
|
|
|
|
|
class IRrecvBase {
|
|
|
|
|
public:
|
|
|
|
|
IRrecvBase(void) {};
|
|
|
|
|
IRrecvBase(uint8_t recvPin);
|
|
|
|
|
bool getResults(const uint16_t timePerTicks=1);
|
|
|
|
|
virtual void enableIRIn(void);
|
|
|
|
|
virtual void disableIRIn(void);
|
|
|
|
|
void enableAutoResume(uint16_t *P);
|
|
|
|
|
void setFrameTimeout(uint16_t frameTimeout);
|
|
|
|
|
void blink13(bool enableBlinkLED);
|
|
|
|
|
uint16_t markExcess;
|
|
|
|
|
protected:
|
|
|
|
|
void init(void);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/* The global functions below are not methods of any class because they either
|
|
|
|
|
* do not directly relate to the classes or they must be global functions
|
|
|
|
|
* so that they can appear inside and ISR. You cannot pass variables to ISR's
|
|
|
|
|
* or you could not pass any object or methods to it. These functions have been
|
|
|
|
|
* renamed to emphasize the fact that they are part of this library.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
/* This function does the actual blinking of an indicator LED. Must be global
|
|
|
|
|
* so it can be used by ISRs
|
|
|
|
|
*/
|
|
|
|
|
void IRLib_doBlink(void);
|
|
|
|
|
|
|
|
|
|
/* Some users create custom boards for input and output of IR signals and those boards are
|
|
|
|
|
* connected to their Arduino even in the case when the sketch only does input. It is
|
|
|
|
|
* theoretically possible that when running an <EFBFBD>input only<EFBFBD> sketch that the output pin
|
|
|
|
|
* could initialize high and your output LED would be on all the time. LED driver circuits
|
|
|
|
|
* are sometimes designed to overdrive the LED because it is used only intermittently. If
|
|
|
|
|
* it were to be accidentally left on continuously, it could burn out your circuit. If you
|
|
|
|
|
* want to ensure that this does not happen you can call the function below.
|
|
|
|
|
* NOTE: This used to be a method of the base receiver class but it really doesn't have
|
|
|
|
|
* anything to do with receiving so we renamed it and made it a standalone function.
|
|
|
|
|
*/
|
|
|
|
|
void IRLib_NoOutput(void);
|
|
|
|
|
|
|
|
|
|
/* This function is called by both the 50us and PCI ISR in one of two circumstances:
|
|
|
|
|
* 1) The SPACE was long enough that we are sure the frame is over and ready to process.
|
|
|
|
|
* 2) The buffer overflowed we have to quit. The parameter is for debugging purposes only.
|
|
|
|
|
*/
|
|
|
|
|
void IRLib_IRrecvComplete(uint8_t Reason);
|
|
|
|
|
|
|
|
|
|
#endif //IRLibRecvBase_h
|