1 #include <lib/base/init.h>
2 #include <lib/base/init_num.h>
3 #include <lib/base/eerror.h>
4 #include <lib/driver/rcconsole.h>
8 eRCConsoleDriver::eRCConsoleDriver(const char *filename): eRCDriver(eRCInput::getInstance()), m_escape(false)
10 handle=open(filename, O_RDONLY|O_NONBLOCK);
13 eDebug("failed to open %s", filename);
17 sn=eSocketNotifier::create(eApp, handle, eSocketNotifier::Read);
18 CONNECT(sn->activated, eRCConsoleDriver::keyPressed);
21 /* set console mode */
23 tcgetattr(handle, &t);
25 t.c_lflag &= ~(ECHO | ICANON | ECHOK | ECHOE | ECHONL);
26 tcsetattr(handle, TCSANOW,&t);
29 eRCConsoleDriver::~eRCConsoleDriver()
31 tcsetattr(handle,TCSANOW, &ot);
36 void eRCConsoleDriver::keyPressed(int)
38 unsigned char data[16];
39 unsigned char *d = data;
40 int num = read(handle, data, 16);
43 int km = input->getKeyboardMode();
45 if (km == eRCInput::kmNone)
51 // eDebug("console code %02x\n", code);
52 if (km == eRCInput::kmAscii) {
59 if (code == 27) // escape code
62 if ((code < 32) || // control characters
63 (code == 0x7e) || // mute, einfg, entf
64 (code == 0x7f)) // backspace
68 for (std::list<eRCDevice*>::iterator i(listeners.begin()); i!=listeners.end(); ++i)
70 // eDebug("ascii %02x", code);
71 (*i)->handleCode(code);
76 void eRCConsole::handleCode(long code)
78 input->keyPressed(eRCKey(this, code, eRCKey::flagAscii));
81 eRCConsole::eRCConsole(eRCDriver *driver)
82 : eRCDevice("Console", driver)
86 const char *eRCConsole::getDescription() const
91 const char *eRCConsole::getKeyDescription(const eRCKey &key) const
96 int eRCConsole::getKeyCompatibleCode(const eRCKey &key) const
103 eRCConsoleDriver driver;
106 eRCConsoleInit(): driver("/dev/tty0"), device(&driver)
111 eAutoInitP0<eRCConsoleInit> init_rcconsole(eAutoInitNumbers::rc+1, "Console RC Driver");