aboutsummaryrefslogtreecommitdiff
path: root/lib/driver
diff options
context:
space:
mode:
Diffstat (limited to 'lib/driver')
-rw-r--r--lib/driver/rcconsole.cpp57
-rw-r--r--lib/driver/rcconsole.h1
2 files changed, 23 insertions, 35 deletions
diff --git a/lib/driver/rcconsole.cpp b/lib/driver/rcconsole.cpp
index eb5aee3d..97a6e7c7 100644
--- a/lib/driver/rcconsole.cpp
+++ b/lib/driver/rcconsole.cpp
@@ -5,7 +5,7 @@
#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)
@@ -38,7 +38,7 @@ void eRCConsoleDriver::keyPressed(int)
unsigned char data[16];
unsigned char *d = data;
int num = read(handle, data, 16);
- int code=-1;
+ unsigned char code;
int km = input->getKeyboardMode();
@@ -47,42 +47,29 @@ void eRCConsoleDriver::keyPressed(int)
while (num--)
{
-// eDebug("console code %08x\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;
-
- if (code < 32) /* control characters */
- code = -1;
- else switch(code)
- {
- case 0x7E: // mute, einfg, entf
- case 0x7F: // backspace
- code = -1;
- default:
- break;
+ 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 == 0x7e) || // mute, einfg, entf
+ (code == 0x7f)) // backspace
+ continue;
}
- if (code != -1)
- for (std::list<eRCDevice*>::iterator i(listeners.begin()); i!=listeners.end(); ++i)
- {
-// eDebug("ascii %08x", code);
- (*i)->handleCode(code);
- }
+ for (std::list<eRCDevice*>::iterator i(listeners.begin()); i!=listeners.end(); ++i)
+ {
+// eDebug("ascii %02x", code);
+ (*i)->handleCode(code);
+ }
}
}
diff --git a/lib/driver/rcconsole.h b/lib/driver/rcconsole.h
index 85234d5b..8a24612c 100644
--- a/lib/driver/rcconsole.h
+++ b/lib/driver/rcconsole.h
@@ -10,6 +10,7 @@ class eRCConsoleDriver: public eRCDriver
protected:
int handle;
ePtr<eSocketNotifier> sn;
+ bool m_escape;
void keyPressed(int);
public:
eRCConsoleDriver(const char *filename);