fix mutekey bug.
[vuplus_dvbapp] / lib / driver / rcinput.cpp
index 2659ddc..669d1c4 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 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 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: