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;
47 case 114: // volume down
48 case 115: // vulume up
61 case 370: // _subtitle selection
66 case 393: // =recorded files
71 case 402: // channel up
72 case 403: // channel down
79 #endif /*VUPLUS_USE_RCKBD*/
81 void eRCDeviceInputDev::handleCode(long rccode)
83 struct input_event *ev = (struct input_event *)rccode;
86 #ifdef VUPLUS_USE_RCKBD
87 //eDebug("value : %d, code : %d, type : %d, type : %s", ev->value, ev->code, ev->type, getType(ev->code)?"ASCII":"RC");
88 if(getType(ev->code) || special_key_mode)
93 if(ev->code == KEY_RALT || ev->code == KEY_LSHIFT || ev->code == KEY_LALT)
96 g_ConsoleDevice->handleCode(0);
100 if(ev->code == KEY_RALT || ev->code == KEY_LSHIFT || ev->code == KEY_LALT)
101 special_key_mode = 1;
102 g_ConsoleDevice->handleCode(ev->code);
108 #endif /*VUPLUS_USE_RCKBD*/
110 // eDebug("%x %x %x", ev->value, ev->code, ev->type);
111 int km = iskeyboard ? input->getKeyboardMode() : eRCInput::kmNone;
113 // eDebug("keyboard mode %d", km);
115 if (km == eRCInput::kmAll)
118 if (km == eRCInput::kmAscii)
120 // eDebug("filtering.. %d", ev->code);
121 bool filtered = ( ev->code > 0 && ev->code < 61 );
142 // eDebug("passed!");
148 /*emit*/ input->keyPressed(eRCKey(this, ev->code, eRCKey::flagBreak));
151 /*emit*/ input->keyPressed(eRCKey(this, ev->code, 0));
154 /*emit*/ input->keyPressed(eRCKey(this, ev->code, eRCKey::flagRepeat));
159 eRCDeviceInputDev::eRCDeviceInputDev(eRCInputEventDriver *driver)
160 :eRCDevice(driver->getDeviceName(), driver), iskeyboard(false)
162 if (strcasestr(id.c_str(), "keyboard") != NULL)
165 eDebug("Input device \"%s\" is %sa keyboard.", id.c_str(), iskeyboard ? "" : "not ");
168 void eRCDeviceInputDev::setExclusive(bool b)
171 driver->setExclusive(b);
174 const char *eRCDeviceInputDev::getDescription() const
179 class eInputDeviceInit
181 ePtrList<eRCInputEventDriver> m_drivers;
182 ePtrList<eRCDeviceInputDev> m_devices;
191 sprintf(filename, "/dev/input/event%d", i);
192 if (stat(filename, &s))
194 eRCInputEventDriver *p;
195 m_drivers.push_back(p = new eRCInputEventDriver(filename));
196 m_devices.push_back(new eRCDeviceInputDev(p));
199 eDebug("Found %d input devices!", i);
204 while (m_drivers.size())
206 delete m_devices.back();
207 m_devices.pop_back();
208 delete m_drivers.back();
209 m_drivers.pop_back();
214 eAutoInitP0<eInputDeviceInit> init_rcinputdev(eAutoInitNumbers::rc+1, "input device driver");