4 // The generic remote controller.
7 #include "pirkeynames.h"
12 // We'll define a maximum number of repetitions, regardless of how long the
13 // user presses the button. (This is just in case we miss the point at which
14 // he stops pressing it...) 500 should be plenty.
15 #define MAX_REPEAT_COUNT 500
17 typedef std::deque<bool> CommandSequence;
19 // As I've learned more about IR protocols, the concept of what a specific
20 // key is gets more and more complex. To deal with this, I'm going to allow
21 // a key to have more than one command sequence associated with it. (I need
22 // up to three codes for Sony keys, and as many as four to define an
23 // individual Pioneer key.)
27 CommandSequence firstCode;
28 CommandSequence secondCode;
29 CommandSequence thirdCode;
30 CommandSequence fourthCode;
33 // I'll go ahead and use associative arrays to build up lists of keycodes.
34 typedef std::map<int, PIRKeyBits> KeycodeCollection;
37 // Right now, the only reason for this object to inherit from QObject is
38 // so it can participate in Qt-style threading. Note that it has no
39 // event loop, and no access to the GUI, so don't go trying to communicate
40 // with the user here...
41 class PIRProtocol: public QObject
52 unsigned int getCarrierFrequency() const;
54 void setCarrierFrequency(
57 unsigned int getDutyCycle() const;
67 // A special addKey used for Sony's SIRC protocol:
70 unsigned int addressData,
72 unsigned int commandData);
76 unsigned int secondaryAddressData,
77 unsigned int primaryAddressData,
78 unsigned int commandData);
82 unsigned int addressData,
83 unsigned int commandData);
87 unsigned int addressData,
88 unsigned int commandData);
92 unsigned int addressData,
93 unsigned int commandData);
97 unsigned int firstAddress,
98 unsigned int firstCommand,
99 unsigned int secondAddress,
100 unsigned int secondCommand);
105 unsigned int addressData,
106 unsigned int commandData);
111 unsigned int addressData,
112 unsigned int commandData);
116 unsigned int firstCommand,
117 unsigned int secondCommand);
121 unsigned int firstCommand,
122 unsigned int secondCommand);
124 void setMinimumRepetitions(
125 unsigned int minrep);
136 virtual void startSendingCommand(
137 unsigned int threadableID,
138 PIRKeyName command) = 0;
142 const char *errString);
145 bool isCommandSupported(
148 void clearRepeatFlag();
149 bool checkRepeatFlag();
151 unsigned int carrierFrequency;
152 unsigned int dutyCycle;
155 CommandSequence &bits,
159 KeycodeCollection keycodes;
161 // A sleep function for all protocols:
162 void sleepUntilRepeat(
163 int commandDuration);
165 // The "gap" parameter from LIRC. If the commands are "variable-length",
166 // this indicates the amount of time between the last pulse of one
167 // command and the first pulse of the next. If "constant-length", it is
168 // the time between the _first_ pulse of one command and the first pulse
175 bool isConstantLength;
178 // More administrative data wrapped around the actual command:
179 CommandSequence preData;
180 CommandSequence postData;
182 // Some remotes require a minimum number of repetitions:
183 // Note: thinking about removing this -- don't know if it is needed
184 int minimumRepetitions;
189 #endif // PIRPROTOCOL_H