X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fdriver%2Frcconsole.cpp;h=eb5aee3db7187cc99cc1c0108fee87f0fb657c38;hp=0c70244a6e942639875fa409facae84a02fa684d;hb=c437ed274b0155ecdeb7382d6ee46d67a53755b9;hpb=fce04ebed510a97e17f019a35c327dce78b6d916 diff --git a/lib/driver/rcconsole.cpp b/lib/driver/rcconsole.cpp index 0c70244..eb5aee3 100644 --- a/lib/driver/rcconsole.cpp +++ b/lib/driver/rcconsole.cpp @@ -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,22 +31,23 @@ 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=-1; int km = input->getKeyboardMode(); + if (km == eRCInput::kmNone) + return; + while (num--) { -// eDebug("console code %02x\n", *d++); +// eDebug("console code %08x\n", *d); if (km == eRCInput::kmAll) code = *d++; else @@ -67,20 +67,26 @@ void eRCConsoleDriver::keyPressed(int) if (code < 32) /* control characters */ code = -1; - if (code == 0x7F) /* delete */ - code = -1; + else switch(code) + { + 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) { // eDebug("ascii %08x", code); - (*i)->handleCode(/*0x8000|*/code); + (*i)->handleCode(code); } } } -void eRCConsole::handleCode(int code) +void eRCConsole::handleCode(long code) { input->keyPressed(eRCKey(this, code, eRCKey::flagAscii)); }