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