git.cweiske.de
/
enigma2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge remote branch 'remotes/origin/acid-burn/bug_629_show_autofs_volumes_as_backuplo...
[enigma2.git]
/
lib
/
driver
/
rcconsole.cpp
diff --git
a/lib/driver/rcconsole.cpp
b/lib/driver/rcconsole.cpp
index 0c70244a6e942639875fa409facae84a02fa684d..97a6e7c7c22354fcc9c0ac308541b0954caf67bc 100644
(file)
--- a/
lib/driver/rcconsole.cpp
+++ b/
lib/driver/rcconsole.cpp
@@
-5,7
+5,7
@@
#include <stdio.h>
#include <fcntl.h>
#include <stdio.h>
#include <fcntl.h>
-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)
{
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=0;
} else
{
- sn=
new eSocketNotifier
(eApp, handle, eSocketNotifier::Read);
+ sn=
eSocketNotifier::create
(eApp, handle, eSocketNotifier::Read);
CONNECT(sn->activated, eRCConsoleDriver::keyPressed);
CONNECT(sn->activated, eRCConsoleDriver::keyPressed);
- eRCInput::getInstance()->setFile(handle);
}
/* set console mode */
}
/* set console mode */
@@
-32,55
+31,49
@@
eRCConsoleDriver::~eRCConsoleDriver()
tcsetattr(handle,TCSANOW, &ot);
if (handle>=0)
close(handle);
tcsetattr(handle,TCSANOW, &ot);
if (handle>=0)
close(handle);
- if (sn)
- delete sn;
}
void eRCConsoleDriver::keyPressed(int)
{
}
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 num = read(handle, data, 16);
-
int code=-1
;
+
unsigned char code
;
int km = input->getKeyboardMode();
int km = input->getKeyboardMode();
+ if (km == eRCInput::kmNone)
+ return;
+
while (num--)
{
while (num--)
{
-// eDebug("console code %02x\n", *d++);
- if (km == eRCInput::kmAll)
- code = *d++;
- else
- {
- if (*d == 27) // escape code
- {
- while (num)
- {
- num--;
- if (*++d != '[')
- break;
- }
- code = -1;
- } else
- code = *d;
- ++d;
+ code = *d++;
+// eDebug("console code %02x\n", code);
+ if (km == eRCInput::kmAscii) {
+ if (m_escape) {
+ if (code != '[')
+ m_escape = false;
+ continue;
+ }
+
+ if (code == 27) // escape code
+ m_escape = true;
- if (
code < 32) /* control characters */
- code = -1;
- if (code == 0x7F) /* delete */
- co
de = -1
;
+ if (
(code < 32) || // control characters
+ (code == 0x7e) || // mute, einfg, entf
+ (code == 0x7f)) // backspace
+ co
ntinue
;
}
}
- if (code != -1)
- for (std::list<eRCDevice*>::iterator i(listeners.begin()); i!=listeners.end(); ++i)
- {
-// eDebug("ascii %08x", code);
- (*i)->handleCode(/*0x8000|*/code);
- }
+ for (std::list<eRCDevice*>::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, eRCKey::flagAscii));
}
{
input->keyPressed(eRCKey(this, code, eRCKey::flagAscii));
}