aboutsummaryrefslogtreecommitdiff
path: root/lib/driver/rcinput.cpp
blob: 94ce3ebe911465f60ee65483087307648c8061cf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#include <lib/driver/rcinput.h>

#include <lib/base/eerror.h>

#include <sys/ioctl.h>
#include <linux/input.h>
#include <sys/stat.h>

#include <lib/base/ebase.h>
#include <lib/base/init.h>
#include <lib/base/init_num.h>
#include <lib/driver/input_fake.h>

void eRCDeviceInputDev::handleCode(int rccode)
{
	struct input_event *ev = (struct input_event *)rccode;
	if (ev->type!=EV_KEY)
		return;
	eDebug("%x %x %x", ev->value, ev->code, ev->type);
	switch (ev->value)
	{
	case 0:
		/*emit*/ input->keyPressed(eRCKey(this, ev->code, eRCKey::flagBreak));
		break;
	case 1:
		/*emit*/ input->keyPressed(eRCKey(this, ev->code, 0));
		break;
	case 2:
		/*emit*/ input->keyPressed(eRCKey(this, ev->code, eRCKey::flagRepeat));
		break;
	}
}

eRCDeviceInputDev::eRCDeviceInputDev(eRCInputEventDriver *driver): eRCDevice(driver->getDeviceName(), driver)
{
}

const char *eRCDeviceInputDev::getDescription() const
{
	return id.c_str();
}

const char *eRCDeviceInputDev::getKeyDescription(const eRCKey &key) const
{
	switch (key.code)
	{
	case KEY_0: return "0";
	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_RIGHT: return "rechts";
	case KEY_LEFT: return "links";
	case KEY_UP: return "oben";
	case KEY_DOWN: return "unten";
	case KEY_OK: return "ok";
	case KEY_MUTE: return "mute";
	case KEY_POWER: return "power";
	case KEY_GREEN: return "gruen";
	case KEY_YELLOW: return "gelb";
	case KEY_RED: return "rot";
	case KEY_BLUE: return "blau";
	case KEY_VOLUMEUP: return "Lautstaerke plus";
	case KEY_VOLUMEDOWN: return "Lautstaerke minus";
	case KEY_HELP: return "?";
	case KEY_SETUP: return "d-Box";
#if 0
	case KEY_TOPLEFT: return "oben links";
	case KEY_TOPRIGHT: return "oben rechts";
	case KEY_BOTTOMLEFT: return "unten links";
	case KEY_BOTTOMRIGHT: return "unten rechts";
#endif
	case KEY_HOME: return "home";
	default: return 0;
	}
}

int eRCDeviceInputDev::getKeyCompatibleCode(const eRCKey &key) const
{
	switch (key.code)
	{
		case KEY_0: return eRCInput::RC_0;
		case KEY_1: return eRCInput::RC_1;
		case KEY_2: return eRCInput::RC_2;
		case KEY_3: return eRCInput::RC_3;
		case KEY_4: return eRCInput::RC_4;
		case KEY_5: return eRCInput::RC_5;
		case KEY_6: return eRCInput::RC_6;
		case KEY_7: return eRCInput::RC_7;
		case KEY_8: return eRCInput::RC_8;
		case KEY_9: return eRCInput::RC_9;
		case KEY_RIGHT: return eRCInput::RC_RIGHT;
		case KEY_LEFT: return eRCInput::RC_LEFT;
		case KEY_UP: return eRCInput::RC_UP;
		case KEY_DOWN: return eRCInput::RC_DOWN;
		case KEY_OK: return eRCInput::RC_OK;
		case KEY_MUTE: return eRCInput::RC_MUTE;
		case KEY_POWER: return eRCInput::RC_STANDBY;
		case KEY_GREEN: return eRCInput::RC_GREEN;
		case KEY_YELLOW: return eRCInput::RC_YELLOW;
		case KEY_RED: return eRCInput::RC_RED;
		case KEY_VOLUMEUP: return eRCInput::RC_PLUS;
		case KEY_BLUE: return eRCInput::RC_BLUE;
		case KEY_VOLUMEDOWN: return eRCInput::RC_MINUS;
		case KEY_HELP: return eRCInput::RC_HELP;
		case KEY_SETUP: return eRCInput::RC_DBOX;
		case KEY_HOME: return eRCInput::RC_HOME;
	}
	return -1;
}


class eInputDeviceInit
{
	eRCInputEventDriver driver;
	eRCDeviceInputDev deviceInputDev;
public:
	eInputDeviceInit(): driver("/dev/input/event0"), deviceInputDev(&driver)
	{
	}
};

eAutoInitP0<eInputDeviceInit> init_rcinputdev(eAutoInitNumbers::rc+1, "input device driver");