From cf196d53c94a51797733e199c0dfb6989f912327 Mon Sep 17 00:00:00 2001 From: Sung-Jin Park Date: Mon, 20 Aug 2018 16:21:43 +0900 Subject: [PATCH] udev-seat: add apis to set udev monitor's event source and buffer size Change-Id: Ib41e5421c174e2d5cc26bc19f077a045ad7a2e19 Signed-off-by: Sung-Jin Park --- src/libinput.h | 22 +++++++++++++++++++ src/libinput.sym | 2 ++ src/udev-seat.c | 55 +++++++++++++++++++++++++++++++++++++++++++----- 3 files changed, 74 insertions(+), 5 deletions(-) diff --git a/src/libinput.h b/src/libinput.h index e0ec4a76..b9eee5b1 100644 --- a/src/libinput.h +++ b/src/libinput.h @@ -3907,6 +3907,28 @@ int libinput_udev_assign_seat(struct libinput *libinput, const char *seat_id); +/** + * @ingroup base + * + * Set the event source of udev monitor. + * The default event source of udev monitor is "udev". + * + * @param source The event source of udev monitor + */ +void +libinput_udev_set_udev_monitor_event_source(const char *source); + +/** + * @ingroup base + * + * Set the buffer size of udev monitor. + * + * @param size The buffer size of udev monitor. + * @return 0 on success or -1 on failure. + */ +int +libinput_udev_set_udev_monitor_buffer_size(int size); + /** * @ingroup base * diff --git a/src/libinput.sym b/src/libinput.sym index a8266634..7502dbac 100644 --- a/src/libinput.sym +++ b/src/libinput.sym @@ -309,6 +309,8 @@ LIBINPUT_1.7 { libinput_event_switch_get_switch; libinput_event_switch_get_time; libinput_event_switch_get_time_usec; + libinput_udev_set_udev_monitor_event_source; + libinput_udev_set_udev_monitor_buffer_size; } LIBINPUT_1.5; LIBINPUT_1.9 { diff --git a/src/udev-seat.c b/src/udev-seat.c index a276601f..909809ac 100644 --- a/src/udev-seat.c +++ b/src/udev-seat.c @@ -34,6 +34,21 @@ static const char default_seat[] = "seat0"; static const char default_seat_name[] = "default"; +char *_udev_monitor_event_source = NULL; +int _udev_monitor_buffer_size = 0; + +static char * +_udev_get_udev_monitor_event_source(void) +{ + return _udev_monitor_event_source; +} + +static int +_udev_get_udev_monitor_buffer_size(void) +{ + return _udev_monitor_buffer_size; +} + static struct udev_seat * udev_seat_create(struct udev_input *input, const char *device_seat, @@ -307,15 +322,18 @@ udev_input_enable(struct libinput *libinput) if (input->udev_monitor || !input->seat_id) return 0; - char *env; + char *env = _udev_get_udev_monitor_event_source(); - if ((env = getenv("UDEV_MONITOR_EVENT_SOURCE"))) + if (env) { - log_info(libinput, "udev: event source is %s.\n", env); input->udev_monitor = udev_monitor_new_from_netlink(udev, env); + log_info(libinput, "udev: event source is %s.\n", env); } else + { input->udev_monitor = udev_monitor_new_from_netlink(udev, "udev"); + log_info(libinput, "udev: event source is udev (default event source).\n"); + } if (!input->udev_monitor) { log_info(libinput, @@ -323,8 +341,9 @@ udev_input_enable(struct libinput *libinput) return -1; } - env = getenv("UDEV_MONITOR_BUFFER_SIZE"); - if (env && (buf_size = atoi(env))) + buf_size = _udev_get_udev_monitor_buffer_size(); + + if (buf_size) { log_info(libinput,"udev: set receive buffer size = %d\n", buf_size); udev_monitor_set_receive_buffer_size(input->udev_monitor, buf_size); @@ -435,6 +454,31 @@ static const struct libinput_interface_backend interface_backend = { .device_change_seat = udev_device_change_seat, }; +LIBINPUT_EXPORT void +libinput_udev_set_udev_monitor_event_source(const char *source) +{ + if (source) + { + if (_udev_monitor_event_source) + { + free(_udev_monitor_event_source); + _udev_monitor_event_source = NULL; + } + + _udev_monitor_event_source = strdup(source); + } +} + +LIBINPUT_EXPORT int +libinput_udev_set_udev_monitor_buffer_size(int size) +{ + if (0 >= size) + return -1; + + _udev_monitor_buffer_size = size; + return 0; +} + LIBINPUT_EXPORT struct libinput * libinput_udev_create_context(const struct libinput_interface *interface, void *user_data, @@ -455,6 +499,7 @@ libinput_udev_create_context(const struct libinput_interface *interface, } input->udev = udev_ref(udev); + _udev_monitor_event_source = strdup("udev"); return &input->base; } -- 2.34.1