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
63 case 370: // _subtitle selection
68 case 393: // =recorded files
73 case 402: // channel up
74 case 403: // channel down
81 #endif /*VUPLUS_USE_RCKBD*/
83 void eRCDeviceInputDev::handleCode(long rccode)
85 struct input_event *ev = (struct input_event *)rccode;
88 #ifdef VUPLUS_USE_RCKBD
89 //eDebug("value : %d, code : %d, type : %d, type : %s", ev->value, ev->code, ev->type, getType(ev->code)?"ASCII":"RC");
90 if(getType(ev->code) || special_key_mode)
95 if(ev->code == KEY_RALT || ev->code == KEY_LSHIFT || ev->code == KEY_LALT)
98 g_ConsoleDevice->handleCode(0);
102 if(ev->code == KEY_RALT || ev->code == KEY_LSHIFT || ev->code == KEY_LALT)
103 special_key_mode = 1;
104 g_ConsoleDevice->handleCode(ev->code);
110 #endif /*VUPLUS_USE_RCKBD*/
112 // eDebug("%x %x %x", ev->value, ev->code, ev->type);
113 int km = iskeyboard ? input->getKeyboardMode() : eRCInput::kmNone;
115 // eDebug("keyboard mode %d", km);
117 if (km == eRCInput::kmAll)
120 if (km == eRCInput::kmAscii)
122 // eDebug("filtering.. %d", ev->code);
123 bool filtered = ( ev->code > 0 && ev->code < 61 );
144 // eDebug("passed!");
150 /*emit*/ input->keyPressed(eRCKey(this, ev->code, eRCKey::flagBreak));
153 /*emit*/ input->keyPressed(eRCKey(this, ev->code, 0));
156 /*emit*/ input->keyPressed(eRCKey(this, ev->code, eRCKey::flagRepeat));
161 eRCDeviceInputDev::eRCDeviceInputDev(eRCInputEventDriver *driver)
162 :eRCDevice(driver->getDeviceName(), driver), iskeyboard(false)
164 if (strcasestr(id.c_str(), "keyboard") != NULL)
167 eDebug("Input device \"%s\" is %sa keyboard.", id.c_str(), iskeyboard ? "" : "not ");
170 void eRCDeviceInputDev::setExclusive(bool b)
173 driver->setExclusive(b);
176 const char *eRCDeviceInputDev::getDescription() const
181 class eInputDeviceInit
183 ePtrList<eRCInputEventDriver> m_drivers;
184 ePtrList<eRCDeviceInputDev> m_devices;
193 sprintf(filename, "/dev/input/event%d", i);
194 if (stat(filename, &s))
196 eRCInputEventDriver *p;
197 m_drivers.push_back(p = new eRCInputEventDriver(filename));
198 m_devices.push_back(new eRCDeviceInputDev(p));
201 eDebug("Found %d input devices!", i);
206 while (m_drivers.size())
208 delete m_devices.back();
209 m_devices.pop_back();
210 delete m_drivers.back();
211 m_drivers.pop_back();
216 eAutoInitP0<eInputDeviceInit> init_rcinputdev(eAutoInitNumbers::rc+1, "input device driver");