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
60 case 176: // timer edit
64 case 370: // _subtitle selection
70 case 393: // =recorded files
75 case 402: // channel up
76 case 403: // channel down
83 #endif /*VUPLUS_USE_RCKBD*/
85 void eRCDeviceInputDev::handleCode(long rccode)
87 struct input_event *ev = (struct input_event *)rccode;
90 #ifdef VUPLUS_USE_RCKBD
91 //eDebug("value : %d, code : %d, type : %d, type : %s", ev->value, ev->code, ev->type, getType(ev->code)?"ASCII":"RC");
92 if(getType(ev->code) || special_key_mode)
97 if(ev->code == KEY_RALT || ev->code == KEY_LSHIFT || ev->code == KEY_LALT)
100 g_ConsoleDevice->handleCode(0);
104 if(ev->code == KEY_RALT || ev->code == KEY_LSHIFT || ev->code == KEY_LALT)
105 special_key_mode = 1;
106 g_ConsoleDevice->handleCode(ev->code);
112 #endif /*VUPLUS_USE_RCKBD*/
114 // eDebug("%x %x %x", ev->value, ev->code, ev->type);
115 int km = iskeyboard ? input->getKeyboardMode() : eRCInput::kmNone;
117 // eDebug("keyboard mode %d", km);
119 if (km == eRCInput::kmAll)
122 if (km == eRCInput::kmAscii)
124 // eDebug("filtering.. %d", ev->code);
125 bool filtered = ( ev->code > 0 && ev->code < 61 );
146 // eDebug("passed!");
152 /*emit*/ input->keyPressed(eRCKey(this, ev->code, eRCKey::flagBreak));
155 /*emit*/ input->keyPressed(eRCKey(this, ev->code, 0));
158 /*emit*/ input->keyPressed(eRCKey(this, ev->code, eRCKey::flagRepeat));
163 eRCDeviceInputDev::eRCDeviceInputDev(eRCInputEventDriver *driver)
164 :eRCDevice(driver->getDeviceName(), driver), iskeyboard(false)
166 if (strcasestr(id.c_str(), "keyboard") != NULL)
169 eDebug("Input device \"%s\" is %sa keyboard.", id.c_str(), iskeyboard ? "" : "not ");
172 void eRCDeviceInputDev::setExclusive(bool b)
175 driver->setExclusive(b);
178 const char *eRCDeviceInputDev::getDescription() const
183 class eInputDeviceInit
185 ePtrList<eRCInputEventDriver> m_drivers;
186 ePtrList<eRCDeviceInputDev> m_devices;
195 sprintf(filename, "/dev/input/event%d", i);
196 if (stat(filename, &s))
198 eRCInputEventDriver *p;
199 m_drivers.push_back(p = new eRCInputEventDriver(filename));
200 m_devices.push_back(new eRCDeviceInputDev(p));
203 eDebug("Found %d input devices!", i);
208 while (m_drivers.size())
210 delete m_devices.back();
211 m_devices.pop_back();
212 delete m_drivers.back();
213 m_drivers.pop_back();
218 eAutoInitP0<eInputDeviceInit> init_rcinputdev(eAutoInitNumbers::rc+1, "input device driver");