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
|
/*
* secde -- experimental lightweight Wayland/X11 server
* Copyright (C) 2019 Samuel Lidén Borell
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
#include <sys/ioctl.h>
#include <linux/input.h>
#include <linux/types.h>
#include <stdio.h>
#include "evdev.h"
int input_evdev_init(struct FdInfo *info)
{
char name[128+1];
unsigned char props;
unsigned char relbits;
int fd = protohnd_getfd(info);
/* ioctl = 0x80804506 */
if (ioctl(fd, EVIOCGNAME(128), name) != -1) {
printf("input device (fd %d) name : %s\n", fd, name);
}
if (ioctl(fd, EVIOCGPROP(sizeof(props)), &props) != -1) {
printf("input device (fd %d) properties : %x\n", fd, props);
}
if (ioctl(fd, EVIOCGBIT(EV_REL, sizeof(props)), &relbits) != -1) {
printf("input device(fd %d) bits(EV_REL): %x\n", fd, relbits);
}
if (ioctl(fd, EVIOCGBIT(EV_ABS, sizeof(props)), &relbits) != -1) {
printf("input device(fd %d) bits(EV_ABS): %x\n", fd, relbits);
}
if (ioctl(fd, EVIOCGBIT(EV_KEY, sizeof(props)), &relbits) != -1) {
printf("input device(fd %d) bits(EV_KEY): %x\n", fd, relbits);
}
return 1;
}
int input_evdev_handler(struct FdInfo *info, const unsigned char *buff,
int len)
{
int origlen = len;
const struct input_event *ev = (struct input_event *)buff;
(void) info;
while (len >= (int)sizeof(struct input_event)) {
printf("evdev event. time=%lx, type=%d, code=%d, value=%d\n",
ev->time.tv_sec, ev->type, ev->code,
ev->value);
ev++;
len -= sizeof(*ev);
}
return origlen - len;
}
|