You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

84 lines
4.0 KiB

/* 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 <20>input only<6C> 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