From 7bb93199aef8e8c35f8edce76c91352ecf628a60 Mon Sep 17 00:00:00 2001 From: kos Date: Mon, 26 Dec 2011 15:10:41 +0900 Subject: [PATCH] add rc-keyboard on the vuultimo(us_de) --- lib/driver/rcinput.cpp | 122 +++++++++++++++++++++++++--------------- lib/python/Components/config.py | 91 +++++++++++++++++++++++++++++- 2 files changed, 167 insertions(+), 46 deletions(-) diff --git a/lib/driver/rcinput.cpp b/lib/driver/rcinput.cpp index 2659ddc..b84f936 100644 --- a/lib/driver/rcinput.cpp +++ b/lib/driver/rcinput.cpp @@ -12,28 +12,67 @@ #include #ifdef VUPLUS_USE_RCKBD -// / / / / / / -static char g_SmallAlphaMap[] = " -= qwertyuiop asdfghjkl;\' zxcvbnm,./"; -static char g_LargeAlphaMap[] = " !@# % &*()_+ QWERTYUIOP ASDFGHJKL:\" ZXCVBNM<>?"; - #include extern eRCConsole* g_ConsoleDevice; -static char* g_pMap = g_SmallAlphaMap; -inline char getAsciiCode(unsigned int code) +#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 57: return ' '; - case 43: return '\\'; - } - - if(code<54) - { - if(g_pMap[code] == ' ') - return 0; - return g_pMap[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 114: // volume down + case 115: // vulume up + case 116: // power + case 128: // stop + case 133: // mute + 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 0; + return CODE_ASCII; } #endif /*VUPLUS_USE_RCKBD*/ @@ -42,12 +81,31 @@ 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); - - if (ev->type!=EV_KEY) +#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); @@ -82,30 +140,6 @@ void eRCDeviceInputDev::handleCode(long rccode) // eDebug("passed!"); } -#ifdef VUPLUS_USE_RCKBD - if(g_ConsoleDevice) - { - char code = getAsciiCode(ev->code); - //eDebug("getAsciiCode : [%d] [%c]", code, code); - switch(ev->value) - { - case 0: - if(ev->code == 42) { g_pMap = g_SmallAlphaMap; return; } - if(code) return; - case 1: - { - if(ev->code == 42) { g_pMap = g_LargeAlphaMap; return; } - if(code) - { - g_ConsoleDevice->handleCode(code); - return; - } - } - break; - } - } -#endif /*VUPLUS_USE_RCKBD*/ - switch (ev->value) { case 0: diff --git a/lib/python/Components/config.py b/lib/python/Components/config.py index 5507cae..b913882 100755 --- a/lib/python/Components/config.py +++ b/lib/python/Components/config.py @@ -807,6 +807,89 @@ class ConfigFloat(ConfigSequence): float = property(getFloat) +#### vuplus +#Normal, LShift(42), RAlt(100), LShift+RAlt(100+42)/LArt(56) +vukeymap_us_de = { + "2":[u"1", u"!", None, None] + , "3":[u"2", u"@", None, None] + , "4":[u"3", u"#", None, '\xc2\xa3'] + , "5":[u"4", u"$", '\xc3\xa7', None] + , "6":[u"5", u"%", '\xc3\xbc', '\xe2\x82\xac'] + , "7":[u"6", u"^", '\xc3\xb6', None] + , "8":[u"7", u"&", '\xc3\xa4', None] + , "9":[u"8", u"*", '\xc3\xa0', None] + ,"10":[u"9", u"(", '\xc3\xa8', None] + ,"11":[u"0", u")", '\xc3\xa9', None] + ,"12":[u"-", u"_", None, None] + ,"13":[u"=", u"+", "~", None] + ,"16":[u"q", u"Q", None, None] + ,"17":[u"w", u"W", None, None] + ,"18":[u"e", u"E", '\xe2\x82\xac', None] + ,"19":[u"r", u"R", None, None] + ,"20":[u"t", u"T", None, None] + ,"21":[u"y", u"Y", None, None] + ,"22":[u"u", u"U", None, None] + ,"23":[u"i", u"I", None, None] + ,"24":[u"o", u"O", None, None] + ,"25":[u"p", u"P", None, None] + ,"26":[u"[", u"{", None, None] + ,"27":[u"]", u"}", None, None] + ,"30":[u"a", u"A", None, None] + ,"31":[u"s", u"S", '\xc3\x9f', None] + ,"32":[u"d", u"D", None, None] + ,"33":[u"f", u"F", None, None] + ,"34":[u"g", u"G", None, None] + ,"35":[u"h", u"H", None, None] + ,"36":[u"j", u"J", None, None] + ,"37":[u"k", u"K", None, None] + ,"38":[u"l", u"L", None, None] + ,"39":[u";", u":", None, None] + ,"40":[u"\'", u"\"", None, None] + ,"41":['\xc2\xa7', '\xc2\xb0', '\xc2\xac', None] + ,"43":[u"\\", u"|", None, None] + ,"44":[u"z", u"Z", None, u"<"] + ,"45":[u"x", u"X", None, u">"] + ,"46":[u"c", u"C", '\xc2\xa2', None] + ,"47":[u"v", u"V", None, None] + ,"48":[u"b", u"B", None, None] + ,"49":[u"n", u"N", None, None] + ,"50":[u"m", u"M", '\xc2\xb5', None] + ,"51":[u",", "<", None, None] + ,"52":[u".", ">", None, None] + ,"53":[u"/", u"?", None, None] +} +vumapidx = 0 +vukeymap = vukeymap_us_de +rckeyboard_enable = False +if file("/proc/stb/info/vumodel").read().strip() == "ultimo": + rckeyboard_enable = True + +def getCharValue(code): + global vumapidx + global vukeymap + global rckeyboard_enable + #print "code : %d, mapidx : %d"%(code, vumapidx) + if rckeyboard_enable: + if code == 0: + vumapidx = 0 + return None + elif code == 42: + vumapidx += 1 + return None + elif code == 56: + vumapidx += 3 + return None + elif code == 100: + vumapidx += 2 + return None + try: + return vukeymap[str(code)][vumapidx] + except: + return None + else: + return unichr(getPrevAsciiCode()) +#### vuplus + # an editable text... class ConfigText(ConfigElement, NumericalTextInput): def __init__(self, default = "", fixed_size = True, visible_width = False): @@ -915,8 +998,12 @@ class ConfigText(ConfigElement, NumericalTextInput): self.overwrite = not self.overwrite elif key == KEY_ASCII: self.timeout() - newChar = unichr(getPrevAsciiCode()) - if not self.useableChars or newChar in self.useableChars: + #### vuplus + #newChar = unichr(getPrevAsciiCode()) + #if not self.useableChars or newChar in self.useableChars: + newChar = getCharValue(getPrevAsciiCode()) + if (newChar is not None) and (not self.useableChars or newChar in self.useableChars): + #### vuplus if self.allmarked: self.deleteAllChars() self.allmarked = False -- 2.7.4