openATV enigma2
openATV is an open source SetTopBox Graphical user interface.
rc.h
Go to the documentation of this file.
1 #ifndef __rc_h
2 #define __rc_h
3 
4 #include <list>
5 #include <map>
6 
7 #include <linux/input.h>
8 
9 #include <lib/base/ebase.h>
10 #include <libsig_comp.h>
11 #include <lib/python/python.h>
12 #include <string>
13 #include <unordered_map>
14 
15 class eRCInput;
16 class eRCDriver;
17 class eRCKey;
18 
19 #ifndef SWIG
20 
26 class eRCDevice: public sigc::trackable
27 {
28 protected:
31  std::string id;
32 public:
39  eRCDevice(std::string id, eRCDriver *input);
40  virtual ~eRCDevice();
48  virtual void handleCode(long code)=0;
53  virtual const char *getDescription() const=0;
54  const std::string getIdentifier() const { return id; }
60  virtual void setExclusive(bool b) { };
66  virtual int setKeyMapping(const std::unordered_map<unsigned int, unsigned int>& remaps);
67 };
68 
72 class eRCDriver: public sigc::trackable
73 {
74 protected:
75  std::list<eRCDevice*> listeners;
77  int enabled;
78 public:
88  eRCInput *getInput() const { return input; }
93  {
94  listeners.push_back(dev);
95  }
97  {
98  listeners.remove(dev);
99  }
100  virtual ~eRCDriver();
101 
102  void enable(int en) { enabled=en; }
103  virtual void setExclusive(bool) { }
104  virtual bool isKeyboard() { return false; }
105  virtual bool isPointerDevice() { return false; }
106 };
107 
109 {
110 protected:
111  int handle;
113  void keyPressed(int);
114 public:
115  eRCShortDriver(const char *filename);
116  ~eRCShortDriver();
117 };
118 
120 {
121 protected:
123  int handle;
124  unsigned char evCaps[(EV_MAX / 8) + 1];
125  unsigned char keyCaps[(KEY_MAX / 8) + 1];
127  void keyPressed(int);
128 public:
129  std::string getDeviceName();
130  eRCInputEventDriver(const char *filename);
132  void setExclusive(bool b); // in exclusive mode data is not carried to console device
133  bool isKeyboard();
134  bool isPointerDevice();
135  bool hasCap(unsigned char *caps, int bit);
136 };
137 
138 class eRCKey
139 {
140 public:
142  int code, flags;
143 
146  {
147  }
148  enum
149  {
150  /* there are not really flags.. */
155  /* but this is. */
157  };
158 
159  bool operator<(const eRCKey &r) const
160  {
161  if (r.producer == producer)
162  {
163  if (r.code == code)
164  {
165  if (r.flags < flags)
166  return 1;
167  else
168  return 0;
169  } else if (r.code < code)
170  return 1;
171  else
172  return 0;
173  } else if (r.producer < producer)
174  return 1;
175  else
176  return 0;
177  }
178 };
179 
181 {
182 public:
183  eRCConfig();
184  ~eRCConfig();
185  void reload();
186  void save();
187  void set(int delay, int repeat);
188  int rdelay, // keypress delay after first keypress to begin of repeat (in ms)
189  rrate; // repeat rate (in ms)
190 };
191 
192 #endif
193 
194 class eRCInput: public sigc::trackable
195 {
196  int locked;
197  static eRCInput *instance;
198  int keyboardMode;
199 #ifdef SWIG
200  eRCInput();
201  ~eRCInput();
202 public:
203 #else
204 public:
205  struct lstr
206  {
207  bool operator()(const std::string &a, const std::string &b) const
208  {
209  return a<b;
210  }
211  };
212 protected:
213  std::map<std::string,eRCDevice*,lstr> devices;
214 public:
215  sigc::signal1<void, const eRCKey&> keyEvent;
216  eRCInput();
217  ~eRCInput();
218 
219  void close();
220  bool open();
221 
222  /* This is only relevant for "keyboard"-styled input devices,
223  i.e. not plain remote controls. It's up to the input device
224  driver to decide wheter an input device is a keyboard or
225  not.
226 
227  kmNone will ignore all Ascii Characters sent from the
228  keyboard/console driver, only give normal keycodes to the
229  application.
230 
231  kmAscii will filter out all keys which produce ascii characters,
232  and send them instead. Note that Modifiers like shift will still
233  be send. Control keys which produce escape codes are send using
234  normal keycodes.
235 
236  kmAll will ignore all keycodes, and send everything as ascii,
237  including escape codes. Pretty much useless, since you should
238  lock the console and pass this as the console fd for making the
239  tc* stuff working.
240  */
241 
242  void keyPressed(const eRCKey &key)
243  {
244  /*emit*/ keyEvent(key);
245  }
246 
247  void addDevice(const std::string &id, eRCDevice *dev);
248  void removeDevice(const std::string &id);
249  eRCDevice *getDevice(const std::string &id);
250  std::map<std::string,eRCDevice*,lstr> &getDevices();
251 
253 #endif
254  enum { kmNone, kmAscii, kmAll };
256  void setKeyboardMode(int mode) { keyboardMode = mode; }
257  int getKeyboardMode() { return keyboardMode; }
258  int setKeyMapping(const std::string &id, SWIG_PYOBJECT(ePyObject) keyRemap);
259  static eRCInput *getInstance() { return instance; }
260  void lock();
261  void unlock();
262  int islocked() { return locked; }
263 };
264 
265 #endif
Definition: python.h:31
Definition: rc.h:181
void save()
Definition: rc.cpp:210
int rrate
Definition: rc.h:189
void reload()
Definition: rc.cpp:204
eRCConfig()
Definition: rc.cpp:188
int rdelay
Definition: rc.h:188
~eRCConfig()
Definition: rc.cpp:193
void set(int delay, int repeat)
Definition: rc.cpp:198
A remote control.
Definition: rc.h:27
eRCDriver * driver
Definition: rc.h:30
virtual ~eRCDevice()
Definition: rc.cpp:43
eRCDevice(std::string id, eRCDriver *input)
Constructs a new remote control.
Definition: rc.cpp:36
const std::string getIdentifier() const
Definition: rc.h:54
virtual const char * getDescription() const =0
Get user readable description.
virtual void handleCode(long code)=0
Handles a device specific code.
virtual void setExclusive(bool b)
Get a description for a specific key.
Definition: rc.h:60
std::string id
Definition: rc.h:31
virtual int setKeyMapping(const std::unordered_map< unsigned int, unsigned int > &remaps)
set key remappngs.
Definition: rc.cpp:49
eRCInput * input
Definition: rc.h:29
Definition: rc.h:73
virtual bool isPointerDevice()
Definition: rc.h:105
void enable(int en)
Definition: rc.h:102
void removeCodeListener(eRCDevice *dev)
Definition: rc.h:96
void addCodeListener(eRCDevice *dev)
Adds a code lister.
Definition: rc.h:92
std::list< eRCDevice * > listeners
Definition: rc.h:75
eRCDriver(eRCInput *input)
Constructs a driver.
Definition: rc.cpp:54
virtual void setExclusive(bool)
Definition: rc.h:103
eRCInput * getInput() const
Get pointer to key-consumer.
Definition: rc.h:88
virtual bool isKeyboard()
Definition: rc.h:104
eRCInput * input
Definition: rc.h:76
virtual ~eRCDriver()
Definition: rc.cpp:58
int enabled
Definition: rc.h:77
Definition: rc.h:120
bool hasCap(unsigned char *caps, int bit)
Definition: rc.cpp:162
unsigned char keyCaps[(KEY_MAX/8)+1]
Definition: rc.h:125
bool isPointerDevice()
Definition: rc.cpp:175
ePtr< eSocketNotifier > sn
Definition: rc.h:126
int handle
Definition: rc.h:123
unsigned char evCaps[(EV_MAX/8)+1]
Definition: rc.h:124
void setExclusive(bool b)
Definition: rc.cpp:152
void keyPressed(int)
Definition: rc.cpp:97
eRCInputEventDriver(const char *filename)
Definition: rc.cpp:110
std::string getDeviceName()
Definition: rc.cpp:140
bool isKeyboard()
Definition: rc.cpp:167
~eRCInputEventDriver()
Definition: rc.cpp:182
bool m_remote_control
Definition: rc.h:122
Definition: rc.h:195
void close()
Definition: rc.cpp:228
int setKeyMapping(const std::string &id, SWIG_PYOBJECT(ePyObject) keyRemap)
Definition: rc.cpp:261
void removeDevice(const std::string &id)
Definition: rc.cpp:256
eRCInput()
Definition: rc.cpp:216
std::map< std::string, eRCDevice *, lstr > devices
Definition: rc.h:213
@ remapOk
Definition: rc.h:255
@ remapNoSuchDevice
Definition: rc.h:255
@ remapFormatErr
Definition: rc.h:255
@ remapUnsupported
Definition: rc.h:255
~eRCInput()
Definition: rc.cpp:224
void lock()
Definition: rc.cpp:237
@ kmAll
Definition: rc.h:254
@ kmAscii
Definition: rc.h:254
@ kmNone
Definition: rc.h:254
int islocked()
Definition: rc.h:262
void addDevice(const std::string &id, eRCDevice *dev)
Definition: rc.cpp:251
void keyPressed(const eRCKey &key)
Definition: rc.h:242
bool open()
Definition: rc.cpp:232
void setKeyboardMode(int mode)
Definition: rc.h:256
int getKeyboardMode()
Definition: rc.h:257
std::map< std::string, eRCDevice *, lstr > & getDevices()
Definition: rc.cpp:294
eRCDevice * getDevice(const std::string &id)
Definition: rc.cpp:281
eRCConfig config
Definition: rc.h:252
static eRCInput * getInstance()
Definition: rc.h:259
sigc::signal1< void, const eRCKey & > keyEvent
Definition: rc.h:215
void unlock()
Definition: rc.cpp:244
Definition: rc.h:139
bool operator<(const eRCKey &r) const
Definition: rc.h:159
@ flagMake
Definition: rc.h:151
@ flagRepeat
Definition: rc.h:153
@ flagAscii
Definition: rc.h:156
@ flagLong
Definition: rc.h:154
@ flagBreak
Definition: rc.h:152
eRCKey(eRCDevice *producer, int code, int flags)
Definition: rc.h:144
int code
Definition: rc.h:142
eRCDevice * producer
Definition: rc.h:141
int flags
Definition: rc.h:142
Definition: rc.h:109
int handle
Definition: rc.h:111
~eRCShortDriver()
Definition: rc.cpp:91
ePtr< eSocketNotifier > sn
Definition: rc.h:112
eRCShortDriver(const char *filename)
Definition: rc.cpp:77
void keyPressed(int)
Definition: rc.cpp:64
const char * filename
Definition: epng.h:36
int repeat
Definition: SystemInfo.py:305
Definition: tools/host_tools/FormatConverter/Input.py:1
Definition: rc.h:206
bool operator()(const std::string &a, const std::string &b) const
Definition: rc.h:207
#define SWIG_PYOBJECT(x)
Definition: swig.h:23
uint8_t mode
Definition: vps.cpp:40