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