import of enigma2
[enigma2.git] / lib / driver / rcinput.cpp
1 #include <lib/driver/rcinput.h>
2
3 #include <sys/ioctl.h>
4 #include <linux/input.h>
5 #include <sys/stat.h>
6
7 #include <lib/base/ebase.h>
8 #include <lib/base/init.h>
9 #include <lib/base/init_num.h>
10 #include <lib/driver/input_fake.h>
11
12 void eRCDeviceInputDev::handleCode(int rccode)
13 {
14         struct input_event *ev = (struct input_event *)rccode;
15         if (ev->type!=EV_KEY)
16                 return;
17         eDebug("%x %x %x", ev->value, ev->code, ev->type);
18         switch (ev->value)
19         {
20         case 0:
21                 /*emit*/ input->keyPressed(eRCKey(this, ev->code, eRCKey::flagBreak));
22                 break;
23         case 1:
24                 /*emit*/ input->keyPressed(eRCKey(this, ev->code, 0));
25                 break;
26         case 2:
27                 /*emit*/ input->keyPressed(eRCKey(this, ev->code, eRCKey::flagRepeat));
28                 break;
29         }
30 }
31
32 eRCDeviceInputDev::eRCDeviceInputDev(eRCInputEventDriver *driver): eRCDevice(driver->getDeviceName(), driver)
33 {
34 }
35
36 const char *eRCDeviceInputDev::getDescription() const
37 {
38         return id.c_str();
39 }
40
41 const char *eRCDeviceInputDev::getKeyDescription(const eRCKey &key) const
42 {
43         switch (key.code)
44         {
45         case KEY_0: return "0";
46         case KEY_1: return "1";
47         case KEY_2: return "2";
48         case KEY_3: return "3";
49         case KEY_4: return "4";
50         case KEY_5: return "5";
51         case KEY_6: return "6";
52         case KEY_7: return "7";
53         case KEY_8: return "8";
54         case KEY_9: return "9";
55         case KEY_RIGHT: return "rechts";
56         case KEY_LEFT: return "links";
57         case KEY_UP: return "oben";
58         case KEY_DOWN: return "unten";
59         case KEY_OK: return "ok";
60         case KEY_MUTE: return "mute";
61         case KEY_POWER: return "power";
62         case KEY_GREEN: return "gruen";
63         case KEY_YELLOW: return "gelb";
64         case KEY_RED: return "rot";
65         case KEY_BLUE: return "blau";
66         case KEY_VOLUMEUP: return "Lautstaerke plus";
67         case KEY_VOLUMEDOWN: return "Lautstaerke minus";
68         case KEY_HELP: return "?";
69         case KEY_SETUP: return "d-Box";
70 #if 0
71         case KEY_TOPLEFT: return "oben links";
72         case KEY_TOPRIGHT: return "oben rechts";
73         case KEY_BOTTOMLEFT: return "unten links";
74         case KEY_BOTTOMRIGHT: return "unten rechts";
75 #endif
76         case KEY_HOME: return "home";
77         default: return 0;
78         }
79 }
80
81 int eRCDeviceInputDev::getKeyCompatibleCode(const eRCKey &key) const
82 {
83         switch (key.code)
84         {
85                 case KEY_0: return eRCInput::RC_0;
86                 case KEY_1: return eRCInput::RC_1;
87                 case KEY_2: return eRCInput::RC_2;
88                 case KEY_3: return eRCInput::RC_3;
89                 case KEY_4: return eRCInput::RC_4;
90                 case KEY_5: return eRCInput::RC_5;
91                 case KEY_6: return eRCInput::RC_6;
92                 case KEY_7: return eRCInput::RC_7;
93                 case KEY_8: return eRCInput::RC_8;
94                 case KEY_9: return eRCInput::RC_9;
95                 case KEY_RIGHT: return eRCInput::RC_RIGHT;
96                 case KEY_LEFT: return eRCInput::RC_LEFT;
97                 case KEY_UP: return eRCInput::RC_UP;
98                 case KEY_DOWN: return eRCInput::RC_DOWN;
99                 case KEY_OK: return eRCInput::RC_OK;
100                 case KEY_MUTE: return eRCInput::RC_MUTE;
101                 case KEY_POWER: return eRCInput::RC_STANDBY;
102                 case KEY_GREEN: return eRCInput::RC_GREEN;
103                 case KEY_YELLOW: return eRCInput::RC_YELLOW;
104                 case KEY_RED: return eRCInput::RC_RED;
105                 case KEY_VOLUMEUP: return eRCInput::RC_PLUS;
106                 case KEY_BLUE: return eRCInput::RC_BLUE;
107                 case KEY_VOLUMEDOWN: return eRCInput::RC_MINUS;
108                 case KEY_HELP: return eRCInput::RC_HELP;
109                 case KEY_SETUP: return eRCInput::RC_DBOX;
110                 case KEY_HOME: return eRCInput::RC_HOME;
111         }
112         return -1;
113 }
114
115
116 class eInputDeviceInit
117 {
118         eRCInputEventDriver driver;
119         eRCDeviceInputDev deviceInputDev;
120 public:
121         eInputDeviceInit(): driver("/dev/input/event0"), deviceInputDev(&driver)
122         {
123         }
124 };
125
126 eAutoInitP0<eInputDeviceInit> init_rcinputdev(eAutoInitNumbers::rc+1, "input device driver");