aboutsummaryrefslogtreecommitdiffstats
path: root/test-input.c
diff options
context:
space:
mode:
Diffstat (limited to 'test-input.c')
-rw-r--r--test-input.c77
1 files changed, 77 insertions, 0 deletions
diff --git a/test-input.c b/test-input.c
new file mode 100644
index 0000000..1fd5c4c
--- /dev/null
+++ b/test-input.c
@@ -0,0 +1,77 @@
+/* See LICENSE file for copyright and license details. */
+#include "libgamepad.h"
+
+#include <assert.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#define GRAB_DEVICE 0
+
+
+static struct libgamepad_device gamepad;
+
+
+static void
+sigint_handler(int signo)
+{
+ (void) signo;
+
+#if GRAB_DEVICE
+ if (libgamepad_ungrab(&gamepad))
+ perror("libgamepad_ungrab");
+#endif
+
+ libgamepad_close_device(&gamepad);
+ exit(0);
+}
+
+
+int
+main(int argc, char *argv[])
+{
+ struct libgamepad_input_event event;
+ int r;
+
+ if (argc != 2) {
+ fprintf(stderr, "Please provide the path to the subdevice as the only command line argument\n");
+ return 1;
+ }
+
+ if (libgamepad_open_device(&gamepad, AT_FDCWD, argv[1], O_RDONLY)) {
+ perror("libgamepad_open_device");
+ return 1;
+ }
+
+#if GRAB_DEVICE
+ if (libgamepad_grab(&gamepad))
+ perror("libgamepad_grab");
+#endif
+
+ if (signal(SIGINT, sigint_handler) == SIG_ERR) {
+ perror("signal");
+ return 1;
+ }
+
+ for (;;) {
+ r = libgamepad_next_event(&gamepad, &event);
+ if (r <= 0) {
+ if (!r || errno == EINTR)
+ continue;
+ perror("libgamepad_next_event");
+ return 1;
+ }
+ printf("[%lli.%06li] ", (long long int)event.time.tv_sec, event.time.tv_usec);
+ if (event.sync_event)
+ printf("[sync] ");
+ if (event.type == LIBGAMEPAD_BUTTON) {
+ printf("%s ", libgamepad_get_button_name(event.code));
+ } else if (event.type == LIBGAMEPAD_ABSOLUTE_AXIS) {
+ printf("%s ", libgamepad_get_absolute_axis_name(event.code));
+ } else {
+ assert(event.type == LIBGAMEPAD_RELATIVE_AXIS);
+ printf("%s ", libgamepad_get_relative_axis_name(event.code));
+ }
+ printf("%lli\n", (long long int)event.value);
+ }
+}