The HID descriptor

The HID descriptor defines:
– 4 axis (x, y, z, rz)
– 1 hat switch
– 12 buttons

There are 13 buttons on a ps3 controller.
PS3 button is not very useful, omitting it allows avoiding padding.

/* Usage Page (Generic Desktop)*/ 0x05, 0x01,
/*Usage (Joystick)*/ 0x09, 0x04,
/*Collection (Application)*/ 0xA1, 0x01,
/*Collection (Logical)*/ 0xA1, 0x02,
/*Logical Minimum (0)*/ 0x15, 0x00,
/*Logical Maximum (255)*/ 0x26, 0xFF, 0x00,
/*Physical Minimum (0)*/ 0x35, 0x00,
/*Physical Maximum (255)*/ 0x46, 0xFF, 0x00,
/*Report Size (8)*/ 0x75, 0x08,
/*Report Count (4)*/ 0x95, 0x04,
/*Usage (X)*/ 0x09, 0x30,
/*Usage (Y)*/ 0x09, 0x31,
/*Usage (Z)*/ 0x09, 0x32,
/*Usage (Rz)*/ 0x09, 0x35,
/*Input (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit)*/ 0x81, 0x02,
/*Logical Maximum (7)*/ 0x25, 0x07,
/*Physical Maximum (315)*/ 0x46, 0x3B, 0x01,
/*Report Size (4)*/ 0x75, 0x04,
/*Report Count (1)*/ 0x95, 0x01,
/*Unit (Eng Rot: Degree)*/ 0x65, 0x14,
/*Usage (Hat Switch)*/ 0x09, 0x39,
/*Input (Data,Var,Abs,NWrp,Lin,Pref,Null,Bit)*/ 0x81, 0x42,
/*Unit (None)*/ 0x65, 0x00,
/*Logical Maximum (1)*/ 0x25, 0x01,
/*Physical Maximum (1)*/ 0x45, 0x01,
/*Report Size (1)*/ 0x75, 0x01,
/*Report Count (12)*/ 0x95, 0x0C,
/*Usage Page (Button)*/ 0x05, 0x09,
/*Usage Minimum (Button 1)*/ 0x19, 0x01,
/*Usage Maximum (Button 12)*/ 0x29, 0x0C,
/*Input (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit)*/ 0x81, 0x02,
/*End Collection*/ 0xC0,
/*End Collection*/ 0xC0

Mouse-Keyboard to PS3 Joystick adapter
Above screenshot shows the result of this hid device with jstest-gtk as joystick calibration program (axis 4-5 are not relevant).

22 Replies to “The HID descriptor”

Leave a Reply

Your email address will not be published. Required fields are marked *