[PATCH] [media] v4l-utils: report rc protocol while testing

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



If you have a remote and want to see what protocol it uses, simply run
the following. That's enough to write a new keymap.

./ir-keytable  -p rc-5,nec,rc-6,jvc,sony,sanyo,sharp,xmp -t
Testing events. Please, press CTRL-C to abort.
1474415431.689685: event type EV_MSC(0x04): protocol = RC_TYPE_RC6_MCE
1474415431.689685: event type EV_MSC(0x04): scancode = 0x800f040e
1474415431.689685: event type EV_SYN(0x00).
1474415443.857071: event type EV_MSC(0x04): protocol = RC_TYPE_RC5
1474415443.857071: event type EV_MSC(0x04): scancode = 0x1e0f
1474415443.857071: event type EV_SYN(0x00).

Signed-off-by: Sean Young <sean@xxxxxxxx>
---
 utils/keytable/Makefile.am |  7 +++++++
 utils/keytable/keytable.c  |  6 ++++++
 utils/keytable/parse.h     | 26 ++++++++++++++++++++++++++
 3 files changed, 39 insertions(+)

diff --git a/utils/keytable/Makefile.am b/utils/keytable/Makefile.am
index 62b90ad..73cd676 100644
--- a/utils/keytable/Makefile.am
+++ b/utils/keytable/Makefile.am
@@ -59,6 +59,13 @@ sync-with-kernel:
 	>> $(srcdir)/parse.h
 	@printf "\t{ NULL, 0}\n};\n" >> $(srcdir)/parse.h
 
+	@printf "struct parse_event rc_type_events[] = {\n" >> $(srcdir)/parse.h
+	@more $(KERNEL_DIR)/usr/include/linux/input-event-codes.h | perl -n \
+	-e 'if (m/^\#define\s+(RC_TYPE_[^\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
+
 	@-mkdir -p $(srcdir)/rc_keymaps
 	@-rm $(srcdir)/rc_keymaps/*
 	@-cp $(srcdir)/rc_keymaps_userspace/* $(srcdir)/rc_keymaps/
diff --git a/utils/keytable/keytable.c b/utils/keytable/keytable.c
index 3922ad2..d4c295b 100644
--- a/utils/keytable/keytable.c
+++ b/utils/keytable/keytable.c
@@ -55,6 +55,10 @@ struct input_keymap_entry_v2 {
 #define EVIOCSKEYCODE_V2	_IOW('E', 0x04, struct input_keymap_entry_v2)
 #endif
 
+#ifndef MSC_RC_TYPE
+#define MSC_RC_TYPE 6
+#endif
+
 struct keytable_entry {
 	u_int32_t scancode;
 	u_int32_t keycode;
@@ -1294,6 +1298,8 @@ static void test_event(int fd)
 			case EV_MSC:
 				if (ev[i].code == MSC_SCAN)
 					printf(_(": scancode = 0x%02x\n"), ev[i].value);
+				else if (ev[i].code == MSC_RC_TYPE)
+					printf(_(": protocol = %s\n"), get_event_name(rc_type_events, ev[i].value));
 				else
 					printf(_(": code = %s(0x%02x), value = %d\n"),
 						get_event_name(msc_events, ev[i].code),
diff --git a/utils/keytable/parse.h b/utils/keytable/parse.h
index 67eb1a6..10f58ef 100644
--- a/utils/keytable/parse.h
+++ b/utils/keytable/parse.h
@@ -25,6 +25,7 @@ struct parse_event msc_events[] = {
 	{"MSC_RAW", 0x03},
 	{"MSC_SCAN", 0x04},
 	{"MSC_TIMESTAMP", 0x05},
+	{"MSC_RC_TYPE", 0x06},
 	{"MSC_MAX", 0x07},
 	{ NULL, 0}
 };
@@ -639,3 +640,28 @@ struct parse_event abs_events[] = {
 	{"ABS_MAX", 0x3f},
 	{ NULL, 0}
 };
+struct parse_event rc_type_events[] = {
+	{"RC_TYPE_UNKNOWN", 0},
+	{"RC_TYPE_OTHER", 1},
+	{"RC_TYPE_RC5", 2},
+	{"RC_TYPE_RC5X", 3},
+	{"RC_TYPE_RC5_SZ", 4},
+	{"RC_TYPE_JVC", 5},
+	{"RC_TYPE_SONY12", 6},
+	{"RC_TYPE_SONY15", 7},
+	{"RC_TYPE_SONY20", 8},
+	{"RC_TYPE_NEC", 9},
+	{"RC_TYPE_NECX", 10},
+	{"RC_TYPE_NEC32", 11},
+	{"RC_TYPE_SANYO", 12},
+	{"RC_TYPE_MCE_KBD", 13},
+	{"RC_TYPE_RC6_0", 14},
+	{"RC_TYPE_RC6_6A_20", 15},
+	{"RC_TYPE_RC6_6A_24", 16},
+	{"RC_TYPE_RC6_6A_32", 17},
+	{"RC_TYPE_RC6_MCE", 18},
+	{"RC_TYPE_SHARP", 19},
+	{"RC_TYPE_XMP", 20},
+	{"RC_TYPE_CEC", 21},
+	{ NULL, 0}
+};
-- 
2.7.4

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux