From: Sung-Jin Park Date: Mon, 20 Aug 2018 07:21:43 +0000 (+0900) Subject: udev-seat: add apis to set udev monitor's event source and buffer size X-Git-Tag: submit/tizen/20180820.112831^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b7a74486992d1c7dea438ba659b0dec0b1845613;p=platform%2Fupstream%2Flibinput.git udev-seat: add apis to set udev monitor's event source and buffer size Change-Id: Ib41e5421c174e2d5cc26bc19f077a045ad7a2e19 Signed-off-by: Sung-Jin Park --- diff --git a/src/libinput.h b/src/libinput.h index 3496a47f..13be6e7d 100644 --- a/src/libinput.h +++ b/src/libinput.h @@ -3206,6 +3206,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 f72e13f5..4ef2c27b 100644 --- a/src/libinput.sym +++ b/src/libinput.sym @@ -309,4 +309,6 @@ 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; diff --git a/src/udev-seat.c b/src/udev-seat.c index 4878c3cf..13a61b5f 100644 --- a/src/udev-seat.c +++ b/src/udev-seat.c @@ -36,6 +36,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, @@ -259,15 +274,18 @@ udev_input_enable(struct libinput *libinput) if (input->udev_monitor) 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, @@ -275,8 +293,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); @@ -386,6 +405,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, @@ -408,6 +452,7 @@ libinput_udev_create_context(const struct libinput_interface *interface, } input->udev = udev_ref(udev); + _udev_monitor_event_source = strdup("udev"); return &input->base; }