X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fdriver%2Frcconsole.cpp;h=77f432273551f7e7c7ecd68dce6f999615da519e;hp=eae3a7a550b92be9288509376a8014ee67706dc5;hb=82606cdc060c9c8c6f3f5d6909623f6eafe9076c;hpb=6a88cbc2bfa43b2a18eb896b3d635622da7e9d0a diff --git a/lib/driver/rcconsole.cpp b/lib/driver/rcconsole.cpp index eae3a7a..77f4322 100644 --- a/lib/driver/rcconsole.cpp +++ b/lib/driver/rcconsole.cpp @@ -5,7 +5,7 @@ #include #include -eRCConsoleDriver::eRCConsoleDriver(const char *filename): eRCDriver(eRCInput::getInstance()) +eRCConsoleDriver::eRCConsoleDriver(const char *filename): eRCDriver(eRCInput::getInstance()), m_escape(false) { handle=open(filename, O_RDONLY|O_NONBLOCK); if (handle<0) @@ -14,9 +14,8 @@ eRCConsoleDriver::eRCConsoleDriver(const char *filename): eRCDriver(eRCInput::ge sn=0; } else { - sn=new eSocketNotifier(eApp, handle, eSocketNotifier::Read); + sn=eSocketNotifier::create(eApp, handle, eSocketNotifier::Read); CONNECT(sn->activated, eRCConsoleDriver::keyPressed); - eRCInput::getInstance()->setFile(handle); } /* set console mode */ @@ -32,17 +31,15 @@ eRCConsoleDriver::~eRCConsoleDriver() tcsetattr(handle,TCSANOW, &ot); if (handle>=0) close(handle); - if (sn) - delete sn; } 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; - + unsigned char code; + int km = input->getKeyboardMode(); if (km == eRCInput::kmNone) @@ -50,41 +47,35 @@ void eRCConsoleDriver::keyPressed(int) while (num--) { - if (km == eRCInput::kmAll) - code = *d++; - else - { - if (*d == 27) // escape code - { - /* skip all this stuff */ - return; + code = *d++; +// eDebug("console code %02x\n", code); + if (km == eRCInput::kmAscii) { + if (m_escape) { + if (code != '[') + m_escape = false; + continue; + } -/* while (num) - { - num--; - if (*++d != '[') - break; - } - code = -1; */ - } else - code = *d; - ++d; - - if (code < 32) /* control characters */ - code = -1; - if (code == 0x7F) /* delete */ - code = -1; + if (code == 27) // escape code + m_escape = true; + + if ((code < 32) || // control characters + (code == 0x7e) || // mute, einfg, entf + (code == 0x7f)) // backspace + continue; } - if (code != -1) - for (std::list::iterator i(listeners.begin()); i!=listeners.end(); ++i) - (*i)->handleCode(code | 0x8000); + for (std::list::iterator i(listeners.begin()); i!=listeners.end(); ++i) + { +// eDebug("ascii %02x", 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) @@ -112,7 +103,7 @@ class eRCConsoleInit eRCConsoleDriver driver; eRCConsole device; public: - eRCConsoleInit(): driver("/dev/stdin"), device(&driver) + eRCConsoleInit(): driver("/dev/tty0"), device(&driver) { } };