Author Topic: Understanding HID communication  (Read 15342 times)

jhinkle

  • Member
  • ***
  • Posts: 4
Understanding HID communication
« on: November 18, 2022, 11:19:10 am »
I am trying to understand a USB Game pad interface with a game box.

I have used a Beagle to capture the USB activity.

I have walked myself thru all the Descriptors and End Point transfers and now attempting to understand the EP 1 (IN) - comm.

All values are hexadecimal

Identified as "IN Packet"  69 81 58

Identified as ""DATA0 Packet"  C3 00 00 0F 80 80 80 80 00 F7 3D

My question is HOW to decode the "IN Packet"



How is 69 broken down and interpreted?  Same with 81 and 58.

Do any of the values reflect a HID Item Tag?

The following is the associated HID Descriptor:

0x05, 0x01,        // Usage Page (Generic Desktop Ctrls)
0x09, 0x05,        // Usage (Game Pad)
0xA1, 0x01,        // Collection (Application)
0x15, 0x00,        //   Logical Minimum (0)
0x25, 0x01,        //   Logical Maximum (1)
0x35, 0x00,        //   Physical Minimum (0)
0x45, 0x01,        //   Physical Maximum (1)
0x75, 0x01,        //   Report Size (1)
0x95, 0x0E,        //   Report Count (14)
0x05, 0x09,        //   Usage Page (Button)
0x19, 0x01,        //   Usage Minimum (0x01)
0x29, 0x0E,        //   Usage Maximum (0x0E)
0x81, 0x02,        //   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x95, 0x02,        //   Report Count (2)
0x81, 0x01,        //   Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x05, 0x01,        //   Usage Page (Generic Desktop Ctrls)
0x25, 0x07,        //   Logical Maximum (7)
0x46, 0x3B, 0x01,  //   Physical Maximum (315)
0x75, 0x04,        //   Report Size (4)
0x95, 0x01,        //   Report Count (1)
0x65, 0x14,        //   Unit (System: English Rotation, Length: Centimeter)
0x09, 0x39,        //   Usage (Hat switch)
0x81, 0x42,        //   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,Null State)
0x65, 0x00,        //   Unit (None)
0x95, 0x01,        //   Report Count (1)
0x81, 0x01,        //   Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x26, 0xFF, 0x00,  //   Logical Maximum (255)
0x46, 0xFF, 0x00,  //   Physical Maximum (255)
0x09, 0x30,        //   Usage (X)
0x09, 0x31,        //   Usage (Y)
0x09, 0x32,        //   Usage (Z)
0x09, 0x35,        //   Usage (Rz)
0x75, 0x08,        //   Report Size ( 8 )
0x95, 0x04,        //   Report Count (4)
0x81, 0x02,        //   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x75, 0x08,        //   Report Size ( 8 )
0x95, 0x01,        //   Report Count (1)
0x81, 0x03,        //   Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0xC0,              // End Collection


Thanks in advance for any comments.
« Last Edit: November 18, 2022, 01:48:04 pm by jhinkle »

Renate

  • Frequent Contributor
  • ****
  • Posts: 97
Re: Understanding HID communication
« Reply #1 on: November 19, 2022, 11:04:51 am »
The "IN txn" is giving you the summary, what this whole transaction is about without showing the raw packets.
Those 8 bytes are the same 8 bytes defined in your HID report descriptor.
It says no buttons, hat returns 0xf, 4 x joystick in center range 0x80 and one pad byte.
Since you're not using it, there is no report ID.

You can see it all packed into the DATA0 packet, once you strip the header and the CRC.

I don't know hats off-hand but you've got 4 bits and a logical maximum of 7.
Did you mean -8 to +7 or 0 to +15?

jhinkle

  • Member
  • ***
  • Posts: 4
Re: Understanding HID communication
« Reply #2 on: November 19, 2022, 05:20:32 pm »
Thanks -- but I was asking about the 3 bytes before the data packet.  69  81  58

I suspect the 81 means IN EP1  and I suspect 58 might be a CRC -- I don't know how to decode 69.

Renate

  • Frequent Contributor
  • ****
  • Posts: 97
Re: Understanding HID communication
« Reply #3 on: November 20, 2022, 10:27:40 am »
Thanks -- but I was asking about the 3 bytes before the data packet.  69  81  58
In LSB first order you've got 4 bits of PID, 4 bits of ~PID, 7 bits of address, 4 bits of endpoint and 5 bits of CRC
Code: [Select]
1 0 0 1 0 1 1 0   1 0 0 0 0 0 0 1   0 0 0 1 1 0 1 0
IN----- ~IN----   Device1------ End1----- CRC------