#include <lib/driver/input_fake.h>
#ifdef VUPLUS_USE_RCKBD
-// / / / / / /
-static char g_SmallAlphaMap[] = " -= qwertyuiop asdfghjkl;\' zxcvbnm,./";
-static char g_LargeAlphaMap[] = " !@# % &*()_+ QWERTYUIOP ASDFGHJKL:\" ZXCVBNM<>?";
-
#include <lib/driver/rcconsole.h>
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*/
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);
// 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:
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):
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