keytable: Add handler for EV_REL type
authorMauro Carvalho Chehab <mchehab@redhat.com>
Fri, 14 Dec 2012 17:05:17 +0000 (15:05 -0200)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Fri, 14 Dec 2012 17:06:59 +0000 (15:06 -0200)
Those are typically used on mouse events.

Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
utils/keytable/Makefile.am
utils/keytable/keytable.c
utils/keytable/parse.h

index a676b3a..52b1e07 100644 (file)
@@ -30,6 +30,12 @@ sync-with-kernel:
        >> $(srcdir)/parse.h
        @printf "\t{ NULL, 0}\n};\n" >> $(srcdir)/parse.h
 
+       @printf "struct parse_event rel_events[] = {\n" >> $(srcdir)/parse.h
+       @more $(KERNEL_DIR)/include/uapi/linux/input.h | perl -n \
+       -e 'if (m/^\#define\s+(REL_[^\s]+)\s+(0x[\d\w]+|[\d]+)/) ' \
+       -e '{ printf "\t{\"%s\", %s},\n",$$1,$$2; }' \
+       >> $(srcdir)/parse.h
+       @printf "\t{ NULL, 0}\n};\n" >> $(srcdir)/parse.h
 
        @printf "struct parse_event abs_events[] = {\n" >> $(srcdir)/parse.h
        @more $(KERNEL_DIR)/include/uapi/linux/input.h | perl -n \
index 8321a25..16bdfbb 100644 (file)
@@ -1293,6 +1293,22 @@ static void test_event(int fd)
                                printf(" value: 0x%04x\n", ev[i].value);
                                break;
                        }
+                       case EV_REL:                    {
+                               char *name = "";
+
+                               printf("%ld.%06ld: event rel ",
+                                       ev[i].time.tv_sec, ev[i].time.tv_usec);
+
+                               for (p = rel_events; p->name != NULL; p++) {
+                                       if (p->value == ev[i].code) {
+                                               name = p->name;
+                                               break;
+                                       }
+                               }
+                               printf("%s (0x%04x)", name, ev[i].code);
+                               printf(" value: 0x%04x\n", ev[i].value);
+                               break;
+                       }
                        case EV_REP:
                                printf("%ld.%06ld: event repeat: %d\n",
                                        ev[i].time.tv_sec, ev[i].time.tv_usec,
index 9a7712d..1a1d01a 100644 (file)
@@ -508,6 +508,20 @@ struct parse_event key_events[] = {
        {"KEY_MAX", 0x2ff},
        { NULL, 0}
 };
+struct parse_event rel_events[] = {
+       {"REL_X", 0x00},
+       {"REL_Y", 0x01},
+       {"REL_Z", 0x02},
+       {"REL_RX", 0x03},
+       {"REL_RY", 0x04},
+       {"REL_RZ", 0x05},
+       {"REL_HWHEEL", 0x06},
+       {"REL_DIAL", 0x07},
+       {"REL_WHEEL", 0x08},
+       {"REL_MISC", 0x09},
+       {"REL_MAX", 0x0f},
+       { NULL, 0}
+};
 struct parse_event abs_events[] = {
        {"ABS_X", 0x00},
        {"ABS_Y", 0x01},