Infrared4Arduino
IrReceiverSampler.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "IrReceiver.h"
4 
14 // The interrupt routine must have access to some stuff here.
15 // This needs to be public, and, since the interrupt routing
16 // fumbles with it, volatile.
17 class IrReceiverSampler : public IrReceiver {
18 public:
19 
21  static const unsigned long microsPerTick = 50; // was USECPERTICK
22 
29  };
30 
32  volatile ReceiverState_t receiverState; // previously rcvstate;
33 
34  // Note: use the following ones instead of beginningTimeout and endingTimeout
35  // inherited from IrReader.
36  uint32_t endingTimeoutInTicks; // previously GAP_TICKS
37 
38  uint32_t beginningTimeoutInTicks; // previously TIMEOUT_TICKS;
39 
41  volatile uint32_t timer;
42 
44  volatile microseconds_t *durationData; // previously rawbuf;
45 
47  volatile size_t dataLength; // previously rawlen
48 
49 private:
50  static IrReceiverSampler *instance;
51  static uint32_t millisecs2ticks(milliseconds_t ms);
52  static milliseconds_t ticks2millisecs(uint32_t tix);
53 
54 protected:
55  virtual ~IrReceiverSampler();
56 
57 private:
58  IrReceiverSampler(size_t captureLength = defaultCaptureLength,
59  pin_t pin = defaultPin,
60  bool pullup = false,
64 
65 public:
78  static IrReceiverSampler *newIrReceiverSampler(size_t captureLength = defaultCaptureLength,
79  pin_t pin = defaultPin,
80  bool pullup = false,
84 
89  static void deleteInstance();
90 
96  return instance;
97  }
98 
99  void enable();
100 
101  void disable();
102 
103  void reset();
104 
105  void setEndingTimeout(milliseconds_t timeOut);
106 
108 
109  void setBeginningTimeout(milliseconds_t timeOut);
110 
112 
113  size_t getDataLength() const {
114  return dataLength;
115  }
116 
117  microseconds_t getDuration(unsigned int i) const {
118  uint32_t bigvalue = microsPerTick * (uint32_t) durationData[i] + (i & 1 ? markExcess : -markExcess);
119  return bigvalue <= MICROSECONDS_T_MAX ? (microseconds_t) bigvalue : MICROSECONDS_T_MAX;
120  }
121 
122  bool isReady() const {
123  return receiverState == STATE_STOP;
124  }
125 };
Between signals; waiting for first mark.
static const unsigned long microsPerTick
microseconds per clock interrupt
static const milliseconds_t defaultBeginningTimeout
Definition: IrReader.h:33
void setBeginningTimeout(milliseconds_t timeOut)
uint16_t microseconds_t
Type for durations in micro seconds.
Definition: InfraredTypes.h:15
static const microseconds_t defaultMarkExcess
Definition: IrReceiver.h:19
volatile ReceiverState_t receiverState
State of the state machine.
static const milliseconds_t defaultEndingTimeout
Definition: IrReader.h:34
static IrReceiverSampler * newIrReceiverSampler(size_t captureLength=defaultCaptureLength, pin_t pin=defaultPin, bool pullup=false, microseconds_t markExcess=defaultMarkExcess, milliseconds_t beginningTimeout=defaultBeginningTimeout, milliseconds_t endingTimeout=defaultEndingTimeout)
This factory method replaces public constructors.
#define MICROSECONDS_T_MAX
Largest microseconds_t number possible.
Definition: InfraredTypes.h:18
uint8_t pin_t
Type for GPIO pin, compatible with Arduino libs.
Definition: InfraredTypes.h:37
microseconds_t getDuration(unsigned int i) const
Returns the index-th duration, if possible.
volatile size_t dataLength
Number of entries in durationData.
ReceiverState_t
State space for the receiver state machine.
void setEndingTimeout(milliseconds_t timeOut)
This receiving class samples the input pin every 50 microseconds using a timer interrupt.
uint16_t milliseconds_t
Type for durations in milli seconds.
Definition: InfraredTypes.h:25
Abstract base class for demodulating IR receivers.
Definition: IrReceiver.h:11
void enable()
Start reception of IR data.
static void deleteInstance()
Deletes the instance, thereby freeing up the resources it occupied, and allowing for another instance...
volatile uint32_t timer
state timer, counts 50uS ticks.
volatile microseconds_t * durationData
Data buffer.
milliseconds_t endingTimeout
Definition: IrReader.h:39
virtual ~IrReceiverSampler()
void disable()
Stop reception of IR data.
static const pin_t defaultPin
Definition: IrReceiver.h:18
size_t getDataLength() const
Returns the number of collected durations.
Complete signal has been read.
milliseconds_t beginningTimeout
Definition: IrReader.h:38
static const size_t defaultCaptureLength
Definition: IrReader.h:35
bool isReady() const
Returns true if there is collected data.
uint32_t beginningTimeoutInTicks
int16_t markExcess
Microseconds subtracted from pulses and added to gaps.
Definition: IrReader.h:44
milliseconds_t getEndingTimeout() const
milliseconds_t getBeginningTimeout() const
uint32_t endingTimeoutInTicks
static IrReceiverSampler * getInstance()
Returns a pointer to the instance, or NULL.