7 #include <lib/base/ebase.h>
8 #include <libsig_comp.h>
18 * \brief A remote control.
20 * Handles one remote control. Gets codes from a \ref eRCDriver. Produces events in \ref eRCInput.
22 class eRCDevice: public Object
30 * \brief Constructs a new remote control.
32 * \param id The identifier of the RC, for use in settings.
33 * \param input The \ref eRCDriver where this remote gets its codes from.
35 eRCDevice(std::string id, eRCDriver *input);
38 * \brief Handles a device specific code.
40 * Generates events in \ref eRCInput. code is highly device- and driver dependant.
41 * For Example, it might be 16bit codes with one bit make/break or special codes
44 virtual void handleCode(int code)=0;
46 * \brief Get user readable description.
47 * \result The description.
49 virtual const char *getDescription() const=0;
50 const std::string getIdentifier() const { return id; }
52 * \brief Get a description for a specific key.
53 * \param key The key to get the description for.
54 * \result User readable description of given key.
59 * Receives codes from one or more remote controls.
61 class eRCDriver: public Object
64 std::list<eRCDevice*> listeners;
69 * \brief Constructs a driver.
71 * \param input The RCInput to bind this driver to.
73 eRCDriver(eRCInput *input);
75 * \brief Get pointer to key-consumer.
77 eRCInput *getInput() const { return input; }
79 * \brief Adds a code lister
81 void addCodeListener(eRCDevice *dev)
83 listeners.push_back(dev);
85 void removeCodeListener(eRCDevice *dev)
87 listeners.remove(dev);
91 void enable(int en) { enabled=en; }
94 class eRCShortDriver: public eRCDriver
101 eRCShortDriver(const char *filename);
105 class eRCInputEventDriver: public eRCDriver
110 void keyPressed(int);
112 std::string getDeviceName();
113 eRCInputEventDriver(const char *filename);
114 ~eRCInputEventDriver();
123 eRCKey(eRCDevice *producer, int code, int flags):
124 producer(producer), code(code), flags(flags)
135 bool operator<(const eRCKey &r) const
137 if (r.producer == producer)
145 } else if (r.code < code)
149 } else if (r.producer < producer)
163 void set(int delay, int repeat);
164 int rdelay, // keypress delay after first keypress to begin of repeat (in ms)
165 rrate; // repeat rate (in ms)
170 class eRCInput: public Object
174 static eRCInput *instance;
184 bool operator()(const std::string &a, const std::string &b) const
190 std::map<std::string,eRCDevice*,lstr> devices;
192 Signal1<void, const eRCKey&> keyEvent;
199 void setFile(int handle);
201 /* This is only relevant for "keyboard"-styled input devices,
202 i.e. not plain remote controls. It's up to the input device
203 driver to decide wheter an input device is a keyboard or
206 kmNone will ignore all Ascii Characters sent from the
207 keyboard/console driver, only give normal keycodes to the
210 kmAscii will filter out all keys which produce ascii characters,
211 and send them instead. Note that Modifiers like shift will still
212 be send. Control keys which produce escape codes are send using
215 kmAll will ignore all keycodes, and send everything as ascii,
216 including escape codes. Pretty much useless, since you should
217 lock the console and pass this as the console fd for making the
221 void keyPressed(const eRCKey &key)
223 /*emit*/ keyEvent(key);
226 void addDevice(const std::string &id, eRCDevice *dev);
227 void removeDevice(const std::string &id);
228 eRCDevice *getDevice(const std::string &id);
229 std::map<std::string,eRCDevice*,lstr> &getDevices();
233 enum { kmNone, kmAscii, kmAll };
234 void setKeyboardMode(int mode) { keyboardMode = mode; }
235 int getKeyboardMode() { return keyboardMode; }
236 static eRCInput *getInstance() { return instance; }
239 int islocked() { return locked; }