[coreboot] Using USB keyboard in payloads

Peter Stuge peter at stuge.se
Mon Nov 19 19:24:35 CET 2012


Hi Dave!

Dave Frodin wrote:
> Is this what you were wanting?

Exactly! Thanks! I'll explain the important parts:


> Bus 003 Device 002: ID 045e:009d Microsoft Corp. Wireless Optical Desktop 3.0
> Device Descriptor:
>   bLength                18
>   bDescriptorType         1
>   bcdUSB               2.00
>   bDeviceClass            0 (Defined at Interface level)

bDeviceClass=0 says that the device as a whole does not follow any
single USB device class specification, and that class is instead
specified per-interface. USB devices can have multiple interfaces,
which all work in paralell.


>   Configuration Descriptor:
>     bLength                 9
>     bDescriptorType         2
>     wTotalLength           59
>     bNumInterfaces          2

There are two interfaces in this device.


>     Interface Descriptor:
>       bLength                 9
>       bDescriptorType         4
>       bInterfaceNumber        0
>       bAlternateSetting       0
>       bNumEndpoints           1
>       bInterfaceClass         3 Human Interface Device
>       bInterfaceSubClass      1 Boot Interface Subclass
>       bInterfaceProtocol      1 Keyboard

The interface with bInterfaceNumber=0 is a HID class interface which
implements the HID-specific "Boot Interface Subclass" and speaks
using the HID Boot Subclass-specific "Keyboard" protocol. libpayload
must use this interface for reading keystrokes.


>     Interface Descriptor:
>       bLength                 9
>       bDescriptorType         4
>       bInterfaceNumber        1
>       bAlternateSetting       0
>       bNumEndpoints           1
>       bInterfaceClass         3 Human Interface Device
>       bInterfaceSubClass      0 No Subclass
>       bInterfaceProtocol      0 None

Tricky! The second interface, with bInterfaceNumber=1 is also a HID
class interface, but no further information is provided as to how
this interface actually works. The host software must explicitly know
this device (as identified by vid:pid) in order to make any use of
this second interface. libpayload can't use this for anything without
explicit support for this keyboard.


//Peter




More information about the coreboot mailing list