Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 05 Mar 2020 01:24:53 +0000
From:      bugzilla-noreply@freebsd.org
To:        usb@FreeBSD.org
Subject:   [Bug 244602] Media key support for WASD keyboard
Message-ID:  <bug-244602-19105@https.bugs.freebsd.org/bugzilla/>

next in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D244602

            Bug ID: 244602
           Summary: Media key support for WASD keyboard
           Product: Base System
           Version: 12.1-STABLE
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Only Me
          Priority: ---
         Component: usb
          Assignee: usb@FreeBSD.org
          Reporter: henry.hu.sh@gmail.com

There are media keys on the WASD keyboard (https://www.wasdkeyboards.com/).
However, they are not recognized by FreeBSD. Pressing them does not result =
in
any keyboard event in X.

The keyboard shows 2 interfaces:
 Configuration index 0

    bLength =3D 0x0009=20
    bDescriptorType =3D 0x0002=20
    wTotalLength =3D 0x003b=20
    bNumInterfaces =3D 0x0002=20
    bConfigurationValue =3D 0x0001=20
    iConfiguration =3D 0x0000  <no string>
    bmAttributes =3D 0x00a0=20
    bMaxPower =3D 0x0032=20

    Interface 0
      bLength =3D 0x0009=20
      bDescriptorType =3D 0x0004=20
      bInterfaceNumber =3D 0x0000=20
      bAlternateSetting =3D 0x0000=20
      bNumEndpoints =3D 0x0001=20
      bInterfaceClass =3D 0x0003  <HID device>
      bInterfaceSubClass =3D 0x0001=20
      bInterfaceProtocol =3D 0x0001=20
      iInterface =3D 0x0000  <no string>

      Additional Descriptor

      bLength =3D 0x09
      bDescriptorType =3D 0x21
      bDescriptorSubType =3D 0x10
       RAW dump:=20
       0x00 | 0x09, 0x21, 0x10, 0x01, 0x00, 0x01, 0x22, 0x3e,=20
       0x08 | 0x00

     Endpoint 0
        bLength =3D 0x0007=20
        bDescriptorType =3D 0x0005=20
        bEndpointAddress =3D 0x0081  <IN>
        bmAttributes =3D 0x0003  <INTERRUPT>
        wMaxPacketSize =3D 0x0008=20
        bInterval =3D 0x000a=20
        bRefresh =3D 0x0000=20
        bSynchAddress =3D 0x0000=20


    Interface 1
      bLength =3D 0x0009=20
      bDescriptorType =3D 0x0004=20
      bInterfaceNumber =3D 0x0001=20
      bAlternateSetting =3D 0x0000=20
      bNumEndpoints =3D 0x0001=20
      bInterfaceClass =3D 0x0003  <HID device>
      bInterfaceSubClass =3D 0x0001=20
      bInterfaceProtocol =3D 0x0002=20
      iInterface =3D 0x0000  <no string>

      Additional Descriptor

      bLength =3D 0x09
      bDescriptorType =3D 0x21
      bDescriptorSubType =3D 0x10
       RAW dump:=20
       0x00 | 0x09, 0x21, 0x10, 0x01, 0x00, 0x01, 0x22, 0xa6,=20
       0x08 | 0x00

     Endpoint 0
        bLength =3D 0x0007=20
        bDescriptorType =3D 0x0005=20
        bEndpointAddress =3D 0x0082  <IN>
        bmAttributes =3D 0x0003  <INTERRUPT>
        wMaxPacketSize =3D 0x0008=20
        bInterval =3D 0x000a=20
        bRefresh =3D 0x0000=20
        bSynchAddress =3D 0x0000=20

ukbd attaches to interface 0, and ums attaches to interface 1.
Interface 0's HID report descriptor is a general one:

0x05, 0x01,        // Usage Page (Generic Desktop Ctrls)
0x09, 0x06,        // Usage (Keyboard)
0xA1, 0x01,        // Collection (Application)
0x05, 0x07,        //   Usage Page (Kbrd/Keypad)

// Control/Alt etc.
0x19, 0xE0,        //   Usage Minimum (0xE0)
0x29, 0xE7,        //   Usage Maximum (0xE7)
0x15, 0x00,        //   Logical Minimum (0)
0x25, 0x01,        //   Logical Maximum (1)
0x75, 0x01,        //   Report Size (1)
0x95, 0x08,        //   Report Count (8)
0x81, 0x02,        //   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,=
No
Null Position)
// Padding
0x95, 0x01,        //   Report Count (1)
0x75, 0x08,        //   Report Size (8)
0x81, 0x01,        //   Input (Const,Array,Abs,No Wrap,Linear,Preferred
State,No Null Position)
// LEDs
0x95, 0x03,        //   Report Count (3)
0x75, 0x01,        //   Report Size (1)
0x05, 0x08,        //   Usage Page (LEDs)
0x19, 0x01,        //   Usage Minimum (Num Lock)
0x29, 0x03,        //   Usage Maximum (Scroll Lock)
0x91, 0x02,        //   Output (Data,Var,Abs,No Wrap,Linear,Preferred State=
,No
Null Position,Non-volatile)
// Padding
0x95, 0x05,        //   Report Count (5)
0x75, 0x01,        //   Report Size (1)
0x91, 0x01,        //   Output (Const,Array,Abs,No Wrap,Linear,Preferred
State,No Null Position,Non-volatile)
// Key array
0x95, 0x06,        //   Report Count (6)
0x75, 0x08,        //   Report Size (8)
0x26, 0xFF, 0x00,  //   Logical Maximum (255)
0x05, 0x07,        //   Usage Page (Kbrd/Keypad)
0x19, 0x00,        //   Usage Minimum (0x00)
0x29, 0x91,        //   Usage Maximum (0x91)
0x81, 0x00,        //   Input (Data,Array,Abs,No Wrap,Linear,Preferred Stat=
e,No
Null Position)

0xC0,              // End Collection

// 62 bytes

The interesting keys are in the interface 1:
Report descriptor:
Collection type=3DApplication page=3DConsumer usage=3DConsumer_Control
Input   rid=3D1 pos=3D0 size=3D1 count=3D1 page=3DConsumer usage=3DHelp, lo=
gical range 0..1
Input   rid=3D1 pos=3D1 size=3D1 count=3D1 page=3DConsumer usage=3DMute, lo=
gical range 0..1
Input   rid=3D1 pos=3D2 size=3D1 count=3D1 page=3DConsumer usage=3DVolume_D=
ecrement,
logical range 0..1
Input   rid=3D1 pos=3D3 size=3D1 count=3D1 page=3DConsumer usage=3DVolume_I=
ncrement,
logical range 0..1
Input   rid=3D1 pos=3D4 size=3D1 count=3D1 page=3DConsumer usage=3DAL_Word_=
Processor,
logical range 0..1
Input   rid=3D1 pos=3D5 size=3D1 count=3D1 page=3DConsumer usage=3DAL_Sprea=
dsheet, logical
range 0..1
Input   rid=3D1 pos=3D6 size=3D1 count=3D1 page=3DConsumer usage=3DAL_Email=
_Reader, logical
range 0..1
Input   rid=3D1 pos=3D7 size=3D1 count=3D1 page=3DConsumer usage=3DAL_Calen=
dar/Schedule,
logical range 0..1
Input   rid=3D1 pos=3D8 size=3D1 count=3D1 page=3DConsumer usage=3DAL_Calcu=
lator, logical
range 0..1
Input   rid=3D1 pos=3D9 size=3D1 count=3D1 page=3DConsumer usage=3DAL_Logof=
f, logical range
0..1
Input   rid=3D1 pos=3D10 size=3D1 count=3D1 page=3DConsumer
usage=3DAL_Next_Task/Application, logical range 0..1
Input   rid=3D1 pos=3D11 size=3D1 count=3D1 page=3DConsumer
usage=3DAL_Previous_Task/Application, logical range 0..1
Input   rid=3D1 pos=3D12 size=3D1 count=3D1 page=3DConsumer usage=3D0x029e,=
 logical range
0..1
Input   rid=3D1 pos=3D13 size=3D1 count=3D1 page=3DConsumer usage=3DAC_Spel=
l_Check, logical
range 0..1
Input   rid=3D1 pos=3D14 size=3D1 count=3D1 page=3DConsumer usage=3DAL_File=
_Browser,
logical range 0..1
Input   rid=3D1 pos=3D15 size=3D1 count=3D1 page=3DConsumer usage=3DAC_New,=
 logical range
0..1
Input   rid=3D1 pos=3D16 size=3D1 count=3D1 page=3DConsumer usage=3DAC_Open=
, logical range
0..1
Input   rid=3D1 pos=3D17 size=3D1 count=3D1 page=3DConsumer usage=3DAC_Clos=
e, logical range
0..1
Input   rid=3D1 pos=3D18 size=3D1 count=3D1 page=3DConsumer usage=3DAC_Save=
, logical range
0..1
Input   rid=3D1 pos=3D19 size=3D1 count=3D1 page=3DConsumer usage=3DAC_Prin=
t, logical range
0..1
Input   rid=3D1 pos=3D20 size=3D1 count=3D1 page=3DConsumer usage=3DAC_Undo=
, logical range
0..1
Input   rid=3D1 pos=3D21 size=3D1 count=3D1 page=3DConsumer usage=3DAC_Copy=
, logical range
0..1
Input   rid=3D1 pos=3D22 size=3D1 count=3D1 page=3DConsumer usage=3DAC_Cut,=
 logical range
0..1
Input   rid=3D1 pos=3D23 size=3D1 count=3D1 page=3DConsumer usage=3DAC_Past=
e, logical range
0..1
Input   rid=3D1 pos=3D24 size=3D1 count=3D1 page=3DConsumer usage=3D0x029d,=
 logical range
0..1
Input   rid=3D1 pos=3D25 size=3D1 count=3D1 page=3DConsumer usage=3DAC_Home=
, logical range
0..1
Input   rid=3D1 pos=3D26 size=3D1 count=3D1 page=3DConsumer usage=3DAC_Back=
, logical range
0..1
Input   rid=3D1 pos=3D27 size=3D1 count=3D1 page=3DConsumer usage=3DAC_Forw=
ard, logical
range 0..1
Input   rid=3D1 pos=3D28 size=3D1 count=3D1 page=3DConsumer usage=3DAC_Redo=
/Repeat, logical
range 0..1
Input   rid=3D1 pos=3D29 size=3D1 count=3D1 page=3DConsumer usage=3DAC_Repl=
y, logical range
0..1
Input   rid=3D1 pos=3D30 size=3D1 count=3D1 page=3DConsumer usage=3DAC_Forw=
ard_Msg, logical
range 0..1
Input   rid=3D1 pos=3D31 size=3D1 count=3D1 page=3DConsumer usage=3DAC_Send=
, logical range
0..1
Input   rid=3D1 pos=3D32 size=3D1 count=3D1 page=3DConsumer usage=3DScan_Ne=
xt_Track,
logical range 0..1
Input   rid=3D1 pos=3D33 size=3D1 count=3D1 page=3DConsumer usage=3DScan_Pr=
evious_Track,
logical range 0..1
Input   rid=3D1 pos=3D34 size=3D1 count=3D1 page=3DConsumer usage=3DStop, l=
ogical range
0..1
Input   rid=3D1 pos=3D35 size=3D1 count=3D1 page=3DConsumer usage=3DPlay/Pa=
use, logical
range 0..1
Input   rid=3D1 pos=3D36 size=3D1 count=3D1 page=3DConsumer
usage=3DAL_Consumer_Control_Configuration, logical range 0..1
Input   rid=3D1 pos=3D37 size=3D1 count=3D1 page=3DConsumer
usage=3DAL_Local_Machine_Browser, logical range 0..1
Input   rid=3D1 pos=3D38 size=3D1 count=3D1 page=3DConsumer usage=3DAC_Sear=
ch, logical
range 0..1
Input   rid=3D1 pos=3D39 size=3D1 count=3D1 page=3DConsumer usage=3DAC_Stop=
, logical range
0..1
Input   rid=3D1 pos=3D40 size=3D1 count=3D1 page=3DConsumer usage=3DAC_Refr=
esh, logical
range 0..1
Input   rid=3D1 pos=3D41 size=3D1 count=3D1 page=3DConsumer usage=3DAC_Book=
marks, logical
range 0..1
End collection
Collection type=3DApplication page=3DGeneric_Desktop usage=3DSystem_Control
Input   rid=3D2 pos=3D0 size=3D1 count=3D1 page=3DGeneric_Desktop
usage=3DSystem_Power_Down, logical range 0..1
Input   rid=3D2 pos=3D1 size=3D1 count=3D1 page=3DGeneric_Desktop usage=3DS=
ystem_Sleep,
logical range 0..1
Input   rid=3D2 pos=3D2 size=3D1 count=3D1 page=3DGeneric_Desktop usage=3DS=
ystem_Wake_Up,
logical range 0..1
End collection
Total   input size 7 bytes
Total  output size 0 bytes
Total feature size 0 bytes

(detached ums driver by adding UQ_UMS_IGNORE, then dump using usbhidctl -r)

So at least ums should not attach to it, and possibly ukbd or something else
should attach to it and handle consumer page.

--=20
You are receiving this mail because:
You are the assignee for the bug.=



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-244602-19105>