2 #include <lib/driver/rcinput.h>
7 #include <lib/base/ebase.h>
8 #include <lib/system/init.h>
9 #include <lib/system/init_num.h>
10 #include <lib/driver/input_fake.h>
12 void eRCDeviceInputDev::handleCode(int rccode
)
14 struct input_event
*ev
= (struct input_event
*)rccode
;
19 int km
= iskeyboard
? input
->getKeyboardMode() : eRCInput::kmNone
;
21 if (km
== eRCInput::kmAll
)
24 if (km
== eRCInput::kmAscii
)
26 // eDebug("filtering.. %d", ev->code);
27 bool filtered
= ( ev
->code
> 0 && ev
->code
< 61 );
53 /*emit*/ input
->keyPressed(eRCKey(this, ev
->code
, eRCKey::flagBreak
));
56 memcpy(&cur
, ev
, sizeof(struct input_event
) );
58 repeattimer
.start(eRCInput::getInstance()->config
.rdelay
, 1);
59 /*emit*/ input
->keyPressed(eRCKey(this, ev
->code
, 0));
63 /*emit*/ input
->keyPressed(eRCKey(this, ev
->code
, eRCKey::flagRepeat
));
68 void eRCDeviceInputDev::repeat()
70 /* emit */ input
->keyPressed(eRCKey(this, cur
.code
, eRCKey::flagRepeat
));
71 repeattimer
.start(eRCInput::getInstance()->config
.rrate
, 1);
74 eRCDeviceInputDev::eRCDeviceInputDev(eRCInputEventDriver
*driver
)
75 : eRCDevice(driver
->getDeviceName(), driver
), repeattimer(eApp
)
79 iskeyboard
= !!strstr(tmp
.c_str(), "KEYBOARD");
80 eDebug("Input device \"%s\" is %sa keyboard.", id
.c_str(), iskeyboard
? "" : "not ");
81 CONNECT( repeattimer
.timeout
, eRCDeviceInputDev::repeat
);
84 const char *eRCDeviceInputDev::getDescription() const
89 const char *eRCDeviceInputDev::getKeyDescription(const eRCKey
&key
) const
93 case KEY_0
: return "0";
94 case KEY_1
: return "1";
95 case KEY_2
: return "2";
96 case KEY_3
: return "3";
97 case KEY_4
: return "4";
98 case KEY_5
: return "5";
99 case KEY_6
: return "6";
100 case KEY_7
: return "7";
101 case KEY_8
: return "8";
102 case KEY_9
: return "9";
103 case KEY_RIGHT
: return "rechts";
104 case KEY_LEFT
: return "links";
105 case KEY_UP
: return "oben";
106 case KEY_DOWN
: return "unten";
107 case KEY_OK
: return "ok";
108 case KEY_MUTE
: return "mute";
109 case KEY_POWER
: return "power";
110 case KEY_GREEN
: return "gruen";
111 case KEY_YELLOW
: return "gelb";
112 case KEY_RED
: return "rot";
113 case KEY_BLUE
: return "blau";
114 case KEY_VOLUMEUP
: return "Lautstaerke plus";
115 case KEY_VOLUMEDOWN
: return "Lautstaerke minus";
116 case KEY_HELP
: return "?";
117 case KEY_SETUP
: return "d-Box";
119 case KEY_TOPLEFT
: return "oben links";
120 case KEY_TOPRIGHT
: return "oben rechts";
121 case KEY_BOTTOMLEFT
: return "unten links";
122 case KEY_BOTTOMRIGHT
: return "unten rechts";
124 case KEY_HOME
: return "home";
129 int eRCDeviceInputDev::getKeyCompatibleCode(const eRCKey
&key
) const
134 class eInputDeviceInit
136 ePtrList
<eRCInputEventDriver
> m_drivers
;
137 ePtrList
<eRCDeviceInputDev
> m_devices
;
146 sprintf(filename
, "/dev/input/event%d", i
);
147 if (stat(filename
, &s
))
149 eRCInputEventDriver
*p
;
150 m_drivers
.push_back(p
= new eRCInputEventDriver(filename
));
151 m_devices
.push_back(new eRCDeviceInputDev(p
));
154 eDebug("Found %d input devices!", i
);
159 while (m_drivers
.size())
161 delete m_devices
.back();
162 m_devices
.pop_back();
163 delete m_drivers
.back();
164 m_drivers
.pop_back();
169 eAutoInitP0
<eInputDeviceInit
> init_rcinputdev(eAutoInitNumbers::rc
+1, "input device driver");