fix possible crash on task abort and work with new getCD return value
[enigma2.git] / lib / driver / rcconsole.cpp
index 98ebed4f486e4fb55fc8b64a10a48dad91c0b5e2..53630ca96502c7dcc3335935870e76ab3264da13 100644 (file)
@@ -38,23 +38,21 @@ eRCConsoleDriver::~eRCConsoleDriver()
 
 void eRCConsoleDriver::keyPressed(int)
 {
-       char data[16];
-       char *d = data;
+       unsigned char data[16];
+       unsigned char *d = data;
        int num = read(handle, data, 16);
-       int code;
-#if 0  
+       int code=-1;
+       
        int km = input->getKeyboardMode();
 
        if (km == eRCInput::kmNone)
                return;
-#endif
+
        while (num--)
        {
-#if 0
+//             eDebug("console code %08x\n", *d);
                if (km == eRCInput::kmAll)
-#endif
                        code = *d++;
-#if 0
                else
                {
                        if (*d == 27) // escape code
@@ -69,22 +67,32 @@ void eRCConsoleDriver::keyPressed(int)
                        } else
                                code = *d;
                        ++d;
-                       
+
                        if (code < 32)                  /* control characters */
                                code = -1;
-                       if (code == 0x7F)               /* delete */
-                               code = -1;
+                       else switch(code)
+                       {
+                       case 0x35:  // mute
+                       case 0x7E:  // mute, einfg, entf
+                       case 0x7F:  // backspace
+                       code = -1;
+                       default:
+                               break;
+                       }
                }
-#endif
+
                if (code != -1)
                        for (std::list<eRCDevice*>::iterator i(listeners.begin()); i!=listeners.end(); ++i)
-                               (*i)->handleCode(code | 0x8000);
+                       {
+//                             eDebug("ascii %08x", code);
+                               (*i)->handleCode(code);
+                       }
        }
 }
 
-void eRCConsole::handleCode(int code)
+void eRCConsole::handleCode(long code)
 {
-       input->keyPressed(eRCKey(this, code, 0));
+       input->keyPressed(eRCKey(this, code, eRCKey::flagAscii));
 }
 
 eRCConsole::eRCConsole(eRCDriver *driver)
@@ -104,7 +112,7 @@ const char *eRCConsole::getKeyDescription(const eRCKey &key) const
 
 int eRCConsole::getKeyCompatibleCode(const eRCKey &key) const
 {
-       return key.code; // | KEY_ASCII;
+       return key.code;
 }
 
 class eRCConsoleInit
@@ -112,7 +120,7 @@ class eRCConsoleInit
        eRCConsoleDriver driver;
        eRCConsole device;
 public:
-       eRCConsoleInit(): driver("/dev/stdin"), device(&driver)
+       eRCConsoleInit(): driver("/dev/vc/0"), device(&driver)
        {
        }
 };