正确收到HID代码
我能够通过/ dev / hIDraw2看到计算机收到HID(下面的输出是按F24,HID代码0x73基于:https://gist.github.com/MightyPork/6da26e382a7ad91b5496ee55fdc73db2.
sudo hexdump -C /dev/hIDraw200000000 00 00 00 00 00 00 00 00 00 00 73 00 00 00 00 00 |..........s.....|
HID代码未转换为事件
但是,一旦我尝试showkey -s,evtest或xev,我什么都没有,就好像我没有按键.所有“普通”HID代码都可以工作(实际上这条消息现在正在键盘上输入),所以它必须是收到HID代码和翻译之间的东西.
有趣的是,我的evtest功能没有列出F13-F24的事件代码(见下文),但我已经看到这些功能列在其他人的输出中(例如https://unix.stackexchange.com/questions/130656/how-to-get-all-my-keys-to-send-keycodes).
input driver version is 1.0.1input device ID: bus 0x3 vendor 0x1d6b product 0x104 version 0x101input device name: "CPMH 122 Gadget"Supported events: Event type 0 (EV_SYN) Event type 1 (EV_KEY) Event code 1 (KEY_ESC) Event code 2 (KEY_1) Event code 3 (KEY_2) Event code 4 (KEY_3) Event code 5 (KEY_4) Event code 6 (KEY_5) Event code 7 (KEY_6) Event code 8 (KEY_7) Event code 9 (KEY_8) Event code 10 (KEY_9) Event code 11 (KEY_0) Event code 12 (KEY_MINUS) Event code 13 (KEY_EQUAL) Event code 14 (KEY_BACKSPACE) Event code 15 (KEY_TAB) Event code 16 (KEY_Q) Event code 17 (KEY_W) Event code 18 (KEY_E) Event code 19 (KEY_R) Event code 20 (KEY_T) Event code 21 (KEY_Y) Event code 22 (KEY_U) Event code 23 (KEY_I) Event code 24 (KEY_O) Event code 25 (KEY_P) Event code 26 (KEY_leftBRACE) Event code 27 (KEY_RIGHTBRACE) Event code 28 (KEY_ENTER) Event code 29 (KEY_leftCTRL) Event code 30 (KEY_A) Event code 31 (KEY_S) Event code 32 (KEY_D) Event code 33 (KEY_F) Event code 34 (KEY_G) Event code 35 (KEY_H) Event code 36 (KEY_J) Event code 37 (KEY_K) Event code 38 (KEY_L) Event code 39 (KEY_SEMIColON) Event code 40 (KEY_APOSTROPHE) Event code 41 (KEY_GRAVE) Event code 42 (KEY_leftSHIFT) Event code 43 (KEY_BACKSLASH) Event code 44 (KEY_Z) Event code 45 (KEY_X) Event code 46 (KEY_C) Event code 47 (KEY_V) Event code 48 (KEY_B) Event code 49 (KEY_N) Event code 50 (KEY_M) Event code 51 (KEY_COMMA) Event code 52 (KEY_DOT) Event code 53 (KEY_SLASH) Event code 54 (KEY_RIGHTSHIFT) Event code 55 (KEY_KPASTERISK) Event code 56 (KEY_leftALT) Event code 57 (KEY_SPACE) Event code 58 (KEY_CAPSLOCK) Event code 59 (KEY_F1) Event code 60 (KEY_F2) Event code 61 (KEY_F3) Event code 62 (KEY_F4) Event code 63 (KEY_F5) Event code 64 (KEY_F6) Event code 65 (KEY_F7) Event code 66 (KEY_F8) Event code 67 (KEY_F9) Event code 68 (KEY_F10) Event code 69 (KEY_NUmlock) Event code 70 (KEY_SCRolLLOCK) Event code 71 (KEY_KP7) Event code 72 (KEY_KP8) Event code 73 (KEY_KP9) Event code 74 (KEY_KPMINUS) Event code 75 (KEY_KP4) Event code 76 (KEY_KP5) Event code 77 (KEY_KP6) Event code 78 (KEY_KPPLUS) Event code 79 (KEY_KP1) Event code 80 (KEY_KP2) Event code 81 (KEY_KP3) Event code 82 (KEY_KP0) Event code 83 (KEY_KPDOT) Event code 86 (KEY_102ND) Event code 87 (KEY_F11) Event code 88 (KEY_F12) Event code 96 (KEY_KPENTER) Event code 97 (KEY_RIGHTCTRL) Event code 98 (KEY_KPSLASH) Event code 99 (KEY_SYSRQ) Event code 100 (KEY_RIGHTALT) Event code 102 (KEY_HOME) Event code 103 (KEY_UP) Event code 104 (KEY_PAGEUP) Event code 105 (KEY_left) Event code 106 (KEY_RIGHT) Event code 107 (KEY_END) Event code 108 (KEY_DOWN) Event code 109 (KEY_PAGEDOWN) Event code 110 (KEY_INSERT) Event code 111 (KEY_DELETE) Event code 119 (KEY_PAUSE) Event code 125 (KEY_leftMeta) Event code 126 (KEY_RIGHTMeta) Event code 127 (KEY_COMPOSE) Event type 4 (EV_MSC) Event code 4 (MSC_SCAN) Event type 17 (EV_LED) Event code 0 (LED_NUML) state 1 Event code 1 (LED_CAPSL) state 0 Event code 2 (LED_SCRolLL) state 0 Event code 3 (LED_COMPOSE) state 0 Event code 4 (LED_KANA) state 0Key repeat handling: Repeat type 20 (EV_REP) Repeat code 0 (REP_DELAY) Value 250 Repeat code 1 (REP_PERIOD) Value 33
是司机吗?
根据我的evtest EV_KEY功能与其他人之间的差异,我看到我认为可能是因为我的驱动程序无法将USB HID代码映射到相应的事件代码.
使用hwinfo我可以告诉我的键盘正在使用hID-generic驱动程序.查看hID-input.c(http://elixir.free-electrons.com/linux/v3.5.2/source/drivers/hid/hid-input.c)的源代码我可以看到映射确实存在(HID代码0x73映射到194,映射到KEY_F24事件,至少根据我在此处找到的内容:https://github.com/wayland-project/libinput/blob/master/include/linux/input-event-codes.h).因此,我从在线阅读的内容中得到了引导,认为问题存在于hID-generic和libinput之间.
我不知道从哪里开始,没有任何东西从evtest中出来我不知道要把钥匙映射到什么地方.只是没有定义这些键的功能吗?反正有没有指定我的键盘功能evdev?
解决方法 发现了问题.在查看了usbhID的代码之后,我意识到这是分配evtest发现的可用事件代码的原因.为此,它通过HID描述符进行读取.事实证明,我使用了通用HID描述符,逻辑最大值和使用最大值切断了编号较高的HID代码.我使用 https://github.com/DIGImend/hidrd来获取二进制描述符的可编辑版本,然后将Usage Maximum和Logical Maximum更改为我使用的最高HID代码.将其重新转换为二进制格式,上传并启动键盘.现在evtest识别所有键.这是我的原始规格:
Usage Page (Desktop),; Generic desktop controls (01h)Usage (Keyboard),; Keyboard (06h,application collection)Collection (Application),Usage Page (Keyboard),; Keyboard/keypad (07h) Usage Minimum (KB leftcontrol),; Keyboard left control (E0h,dynamic value) Usage Maximum (KB Right GUI),; Keyboard right GUI (E7h,dynamic value) Logical Minimum (0),Logical Maximum (1),Report Size (1),Report Count (8),input (Variable),Report Count (1),Report Size (8),input (Constant,Variable),Report Count (5),Usage Page (LED),; LEDs (08h) Usage Minimum (01h),Usage Maximum (05h),Output (Variable),Report Size (3),Output (Constant,Report Count (6),Logical Minimum (0),Logical Maximum (101),; Keyboard/keypad (07h) Usage Minimum (None),; No event (00h,selector) Usage Maximum (KB Application),; Keyboard Application (65h,selector) input,End Collection
我的更新规格:
Usage Page (Desktop),Logical Maximum (115),selector) Usage Maximum (KB F24),; Keyboard F24 (73h,End Collection总结
以上是内存溢出为你收集整理的如何在Linux中调试USB HID scancode-keycode转换全部内容,希望文章能够帮你解决如何在Linux中调试USB HID scancode-keycode转换所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)