X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/6a88cbc2bfa43b2a18eb896b3d635622da7e9d0a..7265acc377e49beaed3f3c43f36267c9fced53e7:/lib/driver/rcconsole.cpp diff --git a/lib/driver/rcconsole.cpp b/lib/driver/rcconsole.cpp index eae3a7a5..7a625ffc 100644 --- a/lib/driver/rcconsole.cpp +++ b/lib/driver/rcconsole.cpp @@ -38,11 +38,11 @@ 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; - + int code=-1; + int km = input->getKeyboardMode(); if (km == eRCInput::kmNone) @@ -50,41 +50,49 @@ void eRCConsoleDriver::keyPressed(int) while (num--) { +// eDebug("console code %08x\n", *d); if (km == eRCInput::kmAll) code = *d++; else { if (*d == 27) // escape code { - /* skip all this stuff */ - return; - -/* while (num) + while (num) { num--; if (*++d != '[') break; } - code = -1; */ + code = -1; } 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; + } } if (code != -1) for (std::list::iterator i(listeners.begin()); i!=listeners.end(); ++i) - (*i)->handleCode(code | 0x8000); + { +// eDebug("ascii %08x", code); + (*i)->handleCode(code); + } } } void eRCConsole::handleCode(int code) { - input->keyPressed(eRCKey(this, code, 0)); + input->keyPressed(eRCKey(this, code, eRCKey::flagAscii)); } eRCConsole::eRCConsole(eRCDriver *driver) @@ -112,7 +120,7 @@ class eRCConsoleInit eRCConsoleDriver driver; eRCConsole device; public: - eRCConsoleInit(): driver("/dev/stdin"), device(&driver) + eRCConsoleInit(): driver("/dev/vc/0"), device(&driver) { } };