X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fdriver%2Frcinput.cpp;h=669d1c4ca5bd650b2162acc0a05428e706d91493;hp=58cc9afc888357ef0767d6312dcfd44279dd5497;hb=c694ef66a65139b788d08c7db1f26889cb7c9a37;hpb=22061f63b0ae2254d569b3c9f2d28f1add39ab1c diff --git a/lib/driver/rcinput.cpp b/lib/driver/rcinput.cpp index 58cc9af..669d1c4 100644 --- a/lib/driver/rcinput.cpp +++ b/lib/driver/rcinput.cpp @@ -11,12 +11,135 @@ #include #include -void eRCDeviceInputDev::handleCode(int rccode) +#ifdef VUPLUS_USE_RCKBD +#include +extern eRCConsole* g_ConsoleDevice; +#define CODE_RC 0 +#define CODE_ASCII 1 + +#define KEY_LALT 56 +#define KEY_RALT 100 +#define KEY_LSHIFT 42 +static int special_key_mode = 0; + +int getType(int code) +{ + switch(code) + { + case 2: // 1 + case 3: // 2 + case 4: // 3 + case 5: // 4 + case 6: // 5 + case 7: // 6 + case 8: // 7 + case 9: // 8 + case 10: // 9 + case 11: // 0 + case 14: // backspace + case 103: // up + case 105: // left + case 106: // right + case 108: // down + case 113: // mute + case 114: // volume down + case 115: // vulume up + case 116: // power + case 128: // stop + case 138: // help + case 139: // menu + case 163: // FF + case 164: // pause + case 165: // RF + case 167: // record + case 174: // exit + case 207: // play + case 352: // ok + case 358: // epg + case 370: // _subtitle selection + case 377: // tv + case 385: // radio + case 388: // =text + case 392: // audio + case 393: // =recorded files + case 398: // red + case 399: // green + case 400: // yellow + case 401: // blue + case 402: // channel up + case 403: // channel down + case 407: // > + case 412: // < + return CODE_RC; + } + return CODE_ASCII; +} +#endif /*VUPLUS_USE_RCKBD*/ + +void eRCDeviceInputDev::handleCode(long 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); +#ifdef VUPLUS_USE_RCKBD + //eDebug("value : %d, code : %d, type : %d, type : %s", ev->value, ev->code, ev->type, getType(ev->code)?"ASCII":"RC"); + if(getType(ev->code) || special_key_mode) + { + switch(ev->value) + { + case 0: + if(ev->code == KEY_RALT || ev->code == KEY_LSHIFT || ev->code == KEY_LALT) + { + special_key_mode = 0; + g_ConsoleDevice->handleCode(0); + } + break; + case 1: + if(ev->code == KEY_RALT || ev->code == KEY_LSHIFT || ev->code == KEY_LALT) + special_key_mode = 1; + g_ConsoleDevice->handleCode(ev->code); + break; + case 2: break; + } + return; + } +#endif /*VUPLUS_USE_RCKBD*/ + +// eDebug("%x %x %x", ev->value, ev->code, ev->type); + int km = iskeyboard ? input->getKeyboardMode() : eRCInput::kmNone; + +// eDebug("keyboard mode %d", km); + + if (km == eRCInput::kmAll) + return; + + if (km == eRCInput::kmAscii) + { +// eDebug("filtering.. %d", ev->code); + bool filtered = ( ev->code > 0 && ev->code < 61 ); + switch (ev->code) + { + case KEY_RESERVED: + case KEY_ESC: + case KEY_TAB: + case KEY_BACKSPACE: + case KEY_ENTER: + case KEY_LEFTCTRL: + case KEY_RIGHTSHIFT: + case KEY_LEFTALT: + case KEY_CAPSLOCK: + case KEY_INSERT: + case KEY_DELETE: + case KEY_MUTE: + filtered=false; + default: + break; + } + if (filtered) + return; +// eDebug("passed!"); + } + switch (ev->value) { case 0: @@ -31,90 +154,26 @@ void eRCDeviceInputDev::handleCode(int rccode) } } -eRCDeviceInputDev::eRCDeviceInputDev(eRCInputEventDriver *driver): eRCDevice(driver->getDeviceName(), driver) -{ -} - -const char *eRCDeviceInputDev::getDescription() const +eRCDeviceInputDev::eRCDeviceInputDev(eRCInputEventDriver *driver) + :eRCDevice(driver->getDeviceName(), driver), iskeyboard(false) { - return id.c_str(); + if (strcasestr(id.c_str(), "keyboard") != NULL) + iskeyboard = true; + setExclusive(true); + eDebug("Input device \"%s\" is %sa keyboard.", id.c_str(), iskeyboard ? "" : "not "); } -const char *eRCDeviceInputDev::getKeyDescription(const eRCKey &key) const +void eRCDeviceInputDev::setExclusive(bool b) { - switch (key.code) - { - case KEY_0: return "0"; - case KEY_1: return "1"; - case KEY_2: return "2"; - case KEY_3: return "3"; - case KEY_4: return "4"; - case KEY_5: return "5"; - case KEY_6: return "6"; - case KEY_7: return "7"; - case KEY_8: return "8"; - case KEY_9: return "9"; - case KEY_RIGHT: return "rechts"; - case KEY_LEFT: return "links"; - case KEY_UP: return "oben"; - case KEY_DOWN: return "unten"; - case KEY_OK: return "ok"; - case KEY_MUTE: return "mute"; - case KEY_POWER: return "power"; - case KEY_GREEN: return "gruen"; - case KEY_YELLOW: return "gelb"; - case KEY_RED: return "rot"; - case KEY_BLUE: return "blau"; - case KEY_VOLUMEUP: return "Lautstaerke plus"; - case KEY_VOLUMEDOWN: return "Lautstaerke minus"; - case KEY_HELP: return "?"; - case KEY_SETUP: return "d-Box"; -#if 0 - case KEY_TOPLEFT: return "oben links"; - case KEY_TOPRIGHT: return "oben rechts"; - case KEY_BOTTOMLEFT: return "unten links"; - case KEY_BOTTOMRIGHT: return "unten rechts"; -#endif - case KEY_HOME: return "home"; - default: return 0; - } + if (!iskeyboard) + driver->setExclusive(b); } -int eRCDeviceInputDev::getKeyCompatibleCode(const eRCKey &key) const +const char *eRCDeviceInputDev::getDescription() const { - switch (key.code) - { - case KEY_0: return eRCInput::RC_0; - case KEY_1: return eRCInput::RC_1; - case KEY_2: return eRCInput::RC_2; - case KEY_3: return eRCInput::RC_3; - case KEY_4: return eRCInput::RC_4; - case KEY_5: return eRCInput::RC_5; - case KEY_6: return eRCInput::RC_6; - case KEY_7: return eRCInput::RC_7; - case KEY_8: return eRCInput::RC_8; - case KEY_9: return eRCInput::RC_9; - case KEY_RIGHT: return eRCInput::RC_RIGHT; - case KEY_LEFT: return eRCInput::RC_LEFT; - case KEY_UP: return eRCInput::RC_UP; - case KEY_DOWN: return eRCInput::RC_DOWN; - case KEY_OK: return eRCInput::RC_OK; - case KEY_MUTE: return eRCInput::RC_MUTE; - case KEY_POWER: return eRCInput::RC_STANDBY; - case KEY_GREEN: return eRCInput::RC_GREEN; - case KEY_YELLOW: return eRCInput::RC_YELLOW; - case KEY_RED: return eRCInput::RC_RED; - case KEY_VOLUMEUP: return eRCInput::RC_PLUS; - case KEY_BLUE: return eRCInput::RC_BLUE; - case KEY_VOLUMEDOWN: return eRCInput::RC_MINUS; - case KEY_HELP: return eRCInput::RC_HELP; - case KEY_SETUP: return eRCInput::RC_DBOX; - case KEY_HOME: return eRCInput::RC_HOME; - } - return -1; + return id.c_str(); } - class eInputDeviceInit { ePtrList m_drivers;