add rc-keyboard on the vuultimo(us_de)
authorkos <kos@dev3>
Mon, 26 Dec 2011 06:10:41 +0000 (15:10 +0900)
committerkos <kos@dev3>
Mon, 26 Dec 2011 06:10:41 +0000 (15:10 +0900)
lib/driver/rcinput.cpp
lib/python/Components/config.py

index 2659ddc..b84f936 100644 (file)
 #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*/
 
@@ -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:
index 5507cae..b913882 100755 (executable)
@@ -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