udev-seat: add apis to set udev monitor's event source and buffer size
authorSung-Jin Park <sj76.park@samsung.com>
Mon, 20 Aug 2018 07:21:43 +0000 (16:21 +0900)
committerduna.oh <duna.oh@samsung.com>
Fri, 27 Jan 2023 05:21:13 +0000 (14:21 +0900)
Change-Id: Ib41e5421c174e2d5cc26bc19f077a045ad7a2e19
Signed-off-by: Sung-Jin Park <sj76.park@samsung.com>
src/libinput.h
src/libinput.sym
src/udev-seat.c

index 9a59cbe..98b6c52 100644 (file)
@@ -3836,6 +3836,28 @@ libinput_udev_assign_seat(struct libinput *libinput,
 /**
  * @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
+ *
  * Create a new libinput context that requires the caller to manually add or
  * remove devices with libinput_path_add_device() and
  * libinput_path_remove_device().
index 08ab6d1..aeaba32 100644 (file)
@@ -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 {
index a276601..909809a 100644 (file)
 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;
 }