DevSlashLirc
Mode2LircDevice.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "LircDevice.h"
4 #include "IrSequence.h"
5 
9 class Mode2LircDevice : public LircDevice {
10 private:
11  microseconds_t resolution;
12 
13  bool sendOdd(const lirc_t *data, unsigned length);
14 
15 protected:
17  size_t captureSize;
18 
19 public:
20  static const frequency_t defaultFrequency = 38000U;
21  static const microseconds_t replacementEndingSilence = 100000U;
22  static const milliseconds_t defaultEndTimeout = 200U;
23  static const size_t defaultCaptureSize = 250;
24 
25  //Mode2LircDevice(const char *path = defaultFilename);
26  Mode2LircDevice(const char *path = defaultFilename = defaultFilename,
30  //Mode2LircDevice(const LircDevice& orig);
31  //virtual ~Mode2LircDevice();
32 
33  virtual bool open();
34 
35  bool isMode2() const { return true; }
36  bool isLircCode() const { return false; }
37 
38  void report(std::ostream& stream = std::cout) const;
39 
40  microseconds_t getRecResolution() const { return resolution; }
41 
42  bool canSetSendCarrier() const { return canDo(LIRC_CAN_SET_SEND_CARRIER); }
43  bool canGetRecResolution() const { return canDo(LIRC_CAN_GET_REC_RESOLUTION); }
44 
46  return endTimeout;
47  }
48 
49  void setEndTimeout(int timeout) {
50  endTimeout = timeout;
51  setRecTimeout(1000U * endTimeout); // do not care to check status
52  }
53 
54  size_t getCaptureSize() const {
55  return captureSize;
56  }
57 
58  void setCaptureSize(size_t captureSize_) {
59  captureSize = captureSize_;
60  }
61 
66  lirc_t read(int timeout);
67 
72  void mode2dump(std::ostream& stream = std::cout);
73 
80 
88  int write(const uint32_t *data, size_t length);
89 
96  bool send(const lirc_t *data, unsigned length);
97 
104  bool send(const IrSequence& irSequence);
105 
113  bool send(const IrSequence& irSequence, frequency_t frequency) {
114  return send((lirc_t *) irSequence.getDurations(), irSequence.getLength(), frequency);
115  }
116 
125  bool send(const lirc_t *data, unsigned length, frequency_t frequency);
126 
128  int setSendCarrier(int frequency = defaultFrequency) {
129  return ioctl(LIRC_SET_SEND_CARRIER, frequency);
130  }
131 };
static const milliseconds_t defaultBeginTimeout
Definition: LircDevice.h:52
uint32_t frequency_t
Largest milliseconds_t number possible.
Definition: InfraredTypes.h:38
lirc_t read(int timeout)
Reads exactly one duration.
static const size_t defaultCaptureSize
int ioctl(uint32_t cmd, uint32_t arg)
Definition: LircDevice.cpp:98
const microseconds_t * getDurations() const
Definition: IrSequence.h:60
virtual bool open()
bool send(const lirc_t *data, unsigned length)
Mid-level sending routine.
uint32_t milliseconds_t
Type for durations in milli seconds.
Definition: InfraredTypes.h:29
size_t getLength() const
Returns the length of the data.
Definition: IrSequence.h:52
microseconds_t getRecResolution() const
bool isLircCode() const
bool canGetRecResolution() const
void setCaptureSize(size_t captureSize_)
void report(std::ostream &stream=std::cout) const
Prints a listing of the properties implemented on the stream supplied.
static const milliseconds_t defaultEndTimeout
void mode2dump(std::ostream &stream=std::cout)
Reads and dumps readings in mode2 format.
bool isMode2() const
milliseconds_t endTimeout
static const microseconds_t replacementEndingSilence
static const char * defaultFilename
Definition: LircDevice.h:51
void setEndTimeout(int timeout)
milliseconds_t beginTimeout
Definition: LircDevice.h:35
This abstract class contains the common functionality of the derived classes.
Definition: LircDevice.h:24
uint32_t microseconds_t
Type for durations in micro seconds.
Definition: InfraredTypes.h:20
This class is a LIRC_MODE_MODE2 device as per lirc(4).
int setSendCarrier(int frequency=defaultFrequency)
Set the modulation frequency.
IrSequence * receive()
Reads a sequence.
size_t getCaptureSize() const
This class consists of a vector of durations.
Definition: IrSequence.h:15
int write(const uint32_t *data, size_t length)
A low-level interface to the write(2) call on the file descriptor.
milliseconds_t getEndTimeout() const
bool canDo(uint32_t mask) const
Definition: LircDevice.h:42
static const frequency_t defaultFrequency
int setRecTimeout(int arg)
Set the integer value for IR inactivity timeout (microseconds).
Definition: LircDevice.h:116
bool canSetSendCarrier() const
bool send(const IrSequence &irSequence, frequency_t frequency)
High-level sending routine.
Mode2LircDevice(const char *path=defaultFilename=defaultFilename, milliseconds_t beginTimeout=defaultBeginTimeout, size_t captureSize=defaultCaptureSize, milliseconds_t endTimeout=defaultEndTimeout)