mirror of
https://github.com/genodelabs/genode.git
synced 2025-05-31 06:31:10 +00:00
Remove Fiasco-UX input driver
The switch to C++11 breaks it. Because the driver remains unused for years, it is not worth fixing it.
This commit is contained in:
parent
fe0d9c0775
commit
9a7ed1de21
@ -1,224 +0,0 @@
|
||||
/*
|
||||
* \brief Fiasco-UX Input driver
|
||||
* \author Christian Helmuth
|
||||
* \date 2006-08-30
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2006-2013 Genode Labs GmbH
|
||||
*
|
||||
* This file is part of the Genode OS framework, which is distributed
|
||||
* under the terms of the GNU General Public License version 2.
|
||||
*/
|
||||
|
||||
#include <base/env.h>
|
||||
#include <base/stdint.h>
|
||||
#include <base/printf.h>
|
||||
#include <base/snprintf.h>
|
||||
|
||||
#include <rom_session/connection.h>
|
||||
#include <io_mem_session/connection.h>
|
||||
|
||||
namespace Fiasco {
|
||||
#include <l4/sys/vhw.h>
|
||||
#include <l4/input/libinput.h>
|
||||
|
||||
void log_event(struct l4input *ev);
|
||||
}
|
||||
|
||||
#include "input.h"
|
||||
|
||||
using namespace Genode;
|
||||
|
||||
|
||||
/**
|
||||
* Input area
|
||||
*/
|
||||
static struct Fiasco::l4input *input_area;
|
||||
|
||||
static off_t input_pos;
|
||||
static size_t input_size = (1 << 12) / sizeof(struct Fiasco::l4input);
|
||||
|
||||
|
||||
/****************
|
||||
** Driver API **
|
||||
****************/
|
||||
|
||||
bool Input_drv::event_pending()
|
||||
{
|
||||
return (input_area[input_pos].time);
|
||||
}
|
||||
|
||||
Input::Event Input_drv::get_event()
|
||||
{
|
||||
using namespace Input;
|
||||
|
||||
|
||||
/* XXX we cannot block here without working IRQ handling - so return
|
||||
* invalid event in case of empty buffer */
|
||||
if (!input_area[input_pos].time)
|
||||
return Event();
|
||||
|
||||
/* read event */
|
||||
struct Fiasco::l4input ev = input_area[input_pos];
|
||||
|
||||
/* mark slot as free */
|
||||
input_area[input_pos].time = 0;
|
||||
|
||||
/* increment position counter */
|
||||
input_pos = (input_pos + 1) % input_size;
|
||||
|
||||
/* determine event properties */
|
||||
Event::Type type;
|
||||
int keycode=0, abs_x=0, abs_y=0, rel_x=0, rel_y=0;
|
||||
switch (ev.type) {
|
||||
|
||||
case EV_KEY:
|
||||
keycode = ev.code;
|
||||
if (ev.value)
|
||||
type = Event::PRESS;
|
||||
else
|
||||
type = Event::RELEASE;
|
||||
break;
|
||||
|
||||
case EV_REL:
|
||||
switch (ev.code) {
|
||||
case REL_X:
|
||||
case REL_RX:
|
||||
type = Event::MOTION;
|
||||
rel_x = ev.value;
|
||||
break;
|
||||
|
||||
case REL_Y:
|
||||
case REL_RY:
|
||||
type = Event::MOTION;
|
||||
rel_y = ev.value;
|
||||
break;
|
||||
|
||||
case REL_WHEEL:
|
||||
case REL_HWHEEL:
|
||||
type = Event::WHEEL;
|
||||
rel_x = ev.value;
|
||||
break;
|
||||
|
||||
default:
|
||||
type = Event::INVALID;
|
||||
}
|
||||
break;
|
||||
|
||||
case EV_ABS:
|
||||
switch (ev.code) {
|
||||
case ABS_X:
|
||||
case ABS_RX:
|
||||
type = Event::MOTION;
|
||||
abs_x = ev.value;
|
||||
break;
|
||||
|
||||
case ABS_Y:
|
||||
case ABS_RY:
|
||||
type = Event::MOTION;
|
||||
abs_y = ev.value;
|
||||
break;
|
||||
|
||||
case ABS_WHEEL:
|
||||
type = Event::WHEEL;
|
||||
abs_x = ev.value;
|
||||
break;
|
||||
|
||||
default:
|
||||
type = Event::INVALID;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
type = Event::INVALID;
|
||||
}
|
||||
|
||||
return Event(type, keycode, abs_x, abs_y, rel_x, rel_y);
|
||||
}
|
||||
|
||||
|
||||
/********************
|
||||
** Driver startup **
|
||||
********************/
|
||||
|
||||
/**
|
||||
* Configure Fiasco kernel info page
|
||||
*/
|
||||
static void *map_kip()
|
||||
{
|
||||
/* request KIP dataspace */
|
||||
Rom_connection rom("l4v2_kip");
|
||||
rom.on_destruction(Rom_connection::KEEP_OPEN);
|
||||
|
||||
/* attach KIP dataspace */
|
||||
return env()->rm_session()->attach(rom.dataspace());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Read virtual hardware descriptor from kernel info page
|
||||
*/
|
||||
static int init_input_vhw(void *kip, addr_t *base, size_t *size)
|
||||
{
|
||||
Fiasco::l4_kernel_info_t *kip_ptr = (Fiasco::l4_kernel_info_t *)kip;
|
||||
struct Fiasco::l4_vhw_descriptor *vhw = Fiasco::l4_vhw_get(kip_ptr);
|
||||
if (!vhw) return -1;
|
||||
|
||||
struct Fiasco::l4_vhw_entry *e = Fiasco::l4_vhw_get_entry_type(vhw, Fiasco::L4_TYPE_VHW_INPUT);
|
||||
if (!e) return -2;
|
||||
|
||||
*base = e->mem_start;
|
||||
*size = e->mem_size;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Configure io_mem area containing Fiasco-UX input area
|
||||
*/
|
||||
static int map_input_area(addr_t base, size_t size, void **input)
|
||||
{
|
||||
/* request io_mem dataspace */
|
||||
Io_mem_connection io_mem(base, size);
|
||||
io_mem.on_destruction(Io_mem_connection::KEEP_OPEN);
|
||||
Dataspace_capability input_ds_cap = io_mem.dataspace();
|
||||
if (!input_ds_cap.valid()) return -2;
|
||||
|
||||
/* attach io_mem dataspace */
|
||||
*input = env()->rm_session()->attach(input_ds_cap);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int Input_drv::init()
|
||||
{
|
||||
using namespace Genode;
|
||||
|
||||
void *kip = 0;
|
||||
try { kip = map_kip(); }
|
||||
catch (...) {
|
||||
PERR("KIP mapping failed");
|
||||
return 1;
|
||||
}
|
||||
|
||||
addr_t base; size_t size;
|
||||
if (init_input_vhw(kip, &base, &size)) {
|
||||
PERR("VHW input init failed");
|
||||
return 2;
|
||||
}
|
||||
|
||||
PDBG("--- input area is [%lx,%lx) ---", base, base + size);
|
||||
|
||||
void *input = 0;
|
||||
if (map_input_area(base, size, &input)) {
|
||||
PERR("VHW input area mapping failed");
|
||||
return 3;
|
||||
}
|
||||
|
||||
input_area = (struct Fiasco::l4input *)input;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -1,37 +0,0 @@
|
||||
/**
|
||||
* \brief Input driver interface
|
||||
* \author Christian Helmuth
|
||||
* \date 2006-08-30
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2006-2013 Genode Labs GmbH
|
||||
*
|
||||
* This file is part of the Genode OS framework, which is distributed
|
||||
* under the terms of the GNU General Public License version 2.
|
||||
*/
|
||||
|
||||
#ifndef _INPUT_H
|
||||
#define _INPUT_H
|
||||
|
||||
#include <input/event.h>
|
||||
|
||||
namespace Input_drv {
|
||||
|
||||
/**
|
||||
* Check for pending event
|
||||
*/
|
||||
bool event_pending();
|
||||
|
||||
/**
|
||||
* Aquire event (this function may block)
|
||||
*/
|
||||
Input::Event get_event();
|
||||
|
||||
/**
|
||||
* Initialize driver
|
||||
*/
|
||||
int init();
|
||||
}
|
||||
|
||||
#endif
|
@ -1,113 +0,0 @@
|
||||
/*
|
||||
* \brief Input driver front-end
|
||||
* \author Norman Feske
|
||||
* \author Christian Helmuth
|
||||
* \date 2006-08-30
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2006-2013 Genode Labs GmbH
|
||||
*
|
||||
* This file is part of the Genode OS framework, which is distributed
|
||||
* under the terms of the GNU General Public License version 2.
|
||||
*/
|
||||
|
||||
/* Genode includes */
|
||||
#include <base/env.h>
|
||||
#include <base/sleep.h>
|
||||
#include <base/rpc_server.h>
|
||||
#include <os/attached_ram_dataspace.h>
|
||||
#include <root/component.h>
|
||||
#include <cap_session/connection.h>
|
||||
#include <input_session/input_session.h>
|
||||
#include <input/event.h>
|
||||
|
||||
/* local includes */
|
||||
#include "input.h"
|
||||
|
||||
using namespace Genode;
|
||||
|
||||
|
||||
/*****************************************
|
||||
** Implementation of the input service **
|
||||
*****************************************/
|
||||
|
||||
/*
|
||||
* Input event buffer that is shared with the client
|
||||
*/
|
||||
enum { MAX_EVENTS = 1000 };
|
||||
static Dataspace_capability ev_ds_cap;
|
||||
static Input::Event *ev_ds_buf;
|
||||
|
||||
namespace Input {
|
||||
|
||||
class Session_component : public Genode::Rpc_object<Session>
|
||||
{
|
||||
public:
|
||||
|
||||
Dataspace_capability dataspace() { return ev_ds_cap; }
|
||||
|
||||
bool is_pending() const { return Input_drv::event_pending(); }
|
||||
|
||||
int flush()
|
||||
{
|
||||
/* dump events into event buffer dataspace */
|
||||
int i;
|
||||
for (i = 0; (i < MAX_EVENTS) && Input_drv::event_pending(); i++)
|
||||
ev_ds_buf[i] = Input_drv::get_event();
|
||||
|
||||
/* return number of flushed events */
|
||||
return i;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
class Root : public Root_component<Session_component>
|
||||
{
|
||||
protected:
|
||||
|
||||
Session_component *_create_session(const char *args) {
|
||||
return new (md_alloc()) Session_component(); }
|
||||
|
||||
public:
|
||||
|
||||
Root(Rpc_entrypoint *session_ep, Allocator *md_alloc)
|
||||
: Root_component<Session_component>(session_ep, md_alloc) { }
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
/* create dataspace for event buffer that is shared with the client */
|
||||
try {
|
||||
static Attached_ram_dataspace ev_ds(env()->ram_session(),
|
||||
MAX_EVENTS*sizeof(Input::Event));
|
||||
ev_ds_cap = ev_ds.cap();
|
||||
ev_ds_buf = ev_ds.local_addr<Input::Event>();
|
||||
} catch (...) {
|
||||
PERR("Could not allocate dataspace for event buffer");
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* initialize server entry point */
|
||||
enum { STACK_SIZE = 4096 };
|
||||
static Cap_connection cap;
|
||||
static Rpc_entrypoint ep(&cap, STACK_SIZE, "input_ep");
|
||||
|
||||
/* init driver back-end */
|
||||
if (Input_drv::init()) {
|
||||
PERR("H/W driver init failed");
|
||||
return 3;
|
||||
}
|
||||
|
||||
/* entry point serving input root interface */
|
||||
static Input::Root input_root(&ep, env()->heap());
|
||||
|
||||
/* tell parent about the service */
|
||||
env()->parent()->announce(ep.manage(&input_root));
|
||||
|
||||
/* main's done - go to sleep */
|
||||
sleep_forever();
|
||||
return 0;
|
||||
}
|
@ -1,4 +0,0 @@
|
||||
TARGET = input_ux_drv
|
||||
REQUIRES = fiasco x86
|
||||
SRC_CC = main.cc input.cc test.cc
|
||||
LIBS = base
|
@ -1,560 +0,0 @@
|
||||
/*
|
||||
* \brief Input test
|
||||
* \author Christian Helmuth
|
||||
* \date 2006-08-29
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2006-2013 Genode Labs GmbH
|
||||
*
|
||||
* This file is part of the Genode OS framework, which is distributed
|
||||
* under the terms of the GNU General Public License version 2.
|
||||
*/
|
||||
|
||||
#include <base/printf.h>
|
||||
|
||||
namespace Fiasco {
|
||||
#include <l4/sys/ipc.h>
|
||||
#include <l4/sys/kernel.h>
|
||||
#include <l4/sys/vhw.h>
|
||||
|
||||
#include <l4/sigma0/sigma0.h>
|
||||
#include <l4/input/libinput.h>
|
||||
}
|
||||
|
||||
static const char *get_event(unsigned type)
|
||||
{
|
||||
switch (type) {
|
||||
case EV_SYN: return "Sync";
|
||||
case EV_KEY: return "Key";
|
||||
case EV_REL: return "Relative";
|
||||
case EV_ABS: return "Absolute";
|
||||
case EV_MSC: return "Misc";
|
||||
case EV_SW: return "Switch";
|
||||
case EV_LED: return "LED";
|
||||
case EV_SND: return "Sound";
|
||||
case EV_REP: return "Repeat";
|
||||
case EV_FF: return "ForceFeedback";
|
||||
case EV_PWR: return "Power";
|
||||
case EV_FF_STATUS: return "ForceFeedbackStatus";
|
||||
|
||||
default: return 0;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
static const char *get_key(unsigned code)
|
||||
{
|
||||
switch (code) {
|
||||
case KEY_RESERVED: return "Reserved";
|
||||
case KEY_ESC: return "Esc";
|
||||
case KEY_1: return "1";
|
||||
case KEY_2: return "2";
|
||||
case KEY_3: return "3";
|
||||
case KEY_4: return "4";
|
||||
case KEY_5: return "5";
|
||||
case KEY_6: return "6";
|
||||
case KEY_7: return "7";
|
||||
case KEY_8: return "8";
|
||||
case KEY_9: return "9";
|
||||
case KEY_0: return "0";
|
||||
case KEY_MINUS: return "Minus";
|
||||
case KEY_EQUAL: return "Equal";
|
||||
case KEY_BACKSPACE: return "Backspace";
|
||||
case KEY_TAB: return "Tab";
|
||||
case KEY_Q: return "Q";
|
||||
case KEY_W: return "W";
|
||||
case KEY_E: return "E";
|
||||
case KEY_R: return "R";
|
||||
case KEY_T: return "T";
|
||||
case KEY_Y: return "Y";
|
||||
case KEY_U: return "U";
|
||||
case KEY_I: return "I";
|
||||
case KEY_O: return "O";
|
||||
case KEY_P: return "P";
|
||||
case KEY_LEFTBRACE: return "LeftBrace";
|
||||
case KEY_RIGHTBRACE: return "RightBrace";
|
||||
case KEY_ENTER: return "Enter";
|
||||
case KEY_LEFTCTRL: return "LeftControl";
|
||||
case KEY_A: return "A";
|
||||
case KEY_S: return "S";
|
||||
case KEY_D: return "D";
|
||||
case KEY_F: return "F";
|
||||
case KEY_G: return "G";
|
||||
case KEY_H: return "H";
|
||||
case KEY_J: return "J";
|
||||
case KEY_K: return "K";
|
||||
case KEY_L: return "L";
|
||||
case KEY_SEMICOLON: return "Semicolon";
|
||||
case KEY_APOSTROPHE: return "Apostrophe";
|
||||
case KEY_GRAVE: return "Grave";
|
||||
case KEY_LEFTSHIFT: return "LeftShift";
|
||||
case KEY_BACKSLASH: return "BackSlash";
|
||||
case KEY_Z: return "Z";
|
||||
case KEY_X: return "X";
|
||||
case KEY_C: return "C";
|
||||
case KEY_V: return "V";
|
||||
case KEY_B: return "B";
|
||||
case KEY_N: return "N";
|
||||
case KEY_M: return "M";
|
||||
case KEY_COMMA: return "Comma";
|
||||
case KEY_DOT: return "Dot";
|
||||
case KEY_SLASH: return "Slash";
|
||||
case KEY_RIGHTSHIFT: return "RightShift";
|
||||
case KEY_KPASTERISK: return "KPAsterisk";
|
||||
case KEY_LEFTALT: return "LeftAlt";
|
||||
case KEY_SPACE: return "Space";
|
||||
case KEY_CAPSLOCK: return "CapsLock";
|
||||
case KEY_F1: return "F1";
|
||||
case KEY_F2: return "F2";
|
||||
case KEY_F3: return "F3";
|
||||
case KEY_F4: return "F4";
|
||||
case KEY_F5: return "F5";
|
||||
case KEY_F6: return "F6";
|
||||
case KEY_F7: return "F7";
|
||||
case KEY_F8: return "F8";
|
||||
case KEY_F9: return "F9";
|
||||
case KEY_F10: return "F10";
|
||||
case KEY_NUMLOCK: return "NumLock";
|
||||
case KEY_SCROLLLOCK: return "ScrollLock";
|
||||
case KEY_KP7: return "KP7";
|
||||
case KEY_KP8: return "KP8";
|
||||
case KEY_KP9: return "KP9";
|
||||
case KEY_KPMINUS: return "KPMinus";
|
||||
case KEY_KP4: return "KP4";
|
||||
case KEY_KP5: return "KP5";
|
||||
case KEY_KP6: return "KP6";
|
||||
case KEY_KPPLUS: return "KPPlus";
|
||||
case KEY_KP1: return "KP1";
|
||||
case KEY_KP2: return "KP2";
|
||||
case KEY_KP3: return "KP3";
|
||||
case KEY_KP0: return "KP0";
|
||||
case KEY_KPDOT: return "KPDot";
|
||||
case KEY_ZENKAKUHANKAKU: return "Zenkaku/Hankaku";
|
||||
case KEY_102ND: return "102nd";
|
||||
case KEY_F11: return "F11";
|
||||
case KEY_F12: return "F12";
|
||||
case KEY_RO: return "RO";
|
||||
case KEY_KATAKANA: return "Katakana";
|
||||
case KEY_HIRAGANA: return "HIRAGANA";
|
||||
case KEY_HENKAN: return "Henkan";
|
||||
case KEY_KATAKANAHIRAGANA: return "Katakana/Hiragana";
|
||||
case KEY_MUHENKAN: return "Muhenkan";
|
||||
case KEY_KPJPCOMMA: return "KPJpComma";
|
||||
case KEY_KPENTER: return "KPEnter";
|
||||
case KEY_RIGHTCTRL: return "RightCtrl";
|
||||
case KEY_KPSLASH: return "KPSlash";
|
||||
case KEY_SYSRQ: return "SysRq";
|
||||
case KEY_RIGHTALT: return "RightAlt";
|
||||
case KEY_LINEFEED: return "LineFeed";
|
||||
case KEY_HOME: return "Home";
|
||||
case KEY_UP: return "Up";
|
||||
case KEY_PAGEUP: return "PageUp";
|
||||
case KEY_LEFT: return "Left";
|
||||
case KEY_RIGHT: return "Right";
|
||||
case KEY_END: return "End";
|
||||
case KEY_DOWN: return "Down";
|
||||
case KEY_PAGEDOWN: return "PageDown";
|
||||
case KEY_INSERT: return "Insert";
|
||||
case KEY_DELETE: return "Delete";
|
||||
case KEY_MACRO: return "Macro";
|
||||
case KEY_MUTE: return "Mute";
|
||||
case KEY_VOLUMEDOWN: return "VolumeDown";
|
||||
case KEY_VOLUMEUP: return "VolumeUp";
|
||||
case KEY_POWER: return "Power";
|
||||
case KEY_KPEQUAL: return "KPEqual";
|
||||
case KEY_KPPLUSMINUS: return "KPPlusMinus";
|
||||
case KEY_PAUSE: return "Pause";
|
||||
case KEY_KPCOMMA: return "KPComma";
|
||||
case KEY_HANGUEL: return "Hanguel";
|
||||
case KEY_HANJA: return "Hanja";
|
||||
case KEY_YEN: return "Yen";
|
||||
case KEY_LEFTMETA: return "LeftMeta";
|
||||
case KEY_RIGHTMETA: return "RightMeta";
|
||||
case KEY_COMPOSE: return "Compose";
|
||||
case KEY_STOP: return "Stop";
|
||||
case KEY_AGAIN: return "Again";
|
||||
case KEY_PROPS: return "Props";
|
||||
case KEY_UNDO: return "Undo";
|
||||
case KEY_FRONT: return "Front";
|
||||
case KEY_COPY: return "Copy";
|
||||
case KEY_OPEN: return "Open";
|
||||
case KEY_PASTE: return "Paste";
|
||||
case KEY_FIND: return "Find";
|
||||
case KEY_CUT: return "Cut";
|
||||
case KEY_HELP: return "Help";
|
||||
case KEY_MENU: return "Menu";
|
||||
case KEY_CALC: return "Calc";
|
||||
case KEY_SETUP: return "Setup";
|
||||
case KEY_SLEEP: return "Sleep";
|
||||
case KEY_WAKEUP: return "WakeUp";
|
||||
case KEY_FILE: return "File";
|
||||
case KEY_SENDFILE: return "SendFile";
|
||||
case KEY_DELETEFILE: return "DeleteFile";
|
||||
case KEY_XFER: return "X-fer";
|
||||
case KEY_PROG1: return "Prog1";
|
||||
case KEY_PROG2: return "Prog2";
|
||||
case KEY_WWW: return "WWW";
|
||||
case KEY_MSDOS: return "MSDOS";
|
||||
case KEY_COFFEE: return "Coffee";
|
||||
case KEY_DIRECTION: return "Direction";
|
||||
case KEY_CYCLEWINDOWS: return "CycleWindows";
|
||||
case KEY_MAIL: return "Mail";
|
||||
case KEY_BOOKMARKS: return "Bookmarks";
|
||||
case KEY_COMPUTER: return "Computer";
|
||||
case KEY_BACK: return "Back";
|
||||
case KEY_FORWARD: return "Forward";
|
||||
case KEY_CLOSECD: return "CloseCD";
|
||||
case KEY_EJECTCD: return "EjectCD";
|
||||
case KEY_EJECTCLOSECD: return "EjectCloseCD";
|
||||
case KEY_NEXTSONG: return "NextSong";
|
||||
case KEY_PLAYPAUSE: return "PlayPause";
|
||||
case KEY_PREVIOUSSONG: return "PreviousSong";
|
||||
case KEY_STOPCD: return "StopCD";
|
||||
case KEY_RECORD: return "Record";
|
||||
case KEY_REWIND: return "Rewind";
|
||||
case KEY_PHONE: return "Phone";
|
||||
case KEY_ISO: return "ISOKey";
|
||||
case KEY_CONFIG: return "Config";
|
||||
case KEY_HOMEPAGE: return "HomePage";
|
||||
case KEY_REFRESH: return "Refresh";
|
||||
case KEY_EXIT: return "Exit";
|
||||
case KEY_MOVE: return "Move";
|
||||
case KEY_EDIT: return "Edit";
|
||||
case KEY_SCROLLUP: return "ScrollUp";
|
||||
case KEY_SCROLLDOWN: return "ScrollDown";
|
||||
case KEY_KPLEFTPAREN: return "KPLeftParenthesis";
|
||||
case KEY_KPRIGHTPAREN: return "KPRightParenthesis";
|
||||
case KEY_NEW: return "KEY_NEW";
|
||||
case KEY_REDO: return "KEY_REDO";
|
||||
case KEY_F13: return "F13";
|
||||
case KEY_F14: return "F14";
|
||||
case KEY_F15: return "F15";
|
||||
case KEY_F16: return "F16";
|
||||
case KEY_F17: return "F17";
|
||||
case KEY_F18: return "F18";
|
||||
case KEY_F19: return "F19";
|
||||
case KEY_F20: return "F20";
|
||||
case KEY_F21: return "F21";
|
||||
case KEY_F22: return "F22";
|
||||
case KEY_F23: return "F23";
|
||||
case KEY_F24: return "F24";
|
||||
case KEY_PLAYCD: return "PlayCD";
|
||||
case KEY_PAUSECD: return "PauseCD";
|
||||
case KEY_PROG3: return "Prog3";
|
||||
case KEY_PROG4: return "Prog4";
|
||||
case KEY_SUSPEND: return "Suspend";
|
||||
case KEY_CLOSE: return "Close";
|
||||
case KEY_PLAY: return "Play";
|
||||
case KEY_FASTFORWARD: return "Fast Forward";
|
||||
case KEY_BASSBOOST: return "Bass Boost";
|
||||
case KEY_PRINT: return "Print";
|
||||
case KEY_HP: return "HP";
|
||||
case KEY_CAMERA: return "Camera";
|
||||
case KEY_SOUND: return "Sound";
|
||||
case KEY_QUESTION: return "Question";
|
||||
case KEY_EMAIL: return "Email";
|
||||
case KEY_CHAT: return "Chat";
|
||||
case KEY_SEARCH: return "Search";
|
||||
case KEY_CONNECT: return "Connect";
|
||||
case KEY_FINANCE: return "Finance";
|
||||
case KEY_SPORT: return "Sport";
|
||||
case KEY_SHOP: return "Shop";
|
||||
case KEY_ALTERASE: return "Alternate Erase";
|
||||
case KEY_CANCEL: return "Cancel";
|
||||
case KEY_BRIGHTNESSDOWN: return "Brightness down";
|
||||
case KEY_BRIGHTNESSUP: return "Brightness up";
|
||||
case KEY_MEDIA: return "Media";
|
||||
case KEY_SWITCHVIDEOMODE: return "Switch video";
|
||||
case KEY_KBDILLUMTOGGLE: return "KBDILLUMTOGGLE";
|
||||
case KEY_KBDILLUMDOWN: return "KBDILLUMDOWN";
|
||||
case KEY_KBDILLUMUP: return "KBDILLUMUP";
|
||||
case KEY_SEND: return "Send";
|
||||
case KEY_REPLY: return "Reply";
|
||||
case KEY_FORWARDMAIL: return "Forward";
|
||||
case KEY_SAVE: return "Save";
|
||||
case KEY_DOCUMENTS: return "Documents";
|
||||
case KEY_UNKNOWN: return "Unknown";
|
||||
case BTN_0: return "Btn0";
|
||||
case BTN_1: return "Btn1";
|
||||
case BTN_2: return "Btn2";
|
||||
case BTN_3: return "Btn3";
|
||||
case BTN_4: return "Btn4";
|
||||
case BTN_5: return "Btn5";
|
||||
case BTN_6: return "Btn6";
|
||||
case BTN_7: return "Btn7";
|
||||
case BTN_8: return "Btn8";
|
||||
case BTN_9: return "Btn9";
|
||||
case BTN_LEFT: return "LeftBtn";
|
||||
case BTN_RIGHT: return "RightBtn";
|
||||
case BTN_MIDDLE: return "MiddleBtn";
|
||||
case BTN_SIDE: return "SideBtn";
|
||||
case BTN_EXTRA: return "ExtraBtn";
|
||||
case BTN_FORWARD: return "ForwardBtn";
|
||||
case BTN_BACK: return "BackBtn";
|
||||
case BTN_TASK: return "TaskBtn";
|
||||
case BTN_TRIGGER: return "Trigger";
|
||||
case BTN_THUMB: return "ThumbBtn";
|
||||
case BTN_THUMB2: return "ThumbBtn2";
|
||||
case BTN_TOP: return "TopBtn";
|
||||
case BTN_TOP2: return "TopBtn2";
|
||||
case BTN_PINKIE: return "PinkieBtn";
|
||||
case BTN_BASE: return "BaseBtn";
|
||||
case BTN_BASE2: return "BaseBtn2";
|
||||
case BTN_BASE3: return "BaseBtn3";
|
||||
case BTN_BASE4: return "BaseBtn4";
|
||||
case BTN_BASE5: return "BaseBtn5";
|
||||
case BTN_BASE6: return "BaseBtn6";
|
||||
case BTN_DEAD: return "BtnDead";
|
||||
case BTN_A: return "BtnA";
|
||||
case BTN_B: return "BtnB";
|
||||
case BTN_C: return "BtnC";
|
||||
case BTN_X: return "BtnX";
|
||||
case BTN_Y: return "BtnY";
|
||||
case BTN_Z: return "BtnZ";
|
||||
case BTN_TL: return "BtnTL";
|
||||
case BTN_TR: return "BtnTR";
|
||||
case BTN_TL2: return "BtnTL2";
|
||||
case BTN_TR2: return "BtnTR2";
|
||||
case BTN_SELECT: return "BtnSelect";
|
||||
case BTN_START: return "BtnStart";
|
||||
case BTN_MODE: return "BtnMode";
|
||||
case BTN_THUMBL: return "BtnThumbL";
|
||||
case BTN_THUMBR: return "BtnThumbR";
|
||||
case BTN_TOOL_PEN: return "ToolPen";
|
||||
case BTN_TOOL_RUBBER: return "ToolRubber";
|
||||
case BTN_TOOL_BRUSH: return "ToolBrush";
|
||||
case BTN_TOOL_PENCIL: return "ToolPencil";
|
||||
case BTN_TOOL_AIRBRUSH: return "ToolAirbrush";
|
||||
case BTN_TOOL_FINGER: return "ToolFinger";
|
||||
case BTN_TOOL_MOUSE: return "ToolMouse";
|
||||
case BTN_TOOL_LENS: return "ToolLens";
|
||||
case BTN_TOUCH: return "Touch";
|
||||
case BTN_STYLUS: return "Stylus";
|
||||
case BTN_STYLUS2: return "Stylus2";
|
||||
case BTN_TOOL_DOUBLETAP: return "Tool Doubletap";
|
||||
case BTN_TOOL_TRIPLETAP: return "Tool Tripletap";
|
||||
case BTN_GEAR_DOWN: return "WheelBtn";
|
||||
case BTN_GEAR_UP: return "Gear up";
|
||||
case KEY_OK: return "Ok";
|
||||
case KEY_SELECT: return "Select";
|
||||
case KEY_GOTO: return "Goto";
|
||||
case KEY_CLEAR: return "Clear";
|
||||
case KEY_POWER2: return "Power2";
|
||||
case KEY_OPTION: return "Option";
|
||||
case KEY_INFO: return "Info";
|
||||
case KEY_TIME: return "Time";
|
||||
case KEY_VENDOR: return "Vendor";
|
||||
case KEY_ARCHIVE: return "Archive";
|
||||
case KEY_PROGRAM: return "Program";
|
||||
case KEY_CHANNEL: return "Channel";
|
||||
case KEY_FAVORITES: return "Favorites";
|
||||
case KEY_EPG: return "EPG";
|
||||
case KEY_PVR: return "PVR";
|
||||
case KEY_MHP: return "MHP";
|
||||
case KEY_LANGUAGE: return "Language";
|
||||
case KEY_TITLE: return "Title";
|
||||
case KEY_SUBTITLE: return "Subtitle";
|
||||
case KEY_ANGLE: return "Angle";
|
||||
case KEY_ZOOM: return "Zoom";
|
||||
case KEY_MODE: return "Mode";
|
||||
case KEY_KEYBOARD: return "Keyboard";
|
||||
case KEY_SCREEN: return "Screen";
|
||||
case KEY_PC: return "PC";
|
||||
case KEY_TV: return "TV";
|
||||
case KEY_TV2: return "TV2";
|
||||
case KEY_VCR: return "VCR";
|
||||
case KEY_VCR2: return "VCR2";
|
||||
case KEY_SAT: return "Sat";
|
||||
case KEY_SAT2: return "Sat2";
|
||||
case KEY_CD: return "CD";
|
||||
case KEY_TAPE: return "Tape";
|
||||
case KEY_RADIO: return "Radio";
|
||||
case KEY_TUNER: return "Tuner";
|
||||
case KEY_PLAYER: return "Player";
|
||||
case KEY_TEXT: return "Text";
|
||||
case KEY_DVD: return "DVD";
|
||||
case KEY_AUX: return "Aux";
|
||||
case KEY_MP3: return "MP3";
|
||||
case KEY_AUDIO: return "Audio";
|
||||
case KEY_VIDEO: return "Video";
|
||||
case KEY_DIRECTORY: return "Directory";
|
||||
case KEY_LIST: return "List";
|
||||
case KEY_MEMO: return "Memo";
|
||||
case KEY_CALENDAR: return "Calendar";
|
||||
case KEY_RED: return "Red";
|
||||
case KEY_GREEN: return "Green";
|
||||
case KEY_YELLOW: return "Yellow";
|
||||
case KEY_BLUE: return "Blue";
|
||||
case KEY_CHANNELUP: return "ChannelUp";
|
||||
case KEY_CHANNELDOWN: return "ChannelDown";
|
||||
case KEY_FIRST: return "First";
|
||||
case KEY_LAST: return "Last";
|
||||
case KEY_AB: return "AB";
|
||||
case KEY_NEXT: return "Next";
|
||||
case KEY_RESTART: return "Restart";
|
||||
case KEY_SLOW: return "Slow";
|
||||
case KEY_SHUFFLE: return "Shuffle";
|
||||
case KEY_BREAK: return "Break";
|
||||
case KEY_PREVIOUS: return "Previous";
|
||||
case KEY_DIGITS: return "Digits";
|
||||
case KEY_TEEN: return "TEEN";
|
||||
case KEY_TWEN: return "TWEN";
|
||||
case KEY_DEL_EOL: return "Delete EOL";
|
||||
case KEY_DEL_EOS: return "Delete EOS";
|
||||
case KEY_INS_LINE: return "Insert line";
|
||||
case KEY_DEL_LINE: return "Delete line";
|
||||
case KEY_FN: return "KEY_FN";
|
||||
case KEY_FN_ESC: return "KEY_FN_ESC";
|
||||
case KEY_FN_F1: return "KEY_FN_F1";
|
||||
case KEY_FN_F2: return "KEY_FN_F2";
|
||||
case KEY_FN_F3: return "KEY_FN_F3";
|
||||
case KEY_FN_F4: return "KEY_FN_F4";
|
||||
case KEY_FN_F5: return "KEY_FN_F5";
|
||||
case KEY_FN_F6: return "KEY_FN_F6";
|
||||
case KEY_FN_F7: return "KEY_FN_F7";
|
||||
case KEY_FN_F8: return "KEY_FN_F8";
|
||||
case KEY_FN_F9: return "KEY_FN_F9";
|
||||
case KEY_FN_F10: return "KEY_FN_F10";
|
||||
case KEY_FN_F11: return "KEY_FN_F11";
|
||||
case KEY_FN_F12: return "KEY_FN_F12";
|
||||
case KEY_FN_1: return "KEY_FN_1";
|
||||
case KEY_FN_2: return "KEY_FN_2";
|
||||
case KEY_FN_D: return "KEY_FN_D";
|
||||
case KEY_FN_E: return "KEY_FN_E";
|
||||
case KEY_FN_F: return "KEY_FN_F";
|
||||
case KEY_FN_S: return "KEY_FN_S";
|
||||
case KEY_FN_B: return "KEY_FN_B";
|
||||
|
||||
default: return 0;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
static const char *get_rel(unsigned code)
|
||||
{
|
||||
switch (code) {
|
||||
case REL_X: return "X";
|
||||
case REL_Y: return "Y";
|
||||
case REL_Z: return "Z";
|
||||
case REL_RX: return "RX";
|
||||
case REL_RY: return "RY";
|
||||
case REL_RZ: return "RZ";
|
||||
case REL_HWHEEL: return "HWheel";
|
||||
case REL_DIAL: return "Dial";
|
||||
case REL_WHEEL: return "Wheel";
|
||||
case REL_MISC: return "Misc";
|
||||
|
||||
default: return 0;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
static const char *get_abs(unsigned code)
|
||||
{
|
||||
switch (code) {
|
||||
case ABS_X: return "X";
|
||||
case ABS_Y: return "Y";
|
||||
case ABS_Z: return "Z";
|
||||
case ABS_RX: return "Rx";
|
||||
case ABS_RY: return "Ry";
|
||||
case ABS_RZ: return "Rz";
|
||||
case ABS_THROTTLE: return "Throttle";
|
||||
case ABS_RUDDER: return "Rudder";
|
||||
case ABS_WHEEL: return "Wheel";
|
||||
case ABS_GAS: return "Gas";
|
||||
case ABS_BRAKE: return "Brake";
|
||||
case ABS_HAT0X: return "Hat0X";
|
||||
case ABS_HAT0Y: return "Hat0Y";
|
||||
case ABS_HAT1X: return "Hat1X";
|
||||
case ABS_HAT1Y: return "Hat1Y";
|
||||
case ABS_HAT2X: return "Hat2X";
|
||||
case ABS_HAT2Y: return "Hat2Y";
|
||||
case ABS_HAT3X: return "Hat3X";
|
||||
case ABS_HAT3Y: return "Hat 3Y";
|
||||
case ABS_PRESSURE: return "Pressure";
|
||||
case ABS_DISTANCE: return "Distance";
|
||||
case ABS_TILT_X: return "XTilt";
|
||||
case ABS_TILT_Y: return "YTilt";
|
||||
case ABS_TOOL_WIDTH: return "Tool Width";
|
||||
case ABS_VOLUME: return "Volume";
|
||||
case ABS_MISC: return "Misc";
|
||||
|
||||
default: return 0;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
static const char *get_misc(unsigned code)
|
||||
{
|
||||
switch (code) {
|
||||
case MSC_SERIAL: return "Serial";
|
||||
case MSC_PULSELED: return "Pulseled";
|
||||
case MSC_GESTURE: return "Gesture";
|
||||
case MSC_RAW: return "RawData";
|
||||
case MSC_SCAN: return "ScanCode";
|
||||
|
||||
default: return 0;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
//char *leds[LED_MAX + 1: return {
|
||||
// case 0 ... LED_MAX: return NULL;
|
||||
// case LED_NUML: return "NumLock";
|
||||
// case LED_CAPSL: return "CapsLock",
|
||||
// case LED_SCROLLL: return "ScrollLock";
|
||||
// case LED_COMPOSE: return "Compose";
|
||||
// case LED_KANA: return "Kana";
|
||||
// case LED_SLEEP: return "Sleep",
|
||||
// case LED_SUSPEND: return "Suspend";
|
||||
// case LED_MUTE: return "Mute";
|
||||
// case LED_MISC: return "Misc";
|
||||
// case LED_MAIL: return "Mail";
|
||||
// case LED_CHARGING: return "Charging";
|
||||
//};
|
||||
//
|
||||
//char *repeats[REP_MAX + 1: return {
|
||||
// case 0 ... REP_MAX: return NULL;
|
||||
// case REP_DELAY: return "Delay";
|
||||
// case REP_PERIOD: return "Period";
|
||||
//};
|
||||
//
|
||||
//char *sounds[SND_MAX + 1: return {
|
||||
// case 0 ... SND_MAX: return NULL;
|
||||
// case SND_CLICK: return "Click";
|
||||
// case SND_BELL: return "Bell";
|
||||
// case SND_TONE: return "Tone";
|
||||
//};
|
||||
|
||||
|
||||
static const char *get_name(unsigned type, unsigned code)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case EV_SYN: return get_event(code);
|
||||
case EV_KEY: return get_key(code);
|
||||
case EV_REL: return get_rel(code);
|
||||
case EV_ABS: return get_abs(code);
|
||||
case EV_MSC: return get_misc(code);
|
||||
// case EV_LED: return leds;
|
||||
// case EV_SND: return sounds
|
||||
// case EV_REP: return repeats;
|
||||
|
||||
default: return 0;
|
||||
}
|
||||
};
|
||||
|
||||
namespace Fiasco {
|
||||
|
||||
void log_event(struct l4input *ev)
|
||||
{
|
||||
if (!ev->type)
|
||||
PDBG("type = 0\n");
|
||||
|
||||
PDBG("Event: type %d (%s), code %d (%s), value %d",
|
||||
ev->type, get_event(ev->type),
|
||||
ev->code, get_name(ev->type, ev->code),
|
||||
ev->value);
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user