tools: hook libinput-debug-events into the libinput tool
authorPeter Hutterer <peter.hutterer@who-t.net>
Thu, 11 May 2017 03:44:36 +0000 (13:44 +1000)
committerPeter Hutterer <peter.hutterer@who-t.net>
Wed, 17 May 2017 23:24:22 +0000 (09:24 +1000)
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
meson.build
tools/Makefile.am
tools/libinput-debug-events.c
tools/libinput-tool.c
tools/libinput-tool.h
tools/libinput.1
tools/shared.c
tools/shared.h

index a547890f98d38c101ca47fef80dd19eaf670bc3f..1606401cd751467ab4a332b80a11e509a0f20cfd 100644 (file)
@@ -344,6 +344,7 @@ executable('event-debug',
           event_debug_sources,
           dependencies : dep_libinput,
           include_directories : include_directories('src'),
+          c_args : [ '-DTOOLS_BUILD_STANDALONE=1' ],
           install : false
           )
 
@@ -352,6 +353,7 @@ executable('libinput-debug-events',
           libinput_debug_events_sources,
           dependencies : dep_libinput,
           include_directories : include_directories('src'),
+          c_args : [ '-DTOOLS_BUILD_STANDALONE=1' ],
           install : true
           )
 
@@ -364,7 +366,8 @@ executable('libinput-list-devices',
           install : true,
           )
 
-libinput_sources = [ 'tools/libinput-tool.c' ] + libinput_list_devices_sources
+libinput_sources = [ 'tools/libinput-tool.c' ] + libinput_list_devices_sources + libinput_debug_events_sources
+
 executable('libinput',
           libinput_sources,
           dependencies : dep_libinput,
index 94765ced6100adafd06ff92c8d2e7a72e2913e0f..77b4e74c0012c9ea74f0a09ae9fe8c1c8ba0eae4 100644 (file)
@@ -11,10 +11,12 @@ shared_sources = \
                 shared.c \
                 shared.h
 
+event_debug_sources = libinput-debug-events.c $(shared_sources)
 event_debug_SOURCES = libinput-debug-events.c $(shared_sources)
 event_debug_LDADD = ../src/libinput.la $(LIBUDEV_LIBS) $(LIBEVDEV_LIBS)
 event_debug_LDFLAGS = -no-install
-event_debug_CFLAGS = $(AM_CFLAGS) $(LIBUDEV_CFLAGS) $(LIBEVDEV_CFLAGS)
+event_debug_CFLAGS = $(AM_CFLAGS) $(LIBUDEV_CFLAGS) $(LIBEVDEV_CFLAGS) \
+                    -DTOOLS_BUILD_STANDALONE=1
 
 ptraccel_debug_SOURCES = ptraccel-debug.c
 ptraccel_debug_LDADD = ../src/libfilter.la ../src/libinput.la
@@ -28,12 +30,14 @@ dist_man1_MANS = libinput-list-devices.1
 
 libinput_debug_events_SOURCES = $(event_debug_SOURCES)
 libinput_debug_events_LDADD = $(event_debug_LDADD)
-libinput_debug_events_CFLAGS = $(AM_CFLAGS) $(event_debug_CFLAGS)
+libinput_debug_events_CFLAGS = $(AM_CFLAGS) $(event_debug_CFLAGS) \
+                              -DTOOLS_BUILD_STANDALONE=1
 dist_man1_MANS += libinput-debug-events.1
 
 libinput_SOURCES = \
                   libinput-tool.c \
                   libinput-tool.h \
+                  libinput-debug-events.c \
                   libinput-list-devices.c \
                   $(shared_sources)
 libinput_LDADD = ../src/libinput.la $(LIBUDEV_LIBS) $(LIBEVDEV_LIBS)
index 574fa9ed8eb7cd03cd0deff4d0d2d8d7349274b1..f64708d0ca756da8b64c2fde582c5f6d53961f60 100644 (file)
@@ -39,6 +39,7 @@
 #include <libinput.h>
 #include <libevdev/libevdev.h>
 
+#include "libinput-tool.h"
 #include "shared.h"
 
 uint32_t start_time;
@@ -896,7 +897,7 @@ mainloop(struct libinput *li)
 }
 
 int
-main(int argc, char **argv)
+libinput_debug_events(struct global_options *opts, int argc, char **argv)
 {
        struct libinput *li;
        struct timespec tp;
@@ -909,7 +910,7 @@ main(int argc, char **argv)
        if (tools_parse_args(argc, argv, &context))
                return 1;
 
-       be_quiet = context.options.quiet;
+       be_quiet = context.options.global_options.quiet;
 
        li = tools_open_backend(&context);
        if (!li)
@@ -921,3 +922,13 @@ main(int argc, char **argv)
 
        return 0;
 }
+
+#if TOOLS_BUILD_STANDALONE
+int
+main(int argc, char **argv)
+{
+       struct global_options opts = {0};
+
+       return libinput_debug_events(&opts, argc, argv);
+}
+#endif
index b20ed0f3eb947ea891e2876656470c1f2aba677e..12204abdd23a8f3214aab1f847cdcd2d13035ec5 100644 (file)
@@ -57,12 +57,16 @@ libinput_tool_usage(void)
               "Commands:\n"
               "  list-devices\n"
               "        List all devices with their default configuration options\n"
+              "\n"
+              "  debug-events\n"
+              "        Print events to stdout\n"
               "\n");
 }
 
 enum command {
        COMMAND_NONE,
        COMMAND_LIST_DEVICES,
+       COMMAND_DEBUG_EVENTS,
 };
 
 enum global_opts {
@@ -84,6 +88,8 @@ parse_args_cmd(enum command cmd,
                break;
        case COMMAND_LIST_DEVICES:
                return libinput_list_devices(global_options, argc, argv);
+       case COMMAND_DEBUG_EVENTS:
+               return libinput_debug_events(global_options, argc, argv);
        }
        return true;
 }
@@ -144,6 +150,8 @@ main(int argc, char **argv)
 
        if (streq(command, "list-devices")) {
                cmd = COMMAND_LIST_DEVICES;
+       } else if (streq(command, "debug-events")) {
+               cmd = COMMAND_DEBUG_EVENTS;
        } else {
                fprintf(stderr, "Invalid command '%s'\n", command);
                return EXIT_FAILURE;
index 7b3b8b69f84ac07d1183092e8dd2436380e8f185..c4518579fbcee4ccecb59212fa49824e1d8f257a 100644 (file)
@@ -35,5 +35,6 @@ struct global_options {
 
 void libinput_tool_usage(void);
 int libinput_list_devices(struct global_options *opts, int argc, char **argv);
+int libinput_debug_events(struct global_options *opts, int argc, char **argv);
 
 #endif
index 2f2476e4ae882c362523d5bcebf0aaafe156bc99..0dd596e68f6ed614608cea521fd7fbdc778bce71 100644 (file)
@@ -42,12 +42,70 @@ will be omitted. The exact behavior of quiet mode depends on the
 All commands support a
 .B --help
 argument that prints command-specific usage
-information
+information (e.g.
+.B libinput debug-events --help)
+.TP 8
+.B debug-events [ARGS]
+Print all events as seen by libinput. See section
+.B debug-events
 .TP 8
 .B list-devices
 List all devices recognized by libinput. See section
 .B list-devices
 
+.SS debug-events [...]
+Print all events from these devices.
+.PP
+This is a debugging tool only, its output may change at any time. Do not
+rely on the output.
+.PP
+.B --device /path/to/device
+.IP
+Use a path backend for the device for the given path. This option is
+mutually exclusive with the
+.B --udev
+option.
+.PP
+.B --grab
+.IP
+Exclusively grab all devices. This will prevent events from being sent to
+any other caller. It is recommended this option is only used together with
+the
+.B --device
+option, otherwise a user may not be able to terminate this tool.
+.PP
+.B --udev <name>
+.IP
+Use a udev backend for this context with the given seat name. This option is
+mutually exclusive with the
+.B --device
+option.
+.PP
+.B --show-keycodes
+.IP
+Print all keycodes as-is. Without this argument, most key events shown by
+this tool are obfuscated to avoid passwords and other sensitive
+information showing up in the output.
+.PP
+.B --enable-<feature>
+or
+.B --disable-<feature>
+.IP
+Enable or disable the given feature. For a full list of features, see the
+.B --help
+output. Requests to enable or disable a feature on a device that does
+not provide that feature, or where that feature is already enabled or
+disabled will be silently ignored.
+.PP
+.B --set-<feature>=<value>
+.IP
+Set the given feature to the given value. For a full list of features, see
+the
+.B --help
+output. Requests to set a feature on a device that does not provide that
+feature, or where that feature is already set to that value, or where the
+value is not available on that device will be silently ignored
+
 .SS list-devices
 List all devices recognized by libinput. Each device shows available
 configurations the respective
index 830e0cb4ea9aea20943623660ae86d42a81b716d..af23415f91402a70b40d18d00d85bf5dddd2b5b7 100644 (file)
@@ -34,6 +34,7 @@
 #include <libevdev/libevdev.h>
 #include <libinput-util.h>
 
+#include "libinput-tool.h"
 #include "shared.h"
 
 enum options {
@@ -94,8 +95,13 @@ log_handler(struct libinput *li,
 void
 tools_usage(void)
 {
-       printf("Usage: %s [options] [--udev [<seat>]|--device /dev/input/event0]\n"
-              "--udev <seat>.... Use udev device discovery (default).\n"
+#if TOOLS_BUILD_STANDALONE
+       printf("Usage: %s [options] [--udev [<seat>]|--device /dev/input/event0]\n",
+               program_invocation_short_name);
+#else
+       printf("Usage: libinput debug-events [options] [--udev [<seat>]|--device /dev/input/event0]\n");
+#endif
+       printf("--udev <seat>.... Use udev device discovery (default).\n"
               "                  Specifying a seat ID is optional.\n"
               "--device /path/to/device .... open the given device only\n"
               "\n"
@@ -127,10 +133,12 @@ tools_usage(void)
               "\n"
               "Other options:\n"
               "--grab .......... Exclusively grab all openend devices\n"
-              "--verbose ....... Print debugging output.\n"
-              "--quiet ......... Only print libinput messages, useful in combination with --verbose.\n"
-              "--help .......... Print this help.\n",
-               program_invocation_short_name);
+              "--help .......... Print this help.\n"
+              );
+#if TOOLS_BUILD_STANDALONE
+       printf("--verbose ....... Print debugging output.\n"
+              "--quiet ......... Only print libinput messages, useful in combination with --verbose.\n");
+#endif
 }
 
 void
@@ -172,8 +180,10 @@ tools_parse_args(int argc, char **argv, struct tools_context *context)
                        { "udev",                      no_argument,       0, OPT_UDEV },
                        { "grab",                      no_argument,       0, OPT_GRAB },
                        { "help",                      no_argument,       0, OPT_HELP },
+#if TOOLS_BUILD_STANDALONE
                        { "verbose",                   no_argument,       0, OPT_VERBOSE },
                        { "quiet",                     no_argument,       0, OPT_QUIET },
+#endif
                        { "enable-tap",                no_argument,       0, OPT_TAP_ENABLE },
                        { "disable-tap",               no_argument,       0, OPT_TAP_DISABLE },
                        { "enable-drag",               no_argument,       0, OPT_DRAG_ENABLE },
@@ -224,7 +234,7 @@ tools_parse_args(int argc, char **argv, struct tools_context *context)
                        options->grab = 1;
                        break;
                case OPT_VERBOSE:
-                       options->verbose = 1;
+                       options->global_options.verbose = 1;
                        break;
                case OPT_TAP_ENABLE:
                        options->tapping = 1;
@@ -363,7 +373,7 @@ tools_parse_args(int argc, char **argv, struct tools_context *context)
                        options->show_keycodes = true;
                        break;
                case OPT_QUIET:
-                       options->quiet = true;
+                       options->global_options.quiet = true;
                        break;
                default:
                        tools_usage();
@@ -482,9 +492,15 @@ tools_open_backend(struct tools_context *context)
        struct tools_options *options = &context->options;
 
        if (options->backend == BACKEND_UDEV) {
-               li = open_udev(&interface, context, options->seat, options->verbose);
+               li = open_udev(&interface,
+                              context,
+                              options->seat,
+                              options->global_options.verbose);
        } else if (options->backend == BACKEND_DEVICE) {
-               li = open_device(&interface, context, options->device, options->verbose);
+               li = open_device(&interface,
+                                context,
+                                options->device,
+                                options->global_options.verbose);
        } else
                abort();
 
index d19d52aad4f9275aa54cc11020b432769ff5111a..03838e145e3be0863b5ffd669ee4e3a76979ccf7 100644 (file)
 
 #include <libinput.h>
 
+#include "libinput-tool.h"
+
 enum tools_backend {
        BACKEND_DEVICE,
        BACKEND_UDEV
 };
 
 struct tools_options {
+       struct global_options global_options;
        enum tools_backend backend;
        const char *device; /* if backend is BACKEND_DEVICE */
        const char *seat; /* if backend is BACKEND_UDEV */
        int grab; /* EVIOCGRAB */
        bool show_keycodes; /* show keycodes */
-       bool quiet; /* only print libinput messages */
 
-       int verbose;
        int tapping;
        int drag;
        int drag_lock;