[PATCH v3 libinput 4/4] tools: add --all to libinput-record
Peter Hutterer
peter.hutterer at who-t.net
Tue Feb 27 05:00:21 UTC 2018
Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
---
tools/libinput-record.c | 71 +++++++++++++++++++++++++++++++++++++++++++++--
tools/libinput-record.man | 8 ++++++
2 files changed, 77 insertions(+), 2 deletions(-)
diff --git a/tools/libinput-record.c b/tools/libinput-record.c
index b0e0ba1b..3cbcd0b8 100644
--- a/tools/libinput-record.c
+++ b/tools/libinput-record.c
@@ -590,6 +590,39 @@ select_device(void)
return device_path;
}
+static inline char **
+all_devices(void)
+{
+ struct dirent **namelist;
+ int ndev;
+ int rc;
+ char **devices = NULL;
+
+ ndev = scandir("/dev/input", &namelist, is_event_node, versionsort);
+ if (ndev <= 0)
+ return NULL;
+
+ devices = zalloc((ndev + 1)* sizeof *devices); /* NULL-terminated */
+ for (int i = 0; i < ndev; i++) {
+ char *device_path;
+
+ rc = xasprintf(&device_path,
+ "/dev/input/%s",
+ namelist[i]->d_name);
+ if (rc == -1)
+ goto error;
+
+ devices[i] = device_path;
+ }
+
+ return devices;
+
+error:
+ if (devices)
+ strv_free(devices);
+ return NULL;
+}
+
static char *
init_output_file(const char *file, bool is_prefix)
{
@@ -820,7 +853,7 @@ init_device(struct record_context *ctx, char *path)
static inline void
usage(void)
{
- printf("Usage: %s [--help] [--multiple] [--autorestart] [--output-file filename] [/dev/input/event0] [...]\n"
+ printf("Usage: %s [--help] [--multiple|--all] [--autorestart] [--output-file filename] [/dev/input/event0] [...]\n"
"Common use-cases:\n"
"\n"
" sudo %s -o recording.yml\n"
@@ -848,6 +881,7 @@ enum options {
OPT_OUTFILE,
OPT_KEYCODES,
OPT_MULTIPLE,
+ OPT_ALL,
};
int
@@ -862,12 +896,13 @@ main(int argc, char **argv)
{ "output-file", required_argument, 0, OPT_OUTFILE },
{ "show-keycodes", no_argument, 0, OPT_KEYCODES },
{ "multiple", no_argument, 0, OPT_MULTIPLE },
+ { "all", no_argument, 0, OPT_ALL },
{ "help", no_argument, 0, OPT_HELP },
{ 0, 0, 0, 0 },
};
struct record_device *d, *tmp;
const char *output_arg = NULL;
- bool multiple = false;
+ bool multiple = false, all = false;
int ndevices;
int rc = 1;
@@ -905,9 +940,18 @@ main(int argc, char **argv)
case OPT_MULTIPLE:
multiple = true;
break;
+ case OPT_ALL:
+ all = true;
+ break;
}
}
+ if (all && multiple) {
+ fprintf(stderr,
+ "Only one of --multiple and --all allowed.\n");
+ goto out;
+ }
+
if (ctx.timeout > 0 && output_arg == NULL) {
fprintf(stderr,
"Option --autorestart requires --output-file\n");
@@ -937,6 +981,29 @@ main(int argc, char **argv)
if (!init_device(&ctx, devnode))
goto out;
}
+ } else if (all) {
+ char **devices; /* NULL-terminated */
+ char **d;
+
+ if (output_arg == NULL) {
+ fprintf(stderr,
+ "Option --all requires --output-file\n");
+ goto out;
+ }
+
+
+ devices = all_devices();
+ d = devices;
+
+ while (*d) {
+ if (!init_device(&ctx, safe_strdup(*d))) {
+ strv_free(devices);
+ goto out;
+ }
+ d++;
+ }
+
+ strv_free(devices);
} else {
char *path;
diff --git a/tools/libinput-record.man b/tools/libinput-record.man
index ba1dd8f0..93436d80 100644
--- a/tools/libinput-record.man
+++ b/tools/libinput-record.man
@@ -22,6 +22,14 @@ If unsure, run without any arguments.
.B \-\-help
Print help
.TP 8
+.B \-\-all
+Record all \fI/dev/input/event*\fR devices available on the system. This
+option should be used in exceptional cases only, the output file is almost
+always too noisy and replaying the recording may not be possible. Use
+\fB\-\-multiple\fR instead.
+This option requires that a \fB\-\-output-file\fR is specified and may not
+be used together with \fB\-\-multiple\fR.
+.TP 8
.B \-\-autorestart=s
Terminate the current recording after
.I s
--
2.14.3
More information about the wayland-devel
mailing list