1 #include <lib/driver/rcinput.h>
3 #include <lib/base/eerror.h>
6 #include <linux/input.h>
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>
14 #ifdef VUPLUS_USE_RCKBD
15 #include <lib/driver/rcconsole.h>
16 extern eRCConsole* g_ConsoleDevice;
23 static int special_key_mode = 0;
44 case 114: // volume down
45 case 115: // vulume up
59 case 370: // _subtitle selection
64 case 393: // =recorded files
69 case 402: // channel up
70 case 403: // channel down
77 #endif /*VUPLUS_USE_RCKBD*/
79 void eRCDeviceInputDev::handleCode(long rccode)
81 struct input_event *ev = (struct input_event *)rccode;
84 #ifdef VUPLUS_USE_RCKBD
85 //eDebug("value : %d, code : %d, type : %d, type : %s", ev->value, ev->code, ev->type, getType(ev->code)?"ASCII":"RC");
86 if(getType(ev->code) || special_key_mode)
91 if(ev->code == KEY_RALT || ev->code == KEY_LSHIFT || ev->code == KEY_LALT)
94 g_ConsoleDevice->handleCode(0);
98 if(ev->code == KEY_RALT || ev->code == KEY_LSHIFT || ev->code == KEY_LALT)
100 g_ConsoleDevice->handleCode(ev->code);
106 #endif /*VUPLUS_USE_RCKBD*/
108 // eDebug("%x %x %x", ev->value, ev->code, ev->type);
109 int km = iskeyboard ? input->getKeyboardMode() : eRCInput::kmNone;
111 // eDebug("keyboard mode %d", km);
113 if (km == eRCInput::kmAll)
116 if (km == eRCInput::kmAscii)
118 // eDebug("filtering.. %d", ev->code);
119 bool filtered = ( ev->code > 0 && ev->code < 61 );
140 // eDebug("passed!");
146 /*emit*/ input->keyPressed(eRCKey(this, ev->code, eRCKey::flagBreak));
149 /*emit*/ input->keyPressed(eRCKey(this, ev->code, 0));
152 /*emit*/ input->keyPressed(eRCKey(this, ev->code, eRCKey::flagRepeat));
157 eRCDeviceInputDev::eRCDeviceInputDev(eRCInputEventDriver *driver)
158 :eRCDevice(driver->getDeviceName(), driver), iskeyboard(false)
160 if (strcasestr(id.c_str(), "keyboard") != NULL)
163 eDebug("Input device \"%s\" is %sa keyboard.", id.c_str(), iskeyboard ? "" : "not ");
166 void eRCDeviceInputDev::setExclusive(bool b)
169 driver->setExclusive(b);
172 const char *eRCDeviceInputDev::getDescription() const
177 class eInputDeviceInit
179 ePtrList<eRCInputEventDriver> m_drivers;
180 ePtrList<eRCDeviceInputDev> m_devices;
189 sprintf(filename, "/dev/input/event%d", i);
190 if (stat(filename, &s))
192 eRCInputEventDriver *p;
193 m_drivers.push_back(p = new eRCInputEventDriver(filename));
194 m_devices.push_back(new eRCDeviceInputDev(p));
197 eDebug("Found %d input devices!", i);
202 while (m_drivers.size())
204 delete m_devices.back();
205 m_devices.pop_back();
206 delete m_drivers.back();
207 m_drivers.pop_back();
212 eAutoInitP0<eInputDeviceInit> init_rcinputdev(eAutoInitNumbers::rc+1, "input device driver");