Skip to content

Commit b8b977a

Browse files
committed
feat: initial implementation
1 parent 8e95e5d commit b8b977a

File tree

6 files changed

+1384
-0
lines changed

6 files changed

+1384
-0
lines changed

evdev/libevdev-uinput.lua

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
local ffi = require("ffi")
2+
3+
ffi.cdef([[
4+
struct libevdev_uinput;
5+
6+
enum libevdev_uinput_open_mode {
7+
LIBEVDEV_UINPUT_OPEN_MANAGED = -2
8+
};
9+
10+
int libevdev_uinput_create_from_device(const struct libevdev *dev, int uinput_fd, struct libevdev_uinput **uinput_dev);
11+
void libevdev_uinput_destroy(struct libevdev_uinput *uinput_dev);
12+
int libevdev_uinput_get_fd(const struct libevdev_uinput *uinput_dev);
13+
const char* libevdev_uinput_get_syspath(struct libevdev_uinput *uinput_dev);
14+
const char* libevdev_uinput_get_devnode(struct libevdev_uinput *uinput_dev);
15+
int libevdev_uinput_write_event(const struct libevdev_uinput *uinput_dev, unsigned int type, unsigned int code, int value);
16+
]])
17+
18+
local c = ffi.load("evdev")
19+
20+
local mod = {
21+
libevdev_uinput_create_from_device = c.libevdev_uinput_create_from_device,
22+
libevdev_uinput_destroy = c.libevdev_uinput_destroy,
23+
libevdev_uinput_get_fd = c.libevdev_uinput_get_fd,
24+
libevdev_uinput_get_syspath = c.libevdev_uinput_get_syspath,
25+
libevdev_uinput_get_devnode = c.libevdev_uinput_get_devnode,
26+
libevdev_uinput_write_event = c.libevdev_uinput_write_event,
27+
}
28+
29+
return mod

evdev/libevdev.lua

Lines changed: 223 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,223 @@
1+
local ffi = require("ffi")
2+
3+
ffi.cdef([[
4+
struct libevdev;
5+
6+
enum libevdev_read_flag {
7+
LIBEVDEV_READ_FLAG_SYNC = 1,
8+
LIBEVDEV_READ_FLAG_NORMAL = 2,
9+
LIBEVDEV_READ_FLAG_FORCE_SYNC = 4,
10+
LIBEVDEV_READ_FLAG_BLOCKING = 8
11+
};
12+
13+
struct libevdev* libevdev_new(void);
14+
int libevdev_new_from_fd(int fd, struct libevdev **dev);
15+
void libevdev_free(struct libevdev *dev);
16+
17+
enum libevdev_log_priority {
18+
LIBEVDEV_LOG_ERROR = 10,
19+
LIBEVDEV_LOG_INFO = 20,
20+
LIBEVDEV_LOG_DEBUG = 30
21+
};
22+
23+
typedef void (*libevdev_log_func_t)(enum libevdev_log_priority priority,
24+
void *data,
25+
const char *file, int line,
26+
const char *func,
27+
const char *format, va_list args);
28+
void libevdev_set_log_function(libevdev_log_func_t logfunc, void *data);
29+
void libevdev_set_log_priority(enum libevdev_log_priority priority);
30+
enum libevdev_log_priority libevdev_get_log_priority(void);
31+
typedef void (*libevdev_device_log_func_t)(const struct libevdev *dev,
32+
enum libevdev_log_priority priority,
33+
void *data,
34+
const char *file, int line,
35+
const char *func,
36+
const char *format, va_list args);
37+
void libevdev_set_device_log_function(struct libevdev *dev,
38+
libevdev_device_log_func_t logfunc,
39+
enum libevdev_log_priority priority,
40+
void *data);
41+
42+
enum libevdev_grab_mode {
43+
LIBEVDEV_GRAB = 3,
44+
LIBEVDEV_UNGRAB = 4
45+
};
46+
47+
int libevdev_grab(struct libevdev *dev, enum libevdev_grab_mode grab);
48+
int libevdev_set_fd(struct libevdev* dev, int fd);
49+
int libevdev_change_fd(struct libevdev* dev, int fd);
50+
int libevdev_get_fd(const struct libevdev* dev);
51+
52+
enum libevdev_read_status {
53+
LIBEVDEV_READ_STATUS_SUCCESS = 0,
54+
LIBEVDEV_READ_STATUS_SYNC = 1
55+
};
56+
57+
int libevdev_next_event(struct libevdev *dev, unsigned int flags, struct input_event *ev);
58+
int libevdev_has_event_pending(struct libevdev *dev);
59+
const char* libevdev_get_name(const struct libevdev *dev);
60+
void libevdev_set_name(struct libevdev *dev, const char *name);
61+
const char * libevdev_get_phys(const struct libevdev *dev);
62+
void libevdev_set_phys(struct libevdev *dev, const char *phys);
63+
const char * libevdev_get_uniq(const struct libevdev *dev);
64+
void libevdev_set_uniq(struct libevdev *dev, const char *uniq);
65+
int libevdev_get_id_product(const struct libevdev *dev);
66+
void libevdev_set_id_product(struct libevdev *dev, int product_id);
67+
int libevdev_get_id_vendor(const struct libevdev *dev);
68+
void libevdev_set_id_vendor(struct libevdev *dev, int vendor_id);
69+
int libevdev_get_id_bustype(const struct libevdev *dev);
70+
void libevdev_set_id_bustype(struct libevdev *dev, int bustype);
71+
int libevdev_get_id_version(const struct libevdev *dev);
72+
void libevdev_set_id_version(struct libevdev *dev, int version);
73+
int libevdev_get_driver_version(const struct libevdev *dev);
74+
int libevdev_has_property(const struct libevdev *dev, unsigned int prop);
75+
int libevdev_enable_property(struct libevdev *dev, unsigned int prop);
76+
int libevdev_disable_property(struct libevdev *dev, unsigned int prop);
77+
int libevdev_has_event_type(const struct libevdev *dev, unsigned int type);
78+
int libevdev_has_event_code(const struct libevdev *dev, unsigned int type, unsigned int code);
79+
int libevdev_get_abs_minimum(const struct libevdev *dev, unsigned int code);
80+
int libevdev_get_abs_maximum(const struct libevdev *dev, unsigned int code);
81+
int libevdev_get_abs_fuzz(const struct libevdev *dev, unsigned int code);
82+
int libevdev_get_abs_flat(const struct libevdev *dev, unsigned int code);
83+
int libevdev_get_abs_resolution(const struct libevdev *dev, unsigned int code);
84+
const struct input_absinfo* libevdev_get_abs_info(const struct libevdev *dev, unsigned int code);
85+
int libevdev_get_event_value(const struct libevdev *dev, unsigned int type, unsigned int code);
86+
int libevdev_set_event_value(struct libevdev *dev, unsigned int type, unsigned int code, int value);
87+
int libevdev_fetch_event_value(const struct libevdev *dev, unsigned int type, unsigned int code, int *value);
88+
int libevdev_get_slot_value(const struct libevdev *dev, unsigned int slot, unsigned int code);
89+
int libevdev_set_slot_value(struct libevdev *dev, unsigned int slot, unsigned int code, int value);
90+
int libevdev_fetch_slot_value(const struct libevdev *dev, unsigned int slot, unsigned int code, int *value);
91+
int libevdev_get_num_slots(const struct libevdev *dev);
92+
int libevdev_get_current_slot(const struct libevdev *dev);
93+
void libevdev_set_abs_minimum(struct libevdev *dev, unsigned int code, int val);
94+
void libevdev_set_abs_maximum(struct libevdev *dev, unsigned int code, int val);
95+
void libevdev_set_abs_fuzz(struct libevdev *dev, unsigned int code, int val);
96+
void libevdev_set_abs_flat(struct libevdev *dev, unsigned int code, int val);
97+
void libevdev_set_abs_resolution(struct libevdev *dev, unsigned int code, int val);
98+
void libevdev_set_abs_info(struct libevdev *dev, unsigned int code, const struct input_absinfo *abs);
99+
int libevdev_enable_event_type(struct libevdev *dev, unsigned int type);
100+
int libevdev_disable_event_type(struct libevdev *dev, unsigned int type);
101+
int libevdev_enable_event_code(struct libevdev *dev, unsigned int type, unsigned int code, const void *data);
102+
int libevdev_disable_event_code(struct libevdev *dev, unsigned int type, unsigned int code);
103+
int libevdev_kernel_set_abs_info(struct libevdev *dev, unsigned int code, const struct input_absinfo *abs);
104+
105+
enum libevdev_led_value {
106+
LIBEVDEV_LED_ON = 3,
107+
LIBEVDEV_LED_OFF = 4
108+
};
109+
110+
int libevdev_kernel_set_led_value(struct libevdev *dev, unsigned int code, enum libevdev_led_value value);
111+
int libevdev_kernel_set_led_values(struct libevdev *dev, ...);
112+
int libevdev_set_clock_id(struct libevdev *dev, int clockid);
113+
int libevdev_event_is_type(const struct input_event *ev, unsigned int type);
114+
int libevdev_event_is_code(const struct input_event *ev, unsigned int type, unsigned int code);
115+
const char * libevdev_event_type_get_name(unsigned int type);
116+
const char * libevdev_event_code_get_name(unsigned int type, unsigned int code);
117+
const char* libevdev_property_get_name(unsigned int prop);
118+
int libevdev_event_type_get_max(unsigned int type);
119+
int libevdev_event_type_from_name(const char *name);
120+
int libevdev_event_type_from_name_n(const char *name, size_t len);
121+
int libevdev_event_code_from_name(unsigned int type, const char *name);
122+
int libevdev_event_code_from_name_n(unsigned int type, const char *name, size_t len);
123+
int libevdev_event_value_from_name(unsigned int type, unsigned int code, const char *name);
124+
int libevdev_event_type_from_code_name(const char *name);
125+
int libevdev_event_type_from_code_name_n(const char *name, size_t len);
126+
int libevdev_event_code_from_code_name(const char *name);
127+
int libevdev_event_code_from_code_name_n(const char *name, size_t len);
128+
int libevdev_event_value_from_name_n(unsigned int type, unsigned int code, const char *name, size_t len);
129+
int libevdev_property_from_name(const char *name);
130+
int libevdev_property_from_name_n(const char *name, size_t len);
131+
int libevdev_get_repeat(const struct libevdev *dev, int *delay, int *period);
132+
]])
133+
134+
local c = ffi.load("evdev")
135+
136+
local mod = {
137+
libevdev_new = c.libevdev_new,
138+
libevdev_new_from_fd = c.libevdev_new_from_fd,
139+
libevdev_free = c.libevdev_free,
140+
141+
libevdev_set_log_function = c.libevdev_set_log_function,
142+
libevdev_set_log_priority = c.libevdev_set_log_priority,
143+
libevdev_get_log_priority = c.libevdev_get_log_priority,
144+
libevdev_set_device_log_function = c.libevdev_set_device_log_function,
145+
146+
libevdev_grab = c.libevdev_grab,
147+
libevdev_set_fd = c.libevdev_set_fd,
148+
libevdev_change_fd = c.libevdev_change_fd,
149+
libevdev_get_fd = c.libevdev_get_fd,
150+
151+
libevdev_next_event = c.libevdev_next_event,
152+
libevdev_has_event_pending = c.libevdev_has_event_pending,
153+
libevdev_get_name = c.libevdev_get_name,
154+
libevdev_set_name = c.libevdev_set_name,
155+
libevdev_get_phys = c.libevdev_get_phys,
156+
libevdev_set_phys = c.libevdev_set_phys,
157+
libevdev_get_uniq = c.libevdev_get_uniq,
158+
libevdev_set_uniq = c.libevdev_set_uniq,
159+
libevdev_get_id_product = c.libevdev_get_id_product,
160+
libevdev_set_id_product = c.libevdev_set_id_product,
161+
libevdev_get_id_vendor = c.libevdev_get_id_vendor,
162+
libevdev_set_id_vendor = c.libevdev_set_id_vendor,
163+
libevdev_get_id_bustype = c.libevdev_get_id_bustype,
164+
libevdev_set_id_bustype = c.libevdev_set_id_bustype,
165+
libevdev_get_id_version = c.libevdev_get_id_version,
166+
libevdev_set_id_version = c.libevdev_set_id_version,
167+
libevdev_get_driver_version = c.libevdev_get_driver_version,
168+
libevdev_has_property = c.libevdev_has_property,
169+
libevdev_enable_property = c.libevdev_enable_property,
170+
libevdev_disable_property = c.libevdev_disable_property,
171+
libevdev_has_event_type = c.libevdev_has_event_type,
172+
libevdev_has_event_code = c.libevdev_has_event_code,
173+
libevdev_get_abs_minimum = c.libevdev_get_abs_minimum,
174+
libevdev_get_abs_maximum = c.libevdev_get_abs_maximum,
175+
libevdev_get_abs_fuzz = c.libevdev_get_abs_fuzz,
176+
libevdev_get_abs_flat = c.libevdev_get_abs_flat,
177+
libevdev_get_abs_resolution = c.libevdev_get_abs_resolution,
178+
libevdev_get_abs_info = c.libevdev_get_abs_info,
179+
libevdev_get_event_value = c.libevdev_get_event_value,
180+
libevdev_set_event_value = c.libevdev_set_event_value,
181+
libevdev_fetch_event_value = c.libevdev_fetch_event_value,
182+
libevdev_get_slot_value = c.libevdev_get_slot_value,
183+
libevdev_set_slot_value = c.libevdev_set_slot_value,
184+
libevdev_fetch_slot_value = c.libevdev_fetch_slot_value,
185+
libevdev_get_num_slots = c.libevdev_get_num_slots,
186+
libevdev_get_current_slot = c.libevdev_get_current_slot,
187+
libevdev_set_abs_minimum = c.libevdev_set_abs_minimum,
188+
libevdev_set_abs_maximum = c.libevdev_set_abs_maximum,
189+
libevdev_set_abs_fuzz = c.libevdev_set_abs_fuzz,
190+
libevdev_set_abs_flat = c.libevdev_set_abs_flat,
191+
libevdev_set_abs_resolution = c.libevdev_set_abs_resolution,
192+
libevdev_set_abs_info = c.libevdev_set_abs_info,
193+
libevdev_enable_event_type = c.libevdev_enable_event_type,
194+
libevdev_disable_event_type = c.libevdev_disable_event_type,
195+
libevdev_enable_event_code = c.libevdev_enable_event_code,
196+
libevdev_disable_event_code = c.libevdev_disable_event_code,
197+
libevdev_kernel_set_abs_info = c.libevdev_kernel_set_abs_info,
198+
199+
libevdev_kernel_set_led_value = c.libevdev_kernel_set_led_value,
200+
libevdev_kernel_set_led_values = c.libevdev_kernel_set_led_values,
201+
libevdev_set_clock_id = c.libevdev_set_clock_id,
202+
libevdev_event_is_type = c.libevdev_event_is_type,
203+
libevdev_event_is_code = c.libevdev_event_is_code,
204+
libevdev_event_type_get_name = c.libevdev_event_type_get_name,
205+
libevdev_event_code_get_name = c.libevdev_event_code_get_name,
206+
libevdev_property_get_name = c.libevdev_property_get_name,
207+
libevdev_event_type_get_max = c.libevdev_event_type_get_max,
208+
libevdev_event_type_from_name = c.libevdev_event_type_from_name,
209+
libevdev_event_type_from_name_n = c.libevdev_event_type_from_name_n,
210+
libevdev_event_code_from_name = c.libevdev_event_code_from_name,
211+
libevdev_event_code_from_name_n = c.libevdev_event_code_from_name_n,
212+
libevdev_event_value_from_name = c.libevdev_event_value_from_name,
213+
libevdev_event_type_from_code_name = c.libevdev_event_type_from_code_name,
214+
libevdev_event_type_from_code_name_n = c.libevdev_event_type_from_code_name_n,
215+
libevdev_event_code_from_code_name = c.libevdev_event_code_from_code_name,
216+
libevdev_event_code_from_code_name_n = c.libevdev_event_code_from_code_name_n,
217+
libevdev_event_value_from_name_n = c.libevdev_event_value_from_name_n,
218+
libevdev_property_from_name = c.libevdev_property_from_name,
219+
libevdev_property_from_name_n = c.libevdev_property_from_name_n,
220+
libevdev_get_repeat = c.libevdev_get_repeat,
221+
}
222+
223+
return mod

0 commit comments

Comments
 (0)