USB keyboard partially functioning
Hans Petter Selasky
hselasky at c2i.net
Sat Aug 11 09:52:12 UTC 2012
On Saturday 11 August 2012 11:25:25 Kra OTN wrote:
> Hi guys,
>
> I'm currently facing a problem with my Corsair K60 USB keyboard on a system
> that is running FreeBSD9 with a standard kernel (9.0-RELEASE FreeBSD
> 9.0-RELEASE #0: Tue Jan 3 07:46:30 UTC 2012
> root at farrell.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC amd64)
>
> The keyboard is detected with the following device nodes:
>
> ---------------------------------------------------------------------------
> ---------------------------------------------------------------------------
> -------------------------- *syslog:*
> Aug 11 11:05:47 desktop kernel: ugen0.3: <Corsair> at usbus0
> Aug 11 11:05:47 desktop kernel: ukbd_probe:
> Aug 11 11:05:47 desktop kernel: ukbd_probe:
> Aug 11 11:05:47 desktop kernel: ukbd0: <Corsair Corsair Vengeance K60
> Keyboard, class 0/0, rev 2.00/1.00, addr 3> on usbus0
> Aug 11 11:05:47 desktop kernel: ukbd_attach: Parsing HID descriptor of 65
> bytes
> Aug 11 11:05:47 desktop kernel: ukbd_parse_hid: Found left control
> Aug 11 11:05:47 desktop kernel: ukbd_parse_hid: Found right control
> Aug 11 11:05:47 desktop kernel: ukbd_parse_hid: Found left shift
> Aug 11 11:05:47 desktop kernel: ukbd_parse_hid: Found right shift
> Aug 11 11:05:47 desktop kernel: ukbd_parse_hid: Found left alt
> Aug 11 11:05:47 desktop kernel: ukbd_parse_hid: Found right alt
> Aug 11 11:05:47 desktop kernel: ukbd_parse_hid: Found left GUI
> Aug 11 11:05:47 desktop kernel: ukbd_parse_hid: Found right GUI
> Aug 11 11:05:47 desktop kernel: ukbd_parse_hid: Found keyboard events
> Aug 11 11:05:47 desktop kernel: ukbd_parse_hid: Found keyboard numlock
> Aug 11 11:05:47 desktop kernel: ukbd_parse_hid: Found keyboard capslock
> Aug 11 11:05:47 desktop kernel: ukbd_parse_hid: Found keyboard scrolllock
> Aug 11 11:05:47 desktop kernel: ukbd_set_leds: leds=0x00
> Aug 11 11:05:47 desktop kernel: ukbd_set_leds: leds=0x02
> Aug 11 11:05:47 desktop kernel: kbd2 at ukbd0
> Aug 11 11:05:47 desktop kernel: ukbd_probe:
> Aug 11 11:05:47 desktop kernel: ukbd_set_leds_callback: len=1, id=0
> Aug 11 11:05:47 desktop kernel: uhid0: <Corsair Corsair Vengeance K60
> Keyboard, class 0/0, rev 2.00/1.00, addr 3> on usbus0
> Aug 11 11:05:47 desktop kernel: ukbd_probe:
> Aug 11 11:05:47 desktop kernel: ukbd_probe:
> Aug 11 11:05:47 desktop kernel: ukbd1: <Corsair Corsair Vengeance K60
> Keyboard, class 0/0, rev 2.00/1.00, addr 3> on usbus0
> Aug 11 11:05:47 desktop kernel: ukbd_attach: Parsing HID descriptor of 37
> bytes
> Aug 11 11:05:47 desktop kernel: ukbd_parse_hid: Found left control
> Aug 11 11:05:47 desktop kernel: ukbd_parse_hid: Found right control
> Aug 11 11:05:47 desktop kernel: ukbd_parse_hid: Found left shift
> Aug 11 11:05:47 desktop kernel: ukbd_parse_hid: Found right shift
> Aug 11 11:05:47 desktop kernel: ukbd_parse_hid: Found left alt
> Aug 11 11:05:47 desktop kernel: ukbd_parse_hid: Found right alt
> Aug 11 11:05:47 desktop kernel: ukbd_parse_hid: Found left GUI
> Aug 11 11:05:47 desktop kernel: ukbd_parse_hid: Found right GUI
> Aug 11 11:05:47 desktop kernel: ukbd_parse_hid: Found keyboard events
> Aug 11 11:05:47 desktop kernel: ukbd_set_leds: leds=0x00
> Aug 11 11:05:47 desktop kernel: ukbd_set_leds: leds=0x02
> Aug 11 11:05:47 desktop kernel: kbd3 at ukbd1
> ---------------------------------------------------------------------------
> ---------------------------------------------------------------------------
> -------------------------- *usbconfig:*
> ugen0.1: <EHCI root HUB Intel> at usbus0, cfg=0 md=HOST spd=HIGH (480Mbps)
> pwr=SAVE
> ugen1.1: <XHCI root HUB 0x1b21> at usbus1, cfg=0 md=HOST spd=SUPER
> (5.0Gbps) pwr=SAVE
> ugen2.1: <XHCI root HUB 0x1b21> at usbus2, cfg=0 md=HOST spd=SUPER
> (5.0Gbps) pwr=SAVE
> ugen3.1: <EHCI root HUB Intel> at usbus3, cfg=0 md=HOST spd=HIGH (480Mbps)
> pwr=SAVE
> ugen0.2: <product 0x0024 vendor 0x8087> at usbus0, cfg=0 md=HOST spd=HIGH
> (480Mbps) pwr=SAVE
> ugen3.2: <product 0x0024 vendor 0x8087> at usbus3, cfg=0 md=HOST spd=HIGH
> (480Mbps) pwr=SAVE
> ugen3.3: <product 0x3000 vendor 0x0cf3> at usbus3, cfg=0 md=HOST spd=FULL
> (12Mbps) pwr=ON
> ugen0.3: <Corsair Vengeance K60 Keyboard Corsair> at usbus0, cfg=0 md=HOST
> spd=FULL (12Mbps) pwr=ON
> ---------------------------------------------------------------------------
> ---------------------------------------------------------------------------
> --------------------------
>
> As the syslog suggests right/left shift, ctrl and alt keys are working
> correctly. But those keys are the _only_ functioning keys. Debugging ukbd
> (sysctl hw.usb.ukbd.debug=15) gives me the following output on a working
> key:
> ---------------------------------------------------------------------------
> ---------------------------------------------------------------------------
> -------------------------- ukbd_put_key: 0xe2 (226) pressed
> ukbd_intr_callback: actlen=15 bytes
> ukbd_intr_callback: modifiers = 0x0004
> ukbd_put_key: 0x4e0 (1248) released
> ---------------------------------------------------------------------------
> ---------------------------------------------------------------------------
> --------------------------
>
> But when pressing a key that is not working, the "a" for example I get the
> following output:
> ---------------------------------------------------------------------------
> ---------------------------------------------------------------------------
> -------------------------- Aug 11 11:12:45 desktop kernel:
> ukbd_intr_callback: actlen=15 bytes Aug 11 11:12:45 desktop kernel:
> ukbd_intr_callback: modifiers = 0x0000 Aug 11 11:12:46 desktop kernel:
> ukbd_intr_callback: actlen=15 bytes Aug 11 11:12:46 desktop kernel:
> ukbd_intr_callback: modifiers = 0x0000
> --------------------------------------------------------------------------
> ---------------------------------------------------------------------------
> ---------------------------
>
> I want to remind you that _all_ keys are not working except those parsed
> by ukbd_parse_hid.
>
> The USB keyboard is functioning correctly on a Linux machine, so it's not a
> hardware defect. Can someone help me out troubleshooting this problem?
Hi,
Usually the actlen should be only 8-bytes. ukbd makes certain assumptions
about where the key-data is supposed to be placed.
Try using:
usbdump -i usbusX -f Y -vvv
To capture the data. There is also a quirk to set the BOOT protocol:
usbconfig -d X.Y add_quirk UQ_KBD_BOOTPROTO
Then re-plug the device.
--HPS
More information about the freebsd-usb
mailing list