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
16 static char g_SmallAlphaMap[] = " -= qwertyuiop asdfghjkl;\' zxcvbnm,./";
17 static char g_LargeAlphaMap[] = " !@# % &*()_+ QWERTYUIOP ASDFGHJKL:\" ZXCVBNM<>?";
19 #include <lib/driver/rcconsole.h>
20 extern eRCConsole* g_ConsoleDevice;
21 static char* g_pMap = g_SmallAlphaMap;
22 inline char getAsciiCode(unsigned int code)
32 if(g_pMap[code] == ' ')
38 #endif /*VUPLUS_USE_RCKBD*/
40 void eRCDeviceInputDev::handleCode(long rccode)
42 struct input_event *ev = (struct input_event *)rccode;
46 // eDebug("%x %x %x", ev->value, ev->code, ev->type);
51 int km = iskeyboard ? input->getKeyboardMode() : eRCInput::kmNone;
53 // eDebug("keyboard mode %d", km);
55 if (km == eRCInput::kmAll)
58 if (km == eRCInput::kmAscii)
60 // eDebug("filtering.. %d", ev->code);
61 bool filtered = ( ev->code > 0 && ev->code < 61 );
85 #ifdef VUPLUS_USE_RCKBD
88 char code = getAsciiCode(ev->code);
89 //eDebug("getAsciiCode : [%d] [%c]", code, code);
93 if(ev->code == 42) { g_pMap = g_SmallAlphaMap; return; }
97 if(ev->code == 42) { g_pMap = g_LargeAlphaMap; return; }
100 g_ConsoleDevice->handleCode(code);
107 #endif /*VUPLUS_USE_RCKBD*/
112 /*emit*/ input->keyPressed(eRCKey(this, ev->code, eRCKey::flagBreak));
115 /*emit*/ input->keyPressed(eRCKey(this, ev->code, 0));
118 /*emit*/ input->keyPressed(eRCKey(this, ev->code, eRCKey::flagRepeat));
123 eRCDeviceInputDev::eRCDeviceInputDev(eRCInputEventDriver *driver)
124 :eRCDevice(driver->getDeviceName(), driver), iskeyboard(false)
126 if (strcasestr(id.c_str(), "keyboard") != NULL)
129 eDebug("Input device \"%s\" is %sa keyboard.", id.c_str(), iskeyboard ? "" : "not ");
132 void eRCDeviceInputDev::setExclusive(bool b)
135 driver->setExclusive(b);
138 const char *eRCDeviceInputDev::getDescription() const
143 class eInputDeviceInit
145 ePtrList<eRCInputEventDriver> m_drivers;
146 ePtrList<eRCDeviceInputDev> m_devices;
155 sprintf(filename, "/dev/input/event%d", i);
156 if (stat(filename, &s))
158 eRCInputEventDriver *p;
159 m_drivers.push_back(p = new eRCInputEventDriver(filename));
160 m_devices.push_back(new eRCDeviceInputDev(p));
163 eDebug("Found %d input devices!", i);
168 while (m_drivers.size())
170 delete m_devices.back();
171 m_devices.pop_back();
172 delete m_drivers.back();
173 m_drivers.pop_back();
178 eAutoInitP0<eInputDeviceInit> init_rcinputdev(eAutoInitNumbers::rc+1, "input device driver");