#include #include #include #include #include #include #include #include #include void eRCDeviceInputDev::handleCode(int rccode) { struct input_event *ev = (struct input_event *)rccode; if (ev->type!=EV_KEY) return; // eDebug("%x %x %x", ev->value, ev->code, ev->type); switch (ev->value) { case 0: /*emit*/ input->keyPressed(eRCKey(this, ev->code, eRCKey::flagBreak)); break; case 1: /*emit*/ input->keyPressed(eRCKey(this, ev->code, 0)); break; case 2: /*emit*/ input->keyPressed(eRCKey(this, ev->code, eRCKey::flagRepeat)); break; } } eRCDeviceInputDev::eRCDeviceInputDev(eRCInputEventDriver *driver): eRCDevice(driver->getDeviceName(), driver) { } const char *eRCDeviceInputDev::getDescription() const { return id.c_str(); } class eInputDeviceInit { ePtrList m_drivers; ePtrList m_devices; public: eInputDeviceInit() { int i = 0; while (1) { struct stat s; char filename[128]; sprintf(filename, "/dev/input/event%d", i); if (stat(filename, &s)) break; eRCInputEventDriver *p; m_drivers.push_back(p = new eRCInputEventDriver(filename)); m_devices.push_back(new eRCDeviceInputDev(p)); ++i; } eDebug("Found %d input devices!", i); } ~eInputDeviceInit() { while (m_drivers.size()) { delete m_devices.back(); m_devices.pop_back(); delete m_drivers.back(); m_drivers.pop_back(); } } }; eAutoInitP0 init_rcinputdev(eAutoInitNumbers::rc+1, "input device driver");