Difference between revisions of "Xbox Input Devices"

From xboxdevwiki
Jump to: navigation, search
(Interrupt transfers)
(Add Chihiro baseboard)
 
(46 intermediate revisions by 9 users not shown)
Line 6: Line 6:
 
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
 
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
 
The logical XID gamepad USB device is internally connected to that hub.
 
The logical XID gamepad USB device is internally connected to that hub.
 +
  
 
=== USB Adapters ===
 
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
+
The Xbox's Input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter; decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).                            
 +
 
 +
[[File:Xboxmaletousbfemale.png|thumb|right|Wiring diagram to show how male Xbox controller plug maps to standard female USB connector. White cable color is depicted as gray for better visibility. The yellow cable is not connected to the USB side, as it's exclusive to Xbox.]]
  
{| class="wikitable"
+
{| class="wikitable"                                                        
|-
+
|-  
 
! Port (From)
 
! Port (From)
 
! Plug (To)
 
! Plug (To)
Line 17: Line 20:
 
|-
 
|-
 
| Xbox
 
| Xbox
| USB-A
+
| USB-A  
| [https://www.amazon.com/gp/product/B000RT2868 Amazon]
+
| [https://www.amazon.com/gp/product/B000RT2868 Amazon] [https://www.aliexpress.com/item/32948906701.html Aliexpress]
 
|-
 
|-
 
| USB-A
 
| USB-A
 
| Xbox
 
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
+
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon] [https://www.aliexpress.com/item/4000452932782.html Aliexpress]
 
|}
 
|}
  
Line 33: Line 36:
 
!Typical cable color
 
!Typical cable color
 
!Description
 
!Description
|-
+
|-                                                          
 
|1
 
|1
|Green
+
|Red
|USB D-
+
|VCC
 
|-
 
|-
 
|2
 
|2
Line 43: Line 46:
 
|-
 
|-
 
|3
 
|3
|Black
+
|Green
|GND
+
|USB D-
 
|-
 
|-
 
|4
 
|4
|Red
+
|Yellow
|VCC
+
|VBlank signal from video output (for Lightguns)
 
|-
 
|-
 
|5
 
|5
|Yellow
+
|Black
|VBlank signal from video output (for Lightguns)
+
|GND
 
|-
 
|-
 
|}
 
|}
Line 69: Line 72:
 
* wIndex: Interface number
 
* wIndex: Interface number
 
* wLength: <length of respective report; typically 16>
 
* wLength: <length of respective report; typically 16>
 +
 +
Actual length is truncated to size of descriptor or wLength. Whichever is smaller.
  
 
<pre>
 
<pre>
Line 91: Line 96:
 
** 0x02 = Gamepad (Controller-S)
 
** 0x02 = Gamepad (Controller-S)
 
** 0x10 = Steering wheel
 
** 0x10 = Steering wheel
 +
** 0x20 = Arcade Stick
 +
** 0x50 = Light gun
 +
 +
====== bType = 3: Xbox DVD Movie Playback IR Dongle======
  
 +
* bSubType:
 +
** 0x00
  
===== GET_CAPABILITIES =====
+
====== bType = 128: Steel Battalion ======
 +
 
 +
* bSubType:
 +
** 0x01
 +
 
 +
====== Example XID reports ======
 +
 
 +
This is an example XID descriptor taken from a Controller-S (VID 0x045E / PID 0x0289).
 +
<pre>
 +
bLength              0x10 (16 bytes)
 +
bDescriptorType      0x42
 +
bcdXid              0x0100 (USB 1.0)
 +
bType                0x01
 +
bSubType            0x02
 +
bMaxInputReportSize  0x14 (20 bytes)
 +
bMaxOutputReportSize 0x06 (6 bytes)
 +
wAlternateProductIds 4 x 0xFFFF
 +
</pre>
 +
 
 +
This is an example XID descriptor taken from a Steel Battalion controller.
 +
<pre>
 +
bLength              0x10 (16 bytes)
 +
bDescriptorType      0x42
 +
bcdXid              0x0100 (USB 1.0)
 +
bType                0x80
 +
bSubType            0x01
 +
bMaxInputReportSize  0x1A (26 bytes)
 +
bMaxOutputReportSize 0x16 (22 bytes)
 +
wAlternateProductIds 4 x 0xFFFF
 +
</pre>
 +
 
 +
This is an example XID descriptor taken from an official Microsoft DVD Movie Playback IR dongle.
 +
<pre>
 +
bLength              0x08 (8 bytes)
 +
bDescriptorType      0x42
 +
bcdXid              0x0100 (USB 1.0)
 +
bType                0x03
 +
bSubType            0x00
 +
bMaxInputReportSize  0x06 (6 bytes)
 +
bMaxOutputReportSize 0x00 (0 bytes)
 +
</pre>
 +
 
 +
===== GET_CAPABILITIES =====
  
 
* bmRequestType: 0xC1
 
* bmRequestType: 0xC1
Line 105: Line 158:
  
 
* STALL if wValue not supported.
 
* STALL if wValue not supported.
 +
 +
Actual length is truncated to size of report or wLength. Whichever is smaller.
  
 
<pre>typedef struct XIDGamepadCapabilities {
 
<pre>typedef struct XIDGamepadCapabilities {
Line 143: Line 198:
  
  
* STALL if wValue not supported.
+
* STALL if wValue not supported or if wLength is greater than report size.
 
* ACK if supported.
 
* ACK if supported.
  
Line 164: Line 219:
 
== Standard Gamepads ==
 
== Standard Gamepads ==
  
=== USB Descriptors ===
+
=== Microsoft Hardware Variants ===
  
Most standard gamepads share the same USB descriptor.
+
There are a few hardware re-designs of the Microsoft Gamepad.
Usually the only difference will be the VID / PID.
 
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
 
 
 
=== Controller to Xbox ===
 
 
 
20 bytes
 
  
 
{| class="wikitable"
 
{| class="wikitable"
!Field
+
!Controller Name
!Offset (Bytes)
+
!Part Number
!Mask
+
!Board Model
 
!Notes
 
!Notes
 +
!Datasheets
 
|-
 
|-
|{{input-dy+}}
+
|Xbox Game Controller (AKA "Duke")
|2
+
|X08-17160
|0x01
+
|23-0819B
|
+
|Earliest known model{{FIXME|Reason=Small sample size (5), can't confirm}}. 3 IC's: Dedicated ST 92163/JFL Micro Controller, dedicated AT43USB401 USB Controller, 4 Channel Analog Mux LW052A.
 +
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
 +
|-
 +
|Xbox Game Controller (AKA "Duke")
 +
|X08-17160
 +
|K023B121
 +
|Same as 23-0819B, but manufactured in China. Only Board Model that does not follow naming conventions. Hardware identical. Easily identified by a serial number that starts with "KD".
 +
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
 
|-
 
|-
|{{input-dy-}}
+
|Xbox Game Controller (AKA "Duke")
|2
+
|X08-17160
|0x02
+
|23-0819C
|
+
|Last known Duke model.{{FIXME|Reason=Small sample size (5), can't confirm}}. Identical to 23-0819B in hardware, new silkscreen markings show this model is [https://en.wikipedia.org/wiki/UL_94 UL-94 V-0 compliant]. All boards after this are V-0 compliant.
 +
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
 
|-
 
|-
|{{input-dx-}}
+
|Xbox Game Controller (Looks like an S, with green Xbox jewel)
|2
+
|X08-19383
|0x04
+
|23-0923A
|
+
|Japan and Australia exclusive model{{FIXME|Reason=Speculation, no hard source for this}}.Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design.
 +
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
 
|-
 
|-
|{{input-dx+}}
+
|Xbox Controller S
|2
+
|X08-69873
|0x08
+
|23-0923B
|
+
|Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design
 +
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
 
|-
 
|-
|{{input-start}}
+
|Xbox Controller S
|2
+
|X08-69873
|0x10
+
|23-0923H
|
+
|Entirely new PCB design. Single IC on the board, AT43USB355M-AC
 +
|[https://archive.org/details/AT43USB355 AT43USB355M-AC]
 
|-
 
|-
|{{input-back}}
+
|Xbox Controller S
|2
+
|X08-69873
|0x20
+
|23-0923I
|
+
|PCB Design almost exactly the same as H revision. Only difference is the IC is smaller: AT43USB353M-AC
 +
|[https://archive.org/details/AT43USB353M-AC AT43USB353M-AC]
 +
|}
 +
 
 +
There are also dedicated Part Numbers for color variants:
 +
{| class="wikitable"
 +
!Controller Part Number
 +
!Controller Description
 +
!Board Model
 
|-
 
|-
|{{input-ls}}
+
|X02332-001
|2
+
|Crystal S Controller
|0x40
+
|23-0923I
|
 
 
|-
 
|-
|{{input-rs}}
+
|X09-64240-01
|2
+
|Transparent Green Controller
|0x80
+
|23-0923I
|
 
 
|-
 
|-
|{{input-a}}
+
|X800679-100
|4
+
|Black S With Halo Jewel
|0xFF
+
|23-0923I
|Button is analog
+
|}
|-
+
 
|{{input-b}}
+
=== USB Descriptors ===
|5
+
 
|0xFF
+
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
|Button is analog
+
 
|-
+
==== 23-0819B ====
|{{input-x}}
+
 
|6
+
<pre>
|0xFF
+
Device Descriptor:
|Button is analog
+
  bLength                18
|-
+
  bDescriptorType        1
|{{input-y}}
+
  bcdUSB              1.10
|7
+
  bDeviceClass            0
|0xFF
+
  bDeviceSubClass        0
|Button is analog
+
  bDeviceProtocol        0
|-
+
  bMaxPacketSize0        64
|{{input-black}}
+
  idVendor          0x045e Microsoft Corp.
|8
+
  idProduct          0x0202 Xbox Controller
|0xFF
+
  bcdDevice            1.00
|Button is analog
+
  iManufacturer          0
|-
+
  iProduct                0
|{{input-white}}
+
  iSerial                0
|9
+
  bNumConfigurations      1
|0xFF
+
  Configuration Descriptor:
|Button is analog
+
    bLength                9
|-
+
    bDescriptorType        2
|{{input-lt}}
+
    wTotalLength          32
|10
+
    bNumInterfaces          1
|0xFF
+
    bConfigurationValue    1
|Trigger is analog
+
    iConfiguration          0
|-
+
    bmAttributes        0x80
|{{input-rt}}
+
      (Bus Powered)
|11
+
    MaxPower              100mA
|0xFF
+
    Interface Descriptor:
|Trigger is analog
+
      bLength                9
|-
+
      bDescriptorType        4
|{{input-lx}}
+
      bInterfaceNumber        0
|12
+
      bAlternateSetting      0
|0xFFFF
+
      bNumEndpoints          2
|Negative = Left; Positive = Right
+
      bInterfaceClass        88 Xbox
|-
+
      bInterfaceSubClass    66 Controller
|{{input-ly}}
+
      bInterfaceProtocol      0
|14
+
      iInterface              0
|0xFFFF
+
      Endpoint Descriptor:
|Negative = Down; Positive = Up
+
        bLength                7
|-
+
        bDescriptorType        5
|{{input-rx}}
+
        bEndpointAddress    0x82  EP 2 IN
|16
+
        bmAttributes            3
|0xFFFF
+
          Transfer Type            Interrupt
|Negative = Left; Positive = Right
+
          Synch Type              None
|-
+
          Usage Type              Data
|{{input-ry}}
+
        wMaxPacketSize    0x0020  1x 32 bytes
|18
+
        bInterval              4
|0xFFFF
+
      Endpoint Descriptor:
|Negative = Down; Positive = Up
+
        bLength                7
|}
+
        bDescriptorType        5
 +
        bEndpointAddress    0x02  EP 2 OUT
 +
        bmAttributes            3
 +
          Transfer Type            Interrupt
 +
          Synch Type              None
 +
          Usage Type              Data
 +
        wMaxPacketSize    0x0020  1x 32 bytes
 +
        bInterval              4
 +
</pre>
  
=== Xbox to Controller ===
+
==== K023B121 ====
 +
 
 +
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
 +
 
 +
==== 23-0819C ====
 +
 
 +
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
 +
 
 +
==== 23-0923A ====
 +
 
 +
Changes from 23-0819B
 +
 
 +
<pre>
 +
Device Descriptor:
 +
  idProduct: 0x0285
 +
</pre>
 +
 
 +
==== 23-0923B ====
 +
 
 +
{{FIXME|Reason=No Descriptor Dump}}
 +
 
 +
==== 23-0923H ====
 +
 
 +
Changes from 23-0819B
 +
 
 +
<pre>
 +
Device Descriptor
 +
  bMaxPacketSize0: 8
 +
  idProduct: 0x0289
 +
  bcdDevice: 1.20
 +
  Configuration Descriptor
 +
    Interface Descriptor
 +
      Endpoint Descriptor
 +
        bEndpointAddress: 0x81
 +
</pre>
 +
 
 +
==== 23-0923I ====
 +
 
 +
Changes from 23-0923H
 +
 
 +
<pre>
 +
Device Descriptor
 +
  bcdDevice: 1.21
 +
</pre>
 +
 
 +
=== Controller to Xbox ===
  
6 bytes
+
20 bytes
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 291: Line 411:
 
!Notes
 
!Notes
 
|-
 
|-
|Left actuator strength
+
|{{input-dy+}}
 +
|2
 +
|0x01
 +
|
 +
|-
 +
|{{input-dy-}}
 
|2
 
|2
|0xFFFF
+
|0x02
 
|
 
|
 
|-
 
|-
|Right actuator strength
+
|{{input-dx-}}
|4
+
|2
|0xFFFF
+
|0x04
 
|
 
|
|}
+
|-
 
+
|{{input-dx+}}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
+
|2
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
+
|0x08
 
+
|
== Steering wheels ==
+
|-
 
+
|{{input-start}}
=== MadCatz Wheel ===
+
|2
 
+
|0x10
{{FIXME}}
+
|
 
+
|-
=== Fanatec Speedster 3 ForceShock ===
+
|{{input-back}}
 
+
|2
==== Pedals ====
+
|0x20
 
+
|
The Pedals are ''not'' a USB device.
+
|-
 
+
|{{input-ls}}
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
+
|2
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
+
|0x40
 
+
|
<pre>
+
|-
new full-speed USB device number 14 using xhci_hcd
+
|{{input-rs}}
device descriptor read/64, error -71
+
|2
device descriptor read/64, error -71
+
|0x80
new full-speed USB device number 15 using xhci_hcd
+
|
device descriptor read/64, error -71
+
|-
device descriptor read/64, error -71
+
|{{input-a}}
new full-speed USB device number 16 using xhci_hcd
+
|4
Device not responding to setup address.
+
|0xFF
Device not responding to setup address.
+
|Button is analog
device not accepting address 16, error -71
+
|-
new full-speed USB device number 17 using xhci_hcd
+
|{{input-b}}
Device not responding to setup address.
+
|5
Device not responding to setup address.
+
|0xFF
device not accepting address 17, error -71
+
|Button is analog
unable to enumerate USB device
+
|-
</pre>
+
|{{input-x}}
 
+
|6
==== Internal HUB ====
+
|0xFF
 
+
|Button is analog
===== USB Descriptors =====
+
|-
 
+
|{{input-y}}
Power not connected, pedals not connected, not in Tuning mode:
+
|7
 
+
|0xFF
<pre>
+
|Button is analog
Device Descriptor:
+
|-
  bLength                18
+
|{{input-black}}
  bDescriptorType        1
+
|8
  bcdUSB              1.10
+
|0xFF
  bDeviceClass            9 Hub
+
|Button is analog
  bDeviceSubClass        0
+
|-
  bDeviceProtocol        0 Full speed (or root) hub
+
|{{input-white}}
  bMaxPacketSize0        8
+
|9
  idVendor          0x3767
+
|0xFF
  idProduct          0x0102
+
|Button is analog
  bcdDevice            0.01
+
|-
  iManufacturer          0
+
|{{input-lt}}
  iProduct                1 End
+
|10
  iSerial                0
+
|0xFF
  bNumConfigurations      1
+
|Trigger is analog
  Configuration Descriptor:
+
|-
    bLength                9
+
|{{input-rt}}
    bDescriptorType        2
+
|11
    wTotalLength          25
+
|0xFF
    bNumInterfaces          1
+
|Trigger is analog
    bConfigurationValue    1
+
|-
    iConfiguration          0
+
|{{input-lx}}
    bmAttributes        0xa0
+
|12
      (Bus Powered)
+
|0xFFFF
      Remote Wakeup
+
|Negative = Left; Positive = Right
    MaxPower              64mA
+
|-
    Interface Descriptor:
+
|{{input-ly}}
      bLength                9
+
|14
      bDescriptorType        4
+
|0xFFFF
      bInterfaceNumber        0
+
|Negative = Down; Positive = Up
      bAlternateSetting      0
+
|-
      bNumEndpoints          1
+
|{{input-rx}}
      bInterfaceClass        9 Hub
+
|16
      bInterfaceSubClass      0
+
|0xFFFF
      bInterfaceProtocol      0 Full speed (or root) hub
+
|Negative = Left; Positive = Right
      iInterface              0
+
|-
      Endpoint Descriptor:
+
|{{input-ry}}
        bLength                7
+
|18
        bDescriptorType        5
+
|0xFFFF
        bEndpointAddress    0x81  EP 1 IN
+
|Negative = Down; Positive = Up
        bmAttributes            3
+
|}
          Transfer Type            Interrupt
+
 
          Synch Type              None
+
=== Xbox to Controller ===
          Usage Type              Data
+
 
        wMaxPacketSize    0x0001  1x 1 bytes
+
6 bytes
        bInterval            255
+
 
Hub Descriptor:
+
{| class="wikitable"
  bLength              9
+
!Field
  bDescriptorType      41
+
!Offset (Bytes)
  nNbrPorts            3
+
!Mask
  wHubCharacteristic 0x000d
+
!Notes
    Per-port power switching
+
|-
    Compound device
+
|Left actuator strength
    Per-port overcurrent protection
+
|2
  bPwrOn2PwrGood      50 * 2 milli seconds
+
|0xFFFF
  bHubContrCurrent    64 milli Ampere
+
|
  DeviceRemovable    0x02
+
|-
  PortPwrCtrlMask    0xff
+
|Right actuator strength
Hub Port Status:
+
|4
  Port 1: 0000.0103 power enable connect
+
|0xFFFF
  Port 2: 0000.0100 power
+
|
  Port 3: 0000.0100 power
+
|}
can't get debug descriptor: Resource temporarily unavailable
 
Device Status:    0x0003
 
  Self Powered
 
  Remote Wakeup Enabled
 
</pre>
 
  
==== Steering wheel (and Pedals) ====
+
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
 +
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
 +
 
 +
== Steering wheels ==
 +
 
 +
=== MadCatz Wheel ===
 +
 
 +
{{FIXME}}
 +
 
 +
=== Fanatec Speedster 3 ForceShock ===
 +
 
 +
==== Pedals ====
  
Always connected to port 1 of the internal HUB
+
The Pedals are ''not'' a USB device.
  
===== USB Descriptors =====
+
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
 +
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
  
 
<pre>
 
<pre>
Device Descriptor:
+
new full-speed USB device number 14 using xhci_hcd
   bLength                18
+
device descriptor read/64, error -71
   bDescriptorType        1
+
device descriptor read/64, error -71
   bcdUSB              1.10
+
new full-speed USB device number 15 using xhci_hcd
   bDeviceClass            0
+
device descriptor read/64, error -71
 +
device descriptor read/64, error -71
 +
new full-speed USB device number 16 using xhci_hcd
 +
Device not responding to setup address.
 +
Device not responding to setup address.
 +
device not accepting address 16, error -71
 +
new full-speed USB device number 17 using xhci_hcd
 +
Device not responding to setup address.
 +
Device not responding to setup address.
 +
device not accepting address 17, error -71
 +
unable to enumerate USB device
 +
</pre>
 +
 
 +
==== Internal HUB ====
 +
 
 +
===== USB Descriptors =====
 +
 
 +
Power not connected, pedals not connected, not in Tuning mode:
 +
 
 +
<pre>
 +
Device Descriptor:
 +
   bLength                18
 +
   bDescriptorType        1
 +
   bcdUSB              1.10
 +
   bDeviceClass            9 Hub
 
   bDeviceSubClass        0  
 
   bDeviceSubClass        0  
   bDeviceProtocol        0  
+
   bDeviceProtocol        0 Full speed (or root) hub
 
   bMaxPacketSize0        8
 
   bMaxPacketSize0        8
 
   idVendor          0x3767  
 
   idVendor          0x3767  
   idProduct          0x0101
+
   idProduct          0x0102
   bcdDevice            2.80
+
   bcdDevice            0.01
 
   iManufacturer          0  
 
   iManufacturer          0  
   iProduct                0
+
   iProduct                1 End
 
   iSerial                0  
 
   iSerial                0  
 
   bNumConfigurations      1
 
   bNumConfigurations      1
Line 438: Line 594:
 
     bLength                9
 
     bLength                9
 
     bDescriptorType        2
 
     bDescriptorType        2
     wTotalLength          32
+
     wTotalLength          25
 
     bNumInterfaces          1
 
     bNumInterfaces          1
 
     bConfigurationValue    1
 
     bConfigurationValue    1
 
     iConfiguration          0  
 
     iConfiguration          0  
     bmAttributes        0x80
+
     bmAttributes        0xa0
 
       (Bus Powered)
 
       (Bus Powered)
     MaxPower             100mA
+
      Remote Wakeup
 +
     MaxPower               64mA
 
     Interface Descriptor:
 
     Interface Descriptor:
 
       bLength                9
 
       bLength                9
Line 450: Line 607:
 
       bInterfaceNumber        0
 
       bInterfaceNumber        0
 
       bAlternateSetting      0
 
       bAlternateSetting      0
       bNumEndpoints          2
+
       bNumEndpoints          1
       bInterfaceClass       88 Xbox
+
       bInterfaceClass         9 Hub
       bInterfaceSubClass     66 Controller
+
       bInterfaceSubClass     0
       bInterfaceProtocol      0  
+
       bInterfaceProtocol      0 Full speed (or root) hub
 
       iInterface              0  
 
       iInterface              0  
 
       Endpoint Descriptor:
 
       Endpoint Descriptor:
 
         bLength                7
 
         bLength                7
 
         bDescriptorType        5
 
         bDescriptorType        5
         bEndpointAddress    0x82 EP 2 IN
+
         bEndpointAddress    0x81 EP 1 IN
 
         bmAttributes            3
 
         bmAttributes            3
 
           Transfer Type            Interrupt
 
           Transfer Type            Interrupt
 
           Synch Type              None
 
           Synch Type              None
 
           Usage Type              Data
 
           Usage Type              Data
         wMaxPacketSize    0x0020 1x 32 bytes
+
         wMaxPacketSize    0x0001 1x 1 bytes
         bInterval               4
+
         bInterval             255
      Endpoint Descriptor:
+
Hub Descriptor:
        bLength                 7
+
  bLength               9
        bDescriptorType         5
+
  bDescriptorType     41
        bEndpointAddress     0x02 EP 2 OUT
+
  nNbrPorts            3
        bmAttributes            3
+
  wHubCharacteristic 0x000d
          Transfer Type            Interrupt
+
    Per-port power switching
          Synch Type              None
+
    Compound device
          Usage Type              Data
+
     Per-port overcurrent protection
        wMaxPacketSize    0x0020  1x 32 bytes
+
  bPwrOn2PwrGood      50 * 2 milli seconds
        bInterval              4
+
  bHubContrCurrent    64 milli Ampere
can't get debug descriptor: Resource temporarily unavailable
+
  DeviceRemovable    0x02
Device Status:    0x0000
+
  PortPwrCtrlMask    0xff
   (Bus Powered)
+
Hub Port Status:
 +
  Port 1: 0000.0103 power enable connect
 +
  Port 2: 0000.0100 power
 +
  Port 3: 0000.0100 power
 +
can't get debug descriptor: Resource temporarily unavailable
 +
Device Status:    0x0003
 +
   Self Powered
 +
  Remote Wakeup Enabled
 
</pre>
 
</pre>
  
== Light guns ==
+
==== Steering wheel (and Pedals) ====
  
=== EMS TopGun II ===
+
Always connected to port 1 of the internal HUB
  
''This is an unlicensed / unofficial Xbox accessory.''
+
===== USB Descriptors =====
  
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
+
<pre>
 
+
Device Descriptor:
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
+
   bLength                18
There is no internal hub in this device.
+
   bDescriptorType        1
 
+
   bcdUSB              1.10
{| class="wikitable"
+
   bDeviceClass            0  
! EMS TopGun II !! Xbox Gamepad !! Notes
+
   bDeviceSubClass        0  
|-
+
   bDeviceProtocol        0  
| Stick || {{input-d}} ||
+
   bMaxPacketSize0         8
|-
+
   idVendor          0x3767
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
+
   idProduct          0x0101
|-
+
   bcdDevice            2.80
| Grip || {{input-b}}
+
   iManufacturer          0
|-
+
   iProduct                0
| A || {{input-x}}
+
   iSerial                0  
|-
+
   bNumConfigurations      1
| B || {{input-y}}
+
   Configuration Descriptor:
|-
+
     bLength                9
| START || {{input-start}} ||
+
     bDescriptorType        2
|-
+
     wTotalLength          32
| SE/BA || {{input-back}} ||
+
     bNumInterfaces          1
|-
+
     bConfigurationValue    1
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
+
     iConfiguration          0  
|-
+
     bmAttributes        0x80
| Aim Up / Down || {{input-ly}}
+
       (Bus Powered)
|}
+
     MaxPower              100mA
 
+
     Interface Descriptor:
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
+
       bLength                9
 
+
       bDescriptorType        4
===== Turbo Mode =====
+
       bInterfaceNumber        0
 
+
       bAlternateSetting      0
* Turbo mode 0 keeps {{input-a}} pressed  while trigger is held
+
       bNumEndpoints          2
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
+
       bInterfaceClass        88 Xbox
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
+
       bInterfaceSubClass    66 Controller
 
+
       bInterfaceProtocol      0  
===== Force Feedback =====
+
       iInterface              0  
 
+
       Endpoint Descriptor:
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
+
         bLength                7
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
+
         bDescriptorType        5
 
+
         bEndpointAddress    0x82 EP 2 IN
==== USB Descriptors ====
+
         bmAttributes            3
 
+
           Transfer Type            Interrupt
This is the descriptor in the Xbox mode (X).
+
           Synch Type              None
 
+
           Usage Type              Data
<pre>
+
         wMaxPacketSize    0x0020 1x 32 bytes
Bus 003 Device 016: ID 0b9a:016b 
+
         bInterval              4
Device Descriptor:
+
       Endpoint Descriptor:
   bLength                18
+
         bLength                7
   bDescriptorType        1
+
         bDescriptorType        5
   bcdUSB              1.10
+
         bEndpointAddress    0x02  EP 2 OUT
   bDeviceClass            0  
+
         bmAttributes            3
   bDeviceSubClass        0  
+
           Transfer Type            Interrupt
   bDeviceProtocol        0  
+
           Synch Type              None
   bMaxPacketSize0       64
+
           Usage Type              Data
   idVendor          0x0b9a
+
         wMaxPacketSize    0x0020 1x 32 bytes
   idProduct          0x016b
+
         bInterval              4
   bcdDevice            4.57
+
can't get debug descriptor: Resource temporarily unavailable
   iManufacturer          1 EMS̖E
+
Device Status:    0x0000
   iProduct                2 EMS TopGun
+
   (Bus Powered)
   iSerial                0  
+
</pre>
   bNumConfigurations      1
+
 
   Configuration Descriptor:
+
== Arcade Sticks ==
     bLength                9
+
 
     bDescriptorType        2
+
=== Xbox TECMO Dead or Alive 3 ARCADE Stick Joystick Controller Japan ===
     wTotalLength          32
+
 
     bNumInterfaces          1
+
{{FIXME}}
     bConfigurationValue    1
+
 
     iConfiguration          0  
+
=== Street Fighter 15th Anniversary Edition Arcade Stick ===
     bmAttributes        0x80
+
 
       (Bus Powered)
+
{{FIXME}}
     MaxPower              100mA
+
 
     Interface Descriptor:
+
=== Gamester Xbox Arcade Stick ===
       bLength                9
+
 
       bDescriptorType        4
+
{{FIXME}}
       bInterfaceNumber        0
+
 
       bAlternateSetting      0
+
=== Nuby Xbox Fighter Arcade Stick ===
       bNumEndpoints          2
+
 
       bInterfaceClass        88 Xbox
+
{{FIXME}}
       bInterfaceSubClass    66 Controller
+
 
       bInterfaceProtocol      0  
+
=== Nuby Xbox Arcade Super Stick ===
       iInterface              0  
+
 
       Endpoint Descriptor:
+
{{FIXME}}
         bLength                7
+
 
         bDescriptorType        5
+
The source image of the box and on device has item<nowiki>#:</nowiki>36020.
         bEndpointAddress    0x81 EP 1 IN
+
 
         bmAttributes            3
+
=== Naki Ultimate Fighting Stick ===
           Transfer Type            Interrupt
+
 
           Synch Type              None
+
{{FIXME}}
           Usage Type              Data
+
 
         wMaxPacketSize    0x0040 1x 64 bytes
+
[https://www.youtube.com/watch?v=4GphUsTzgds YouTube reviewer] report this joystick to have rumble support.
         bInterval              4
+
 
       Endpoint Descriptor:
+
== Light guns ==
         bLength                7
 
         bDescriptorType        5
 
         bEndpointAddress    0x02  EP 2 OUT
 
         bmAttributes            3
 
           Transfer Type            Interrupt
 
           Synch Type              None
 
           Usage Type              Data
 
         wMaxPacketSize    0x0040 1x 64 bytes
 
         bInterval              8
 
can't get debug descriptor: Resource temporarily unavailable
 
Device Status:    0x0000
 
   (Bus Powered)
 
</pre>
 
  
=== Joytech Sharp Shooter ===
+
Light guns use similar input and output reports to standard gamepads. Their bSubType is set to 0x50. They report where they are aimed in place of the left stick coordinates, and an extra bit at offset 3 in their input reports flags whether the light gun is currently pointed at the screen or not. Light guns may not function properly if they are not supplied with a video sync signal (they may not populate their input reports correctly, or even fail to enumerate as USB devices entirely).
  
''This is an unlicensed / unofficial Xbox accessory.''
+
=== Controller to Xbox ===
  
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
+
20 bytes
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
 
 
 
model numer: JS-901D
 
  
 
{| class="wikitable"
 
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
+
!Field
 +
!Offset (Bytes)
 +
!Mask
 +
!Notes
 
|-
 
|-
| Stick || {{input-d}} ||
+
|{{input-dy+}}
 +
|2
 +
|0x01
 +
|
 
|-
 
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
+
|{{input-dy-}}
 +
|2
 +
|0x02
 +
|
 
|-
 
|-
| B (Left side) || rowspan="3" | {{input-b}}
+
|{{input-dx-}}
 +
|2
 +
|0x04
 +
|
 
|-
 
|-
| B (Right side)
+
|{{input-dx+}}
 +
|2
 +
|0x08
 +
|
 
|-
 
|-
| B (Magazine button)
+
|{{input-start}}
 +
|2
 +
|0x10
 +
|
 
|-
 
|-
| x || {{input-x}}
+
|{{input-back}}
 +
|2
 +
|0x20
 +
|
 
|-
 
|-
| y || {{input-y}}
+
|Light visible
 +
|3
 +
|0x20
 +
|Set to 1 if the gun is pointed to a bright screen, 0 if no light visible.
 
|-
 
|-
| START || {{input-start}} ||
+
|Unknown 1
 +
|3
 +
|0x40
 +
|rowspan="2" | Light guns from different manufacturers include these two bits in their GET_CAPABILITIES reports, but they always seem to read back as 0 in GET_REPORT.
 
|-
 
|-
| BACK || {{input-back}} ||
+
|Unknown 2
 +
|3
 +
|0x80
 
|-
 
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
+
|{{input-a}} Trigger
 +
|4
 +
|0xFF
 +
|rowspan="6" | Digital only, either 0 or 255
 
|-
 
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
+
|{{input-b}}
|}
+
|5
 
+
|0xFF
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
+
|-
 
+
|{{input-x}}
===== Fire/Reload Mode =====
+
|6
 
+
|0xFF
* Normal mode does nothing, normal operation
+
|-
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}  
+
|{{input-y}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly  {{citation needed}}
+
|7
 
+
|0xFF
==== USB Descriptors ====
+
|-
 
+
|{{input-black}}
<pre>
+
|8
 +
|0xFF
 +
|-
 +
|{{input-white}}
 +
|9
 +
|0xFF
 +
|-
 +
|{{input-lx}}
 +
|12
 +
|0xFFFF
 +
|rowspan="2" | Absolute position using the full stick range.
 +
(0, 0) is the center of the screen and is also reported if the light gun is pointed off-screen.
 +
|-
 +
|{{input-ly}}
 +
|14
 +
|0xFFFF
 +
|}
 +
 
 +
=== Xbox to Controller ===
 +
 
 +
==== Force feedback: wValue: 0x0200, wLength: 6 ====
 +
 
 +
6 bytes
  
Bus 003 Device 025: ID 1292:3006 Innomedia
+
{| class="wikitable"
Device Descriptor:
+
!Field
  bLength                18
+
!Offset (Bytes)
  bDescriptorType        1
+
!Mask
  bcdUSB              1.10
+
!Notes
  bDeviceClass            0
+
|-
  bDeviceSubClass        0
+
|Actuator strength
  bDeviceProtocol        0
+
|2
  bMaxPacketSize0        8
+
|0xFFFF
  idVendor          0x1292 Innomedia
+
|
  idProduct          0x3006
+
|-
  bcdDevice            1.50
+
|(Unused)
  iManufacturer          0
+
|4
  iProduct                0
+
|0x0000
  iSerial                0
+
|
  bNumConfigurations      1
+
|}
  Configuration Descriptor:
+
 
    bLength                9
+
The 4Gamers-branded gun (which appears to be sold by a number of different manufacturers) only reports it has the left actuator, however it only responds to force feedback output reports for the ''right'' actuator. Games appear to always enable both actuators, whether the controller reports it has both or not.
    bDescriptorType        2
+
 
    wTotalLength          32
+
==== Calibration: wValue: 0x0201, wLength: 10 ====
    bNumInterfaces          1
+
 
    bConfigurationValue    1
+
10 bytes
    iConfiguration          1 (error)
+
 
    bmAttributes        0x80
+
{| class="wikitable"
      (Bus Powered)
+
!Field
    MaxPower              100mA
+
!Offset (Bytes)
    Interface Descriptor:
+
!Mask
      bLength                9
+
!Notes
      bDescriptorType        4
+
|-
      bInterfaceNumber        0
+
|Center calibration X
      bAlternateSetting      0
+
|2
      bNumEndpoints          2
+
|0xFFFF
      bInterfaceClass        88 Xbox
+
|rowspan="2"|Gun's reported value subtracted from (0,0)
      bInterfaceSubClass    66 Controller
+
|-
      bInterfaceProtocol      0
+
|Center calibration Y
      iInterface              2 (error)
+
|4
      Endpoint Descriptor:
+
|0xFFFF
        bLength                7
+
|-
        bDescriptorType        5
+
|Top left calibration X
        bEndpointAddress    0x81  EP 1 IN
+
|6
        bmAttributes            3
+
|0xFFFF
          Transfer Type            Interrupt
+
|rowspan="2"|Gun's reported value subtracted from (-25000,25000)
          Synch Type              None
+
|-
          Usage Type              Data
+
|Top left calibration Y
        wMaxPacketSize    0x0020  1x 32 bytes
+
|8
        bInterval              4
+
|0xFFFF
      Endpoint Descriptor:
+
|}
        bLength                7
+
 
        bDescriptorType        5
+
Light guns are expected to handle their own calibration, i.e. the game will tell the gun the offsets between its reported position and the expected position and then expect the gun to offset and scale its output to compensate. The calibration process runs as follows:
        bEndpointAddress    0x02  EP 2 OUT
+
 
        bmAttributes            3
+
# The game will first send a calibration report with all four offsets reset to (0, 0), (0, 0) to reset any offsets and scaling.
          Transfer Type            Interrupt
+
# The game will now display a target in the centre of the screen and ask you to shoot it. This will tell it how "wrong" the gun is when aimed at where it thinks (0, 0) should be on the screen. If the gun normally shoots slightly too high and further to the right, it might report (1000, 3000) for example.
          Synch Type              None
+
# The game sends a calibration report to the gun to negate the offset, e.g. (-1000, -3000), (0, 0) using our example of (1000, 3000) from before.
          Usage Type              Data
+
# The game will now display a target in at (-25000, 25000) on the screen and ask you to shoot it. This will tell it how "wrong" the gun is when aimed at the top left of the screen.
        wMaxPacketSize    0x0020  1x 32 bytes
+
# The coordinates received from the gun will be subtracted from the expected (-25000, 25000) and sent back to the gun in the second part of the calibration report along with the values previously determined for the centre position. If the first calibration was enough to adjust the screen offset we might have seen the "perfect" coordinates of (-25000, 25000) in which case the report would be (-1000, -3000), (0, 0) again. However, if our gun read the coordinates slightly closer the the middle of the screen at (-20000, 22000) then the report would be (-1000, -3000), (5000, -3000).
        bInterval              4
+
 
 +
If the light gun does not handle the calibration output report then you will not be able to get past the calibration screen in ''The House of the Dead III''.
 +
 
 +
=== EMS TopGun II ===
 +
 
 +
''This is an unlicensed / unofficial Xbox accessory.''
 +
 
 +
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
 +
 
 +
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
 +
There is no internal hub in this device.
  
Bus 003 Device 024: ID 1292:3006 Innomedia
+
{| class="wikitable"
Device Descriptor:
+
! EMS TopGun II !! Xbox Gamepad !! Notes
   bLength                18
+
|-
   bDescriptorType        1
+
| Stick || {{input-d}} ||
   bcdUSB              1.10
+
|-
   bDeviceClass            9 Hub
+
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
   bDeviceSubClass        0  
+
|-
   bDeviceProtocol        0 Full speed (or root) hub
+
| Grip || {{input-b}}
   bMaxPacketSize0         8
+
|-
   idVendor          0x1292 Innomedia
+
| A || {{input-x}}
   idProduct          0x3006
+
|-
   bcdDevice            1.50
+
| B || {{input-y}}
   iManufacturer          1 (c) 2004 R0R3 Inc.
+
|-
   iProduct                2 US Patent 6,287,198
+
| START || {{input-start}} ||
   iSerial                0  
+
|-
   bNumConfigurations      1
+
| SE/BA || {{input-back}} ||
   Configuration Descriptor:
+
|-
     bLength                9
+
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
     bDescriptorType        2
+
|-
     wTotalLength          25
+
| Aim Up / Down || {{input-ly}}
     bNumInterfaces          1
+
|}
     bConfigurationValue    1
+
 
     iConfiguration          4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
+
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
     bmAttributes        0xa0
+
 
       (Bus Powered)
+
===== Turbo Mode =====
      Remote Wakeup
+
 
     MaxPower               64mA
+
* Turbo mode 0 keeps {{input-a}} pressed  while trigger is held
     Interface Descriptor:
+
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
       bLength                9
+
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
       bDescriptorType        4
+
 
       bInterfaceNumber        0
+
===== Force Feedback =====
       bAlternateSetting      0
+
 
       bNumEndpoints          1
+
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
       bInterfaceClass         9 Hub
+
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
       bInterfaceSubClass     0
+
 
       bInterfaceProtocol      0 Full speed (or root) hub
+
==== USB Descriptors ====
       iInterface              5 (error)
+
 
       Endpoint Descriptor:
+
This is the descriptor in the Xbox mode (X).
         bLength                7
+
 
         bDescriptorType        5
+
<pre>
         bEndpointAddress    0x81  EP 1 IN
+
Bus 003 Device 016: ID 0b9a:016b 
         bmAttributes            3
+
Device Descriptor:
           Transfer Type            Interrupt
+
   bLength                18
           Synch Type              None
+
   bDescriptorType        1
           Usage Type              Data
+
   bcdUSB              1.10
         wMaxPacketSize    0x0001 1x 1 bytes
+
   bDeviceClass            0
         bInterval             255
+
   bDeviceSubClass        0  
Hub Descriptor:
+
   bDeviceProtocol        0  
  bLength               9
+
   bMaxPacketSize0       64
  bDescriptorType     41
+
   idVendor          0x0b9a
  nNbrPorts            3
+
   idProduct          0x016b
  wHubCharacteristic 0x000d
+
   bcdDevice            4.57
    Per-port power switching
+
   iManufacturer          1 EMS̖E
    Compound device
+
   iProduct                2 EMS TopGun
     Per-port overcurrent protection
+
   iSerial                0  
  bPwrOn2PwrGood      32 * 2 milli seconds
+
   bNumConfigurations      1
  bHubContrCurrent    64 milli Ampere
+
   Configuration Descriptor:
  DeviceRemovable    0x02
+
     bLength                9
  PortPwrCtrlMask    0x0e
+
     bDescriptorType        2
Hub Port Status:
+
     wTotalLength          32
  Port 1: 0000.0103 power enable connect
+
     bNumInterfaces          1
  Port 2: 0000.0100 power
+
     bConfigurationValue    1
  Port 3: 0100.0100 power
+
     iConfiguration          0
Device Status:    0x0000
+
     bmAttributes        0x80
   (Bus Powered)
+
       (Bus Powered)
</pre>
+
     MaxPower             100mA
 
+
     Interface Descriptor:
== Steel Battalion Controller ==
+
       bLength                9
 
+
       bDescriptorType        4
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
+
       bInterfaceNumber        0
 
+
       bAlternateSetting      0
=== USB Descriptors ===
+
       bNumEndpoints          2
 
+
       bInterfaceClass       88 Xbox
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
+
       bInterfaceSubClass     66 Controller
 
+
       bInterfaceProtocol      0  
<pre>bcdUSB:            0x0110
+
       iInterface              0
bDeviceClass:        0x00
+
       Endpoint Descriptor:
bDeviceSubClass:      0x00
+
         bLength                7
bDeviceProtocol:      0x00
+
         bDescriptorType        5
bMaxPacketSize0:      0x08 (8)
+
         bEndpointAddress    0x81  EP 1 IN
idVendor:          0x0A7B
+
         bmAttributes            3
idProduct:          0xD000
+
           Transfer Type            Interrupt
bcdDevice:          0x0100
+
           Synch Type              None
iManufacturer:        0x00
+
           Usage Type              Data
iProduct:            0x00
+
         wMaxPacketSize    0x0040 1x 64 bytes
iSerialNumber:        0x00
+
         bInterval               4
bNumConfigurations:  0x01
+
      Endpoint Descriptor:
 
+
        bLength                 7
ConnectionStatus: DeviceConnected
+
        bDescriptorType         5
Current Config Value: 0x00
+
        bEndpointAddress    0x02  EP 2 OUT
Device Bus Speed:    Full
+
        bmAttributes            3
Device Address:      0x03
+
          Transfer Type            Interrupt
Open Pipes:              0
+
          Synch Type              None
 
+
          Usage Type              Data
Configuration Descriptor:
+
        wMaxPacketSize     0x0040 1x 64 bytes
wTotalLength:      0x0020
+
        bInterval              8
bNumInterfaces:      0x01
+
can't get debug descriptor: Resource temporarily unavailable
bConfigurationValue:  0x01
+
Device Status:    0x0000
iConfiguration:      0x00
+
   (Bus Powered)
bmAttributes:        0x80 (Bus Powered )
+
</pre>
MaxPower:            0xFA (500 Ma)
+
 
 
+
=== Joytech Sharp Shooter ===
Interface Descriptor:
+
 
bInterfaceNumber:    0x00
+
''This is an unlicensed / unofficial Xbox accessory.''
bAlternateSetting:    0x00
+
 
bNumEndpoints:        0x02
+
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
bInterfaceClass:      0x58
+
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
bInterfaceSubClass:  0x42
+
 
bInterfaceProtocol:  0x00
+
model numer: JS-901D
iInterface:          0x00
+
 
 
+
{| class="wikitable"
Endpoint Descriptor:
+
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
bEndpointAddress:    0x82
+
|-
Transfer Type:  Interrupt</pre>
+
| Stick || {{input-d}} ||
 
 
=== Controller to Xbox ===
 
 
 
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
 
 
 
26 bytes
 
 
 
{| class="wikitable"
 
!Field
 
!Offset (Bytes)
 
!Mask
 
!Notes
 
|-
 
|RightJoyMainWeapon
 
|2
 
|0x01
 
|
 
|-
 
|RightJoyFire
 
|2
 
|0x03{{FIXME|reason=WTF?! Might be bad?}}
 
|
 
 
|-
 
|-
|RightJoyLockOn
+
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|2
+
|-
|0x04
+
| B (Left side) || rowspan="3" | {{input-b}}
|
 
 
|-
 
|-
|Eject
+
| B (Right side)
|2
 
|0x08
 
|
 
 
|-
 
|-
|CockpitHatch
+
| B (Magazine button)
|2
 
|0x10
 
|
 
 
|-
 
|-
|Ignition
+
| x || {{input-x}}
|2
 
|0x20
 
|
 
 
|-
 
|-
|Start
+
| y || {{input-y}}
|2
 
|0x40
 
|
 
 
|-
 
|-
|MultiMonOpenClose
+
| START || {{input-start}} ||
|2
 
|0x80
 
|
 
 
|-
 
|-
|MultiMonMapZoomInOut
+
| BACK || {{input-back}} ||
|3
 
|0x01
 
|
 
 
|-
 
|-
|MultiMonModeSelect
+
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|3
 
|0x02
 
|
 
 
|-
 
|-
|MultiMonSubMonitor
+
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|3
+
|}
|0x04
+
 
|
+
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
|-
+
 
|MainMonZoomIn
+
===== Fire/Reload Mode =====
|3
+
 
|0x08
+
* Normal mode does nothing, normal operation
|
+
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
|-
+
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly  {{citation needed}}
|MainMonZoomOut
+
 
|3
+
==== USB Descriptors ====
|0x10
+
 
|
+
<pre>
|-
+
 
|FunctionFSS
+
Bus 003 Device 025: ID 1292:3006 Innomedia
|3
+
Device Descriptor:
|0x20
+
  bLength                18
|
+
  bDescriptorType        1
|-
+
  bcdUSB              1.10
|FunctionManipulator
+
  bDeviceClass            0
|3
+
  bDeviceSubClass        0
|0x40
+
  bDeviceProtocol        0
|
+
  bMaxPacketSize0        8
|-
+
  idVendor          0x1292 Innomedia
|FunctionLineColorChange
+
  idProduct          0x3006
|3
+
  bcdDevice            1.50
|0x80
+
  iManufacturer          0
|
+
  iProduct                0
|-
+
  iSerial                0
|Washing
+
  bNumConfigurations      1
|4
+
  Configuration Descriptor:
|0x01
+
    bLength                9
|
+
    bDescriptorType        2
|-
+
    wTotalLength          32
|Extinguisher
+
    bNumInterfaces          1
|4
+
    bConfigurationValue    1
|0x02
+
    iConfiguration          1 (error)
|
+
    bmAttributes        0x80
|-
+
      (Bus Powered)
|Chaff
+
    MaxPower              100mA
|4
+
    Interface Descriptor:
|0x04
+
      bLength                9
|
+
      bDescriptorType        4
|-
+
      bInterfaceNumber        0
|FunctionTankDetach
+
      bAlternateSetting      0
|4
+
      bNumEndpoints          2
|0x08
+
      bInterfaceClass        88 Xbox
|
+
      bInterfaceSubClass    66 Controller
|-
+
      bInterfaceProtocol      0
|FunctionOverride
+
      iInterface              2 (error)
|4
+
      Endpoint Descriptor:
|0x10
+
        bLength                7
|
+
        bDescriptorType        5
|-
+
        bEndpointAddress    0x81  EP 1 IN
|FunctionNightScope
+
        bmAttributes            3
|4
+
          Transfer Type            Interrupt
|0x20
+
          Synch Type              None
|
+
          Usage Type              Data
|-
+
        wMaxPacketSize    0x0020  1x 32 bytes
|FunctionF1
+
        bInterval              4
|4
+
      Endpoint Descriptor:
|0x40
+
        bLength                7
|
+
        bDescriptorType        5
|-
+
        bEndpointAddress    0x02  EP 2 OUT
|FunctionF2
+
        bmAttributes            3
|4
+
          Transfer Type            Interrupt
|0x80
+
          Synch Type              None
|
+
          Usage Type              Data
|-
+
        wMaxPacketSize    0x0020  1x 32 bytes
|FunctionF3
+
        bInterval              4
|5
+
 
|0x01
+
Bus 003 Device 024: ID 1292:3006 Innomedia
|
+
Device Descriptor:
|-
+
  bLength                18
|WeaponConMain
+
  bDescriptorType        1
|5
+
  bcdUSB              1.10
|0x02
+
  bDeviceClass            9 Hub
|
+
  bDeviceSubClass        0
|-
+
  bDeviceProtocol        0 Full speed (or root) hub
|WeaponConSub
+
  bMaxPacketSize0        8
|5
+
  idVendor          0x1292 Innomedia
|0x04
+
  idProduct          0x3006
|
+
  bcdDevice            1.50
|-
+
  iManufacturer          1 (c) 2004 R0R3 Inc.
|WeaponConMagazine
+
  iProduct                2 US Patent 6,287,198
|5
+
  iSerial                0
|0x08
+
  bNumConfigurations      1
|
+
  Configuration Descriptor:
|-
+
    bLength                9
|Comm1
+
    bDescriptorType        2
|5
+
    wTotalLength          25
|0x10
+
    bNumInterfaces          1
|
+
    bConfigurationValue    1
|-
+
    iConfiguration          4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
|Comm2
+
    bmAttributes        0xa0
|5
+
      (Bus Powered)
|0x20
+
      Remote Wakeup
|
+
    MaxPower              64mA
|-
+
    Interface Descriptor:
|Comm3
+
      bLength                9
|5
+
      bDescriptorType        4
|0x40
+
      bInterfaceNumber        0
|
+
      bAlternateSetting      0
|-
+
      bNumEndpoints          1
|Comm4
+
      bInterfaceClass        9 Hub
|5
+
      bInterfaceSubClass      0
|0x80
+
      bInterfaceProtocol      0 Full speed (or root) hub
|
+
      iInterface              5 (error)
|-
+
      Endpoint Descriptor:
|Comm5
+
        bLength                7
|6
+
        bDescriptorType        5
|0x01
+
        bEndpointAddress    0x81  EP 1 IN
|
+
        bmAttributes            3
|-
+
          Transfer Type            Interrupt
|LeftJoySightChange
+
          Synch Type              None
|6
+
          Usage Type              Data
|0x02
+
        wMaxPacketSize    0x0001  1x 1 bytes
|
+
        bInterval            255
|-
+
Hub Descriptor:
|ToggleFilterControl
+
  bLength              9
|6
+
  bDescriptorType      41
|0x04
+
  nNbrPorts            3
|
+
  wHubCharacteristic 0x000d
|-
+
    Per-port power switching
|ToggleOxygenSupply
+
    Compound device
|6
+
    Per-port overcurrent protection
|0x08
+
  bPwrOn2PwrGood      32 * 2 milli seconds
|
+
  bHubContrCurrent    64 milli Ampere
|-
+
  DeviceRemovable    0x02
|ToggleFuelFlowRate
+
  PortPwrCtrlMask    0x0e
|6
+
Hub Port Status:
|0x10
+
  Port 1: 0000.0103 power enable connect
|
+
  Port 2: 0000.0100 power
|-
+
  Port 3: 0100.0100 power
|ToggleBuffreMaterial
+
Device Status:    0x0000
|6
+
  (Bus Powered)
|0x20
+
</pre>
|
+
 
|-
+
== Microphones ==
|ToggleVTLocation
+
 
|6
+
=== Xbox Communicator ===
|0x40
+
 
|
+
==== USB Descriptor ====
|-
+
 
|
+
<pre>
|6
+
Device Descriptor:
|0x80
+
  bLength                18
|
+
  bDescriptorType        1
|-
+
  bcdUSB              1.10
|
+
  bDeviceClass            0
|7
+
  bDeviceSubClass        0
|0xFF
+
  bDeviceProtocol        0
|
+
  bMaxPacketSize0        8
|-
+
  idVendor          0x045e Microsoft Corp.
|
+
  idProduct          0x0283 Xbox Communicator
|8
+
  bcdDevice            1.58
|0xFF
+
  iManufacturer          0
|
+
  iProduct                0
|-
+
  iSerial                0
|AimingX
+
  bNumConfigurations      1
|9
+
  Configuration Descriptor:
|0xFF, maybe 0xFFFF at offset 8?
+
    bLength                9
|"Aiming Lever" joystick on the right.  X Axis value.
+
    bDescriptorType        2
|-
+
    wTotalLength      0x002d
|AimingY
+
    bNumInterfaces          2
|11
+
    bConfigurationValue    1
|0xFF, maybe 0xFFFF at offset 10?
+
    iConfiguration          0
|"Aiming Lever" joystick on the right.  Y Axis value.
+
    bmAttributes        0x80
|-
+
      (Bus Powered)
|RotationLever
+
    MaxPower              100mA
|13
+
    Interface Descriptor:
|0xFF, maybe 0xFFFF at offset 12?
+
      bLength                9
|"Rotation Lever" joystick on the left.
+
      bDescriptorType        4
|-
+
      bInterfaceNumber        0
|SightChangeX
+
      bAlternateSetting      0
|15
+
      bNumEndpoints          1
|0xFF, maybe 0xFFFF at offset 14?
+
      bInterfaceClass      120
|"Sight Change" analog stick on the "Rotation Lever" joystick.  X Axis value.
+
      bInterfaceSubClass      0
|-
+
      bInterfaceProtocol      0
|SightChangeY
+
      iInterface              0
|17
+
      Endpoint Descriptor:
|0xFF, maybe 0xFFFF at offset 16?
+
        bLength                9
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
+
        bDescriptorType        5
|-
+
        bEndpointAddress    0x04 EP 4 OUT
|LeftPedal
+
        bmAttributes            5
|19
+
          Transfer Type            Isochronous
|0xFF, maybe 0xFFFF at offset 18?
+
          Synch Type              Asynchronous
|
+
          Usage Type              Data
|-
+
        wMaxPacketSize    0x0030  1x 48 bytes
|MiddlePedal
+
        bInterval              1
|21
+
        bRefresh                0
|0xFF, maybe 0xFFFF at offset 20?
+
        bSynchAddress          0
|
+
    Interface Descriptor:
|-
+
      bLength                9
|RightPedal
+
      bDescriptorType        4
|23
+
      bInterfaceNumber        1
|0xFF, maybe 0xFFFF at offset 22?
+
      bAlternateSetting      0
|
+
      bNumEndpoints          1
|-
+
      bInterfaceClass      120
|TunerDial
+
      bInterfaceSubClass      0
|24
+
      bInterfaceProtocol      0
|0x0F
+
      iInterface              0
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
+
      Endpoint Descriptor:
|-
+
        bLength                9
|
+
        bDescriptorType        5
|24
+
        bEndpointAddress    0x85  EP 5 IN
|0xF0
+
        bmAttributes            5
|
+
          Transfer Type            Isochronous
|-
+
          Synch Type              Asynchronous
|GearLever
+
          Usage Type              Data
|25
+
        wMaxPacketSize    0x0030  1x 48 bytes
|0xFF
+
        bInterval              1
|The gear lever on the left block.
+
        bRefresh                0
|}
+
        bSynchAddress          0
 +
</pre>
 +
 
 +
=== Xbox Karaoke ===
  
=== Xbox to Controller ===
+
==== USB Descriptor ====
  
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
+
<pre>
 
+
Device Descriptor:
34 bytes
+
  bLength                18
 
+
  bDescriptorType        1
{| class="wikitable"
+
  bcdUSB              1.10
!Field
+
  bDeviceClass            0
!Offset (Bytes)
+
  bDeviceSubClass        0
!Mask
+
  bDeviceProtocol        0
!Notes
+
  bMaxPacketSize0        8
|-
+
  idVendor          0x045e Microsoft Corp.
|EmergencyEject
+
  idProduct          0x0501
|2
+
  bcdDevice            1.00
|0x0F
+
  iManufacturer          1 Licensed 3PP Vendor
|
+
  iProduct                2 Karaoke Microphone Module
|-
+
  iSerial                0
|CockpitHatch
+
  bNumConfigurations      1
|2
+
  Configuration Descriptor:
|0xF0
+
    bLength                9
|
+
    bDescriptorType        2
|-
+
    wTotalLength      0x001b
|Ignition
+
    bNumInterfaces          1
|3
+
    bConfigurationValue    1
|0x0F
+
    iConfiguration          0
|
+
    bmAttributes        0x80
|-
+
      (Bus Powered)
|Start
+
    MaxPower              100mA
|3
+
    Interface Descriptor:
|0xF0
+
      bLength                9
|
+
      bDescriptorType        4
|-
+
      bInterfaceNumber        0
|OpenClose
+
      bAlternateSetting      0
|4
+
      bNumEndpoints          1
|0x0F
+
      bInterfaceClass      121
|
+
      bInterfaceSubClass      1
|-
+
      bInterfaceProtocol      0
|MapZoomInOut
+
      iInterface              0
|4
+
      Endpoint Descriptor:
|0xF0
+
        bLength                9
|
+
        bDescriptorType        5
|-
+
        bEndpointAddress    0x81  EP 1 IN
|ModeSelect
+
        bmAttributes            5
|5
+
          Transfer Type            Isochronous
|0x0F
+
          Synch Type              Asynchronous
|
+
          Usage Type              Data
|-
+
        wMaxPacketSize    0x0060  1x 96 bytes
|SubMonitorModeSelect
+
        bInterval              1
|5
+
        bRefresh                0
|0xF0
+
        bSynchAddress          0
|
+
</pre>
|-
+
 
|MainMonitorZoomIn
+
== Steel Battalion Controller ==
|6
+
 
|0x0F
+
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
|
+
 
|-
+
=== USB Descriptors ===
|MainMonitorZoomOut
+
 
|6
+
<pre>
|0xF0
+
Device Descriptor:
|
+
  bLength                18
|-
+
  bDescriptorType        1
|ForecastShootingSystem
+
  bcdUSB              1.10
|7
+
  bDeviceClass            0 (Defined at Interface level)
|0x0F
+
  bDeviceSubClass        0
|
+
  bDeviceProtocol        0
|-
+
  bMaxPacketSize0        8
|Manipulator
+
  idVendor          0x0a7b
|7
+
  idProduct          0xd000
|0xF0
+
  bcdDevice            1.00
|
+
  iManufacturer          0
|-
+
  iProduct                0
|LineColorChange
+
  iSerial                0
|8
+
  bNumConfigurations      1
|0x0F
+
  Configuration Descriptor:
|
+
    bLength                9
 +
    bDescriptorType        2
 +
    wTotalLength          32
 +
    bNumInterfaces          1
 +
    bConfigurationValue    1
 +
    iConfiguration          0
 +
    bmAttributes        0x80
 +
      (Bus Powered)
 +
    MaxPower              500mA
 +
    Interface Descriptor:
 +
      bLength                9
 +
      bDescriptorType        4
 +
      bInterfaceNumber        0
 +
      bAlternateSetting      0
 +
      bNumEndpoints          2
 +
      bInterfaceClass        88 Xbox
 +
      bInterfaceSubClass    66 Controller
 +
      bInterfaceProtocol      0
 +
      iInterface              0
 +
      Endpoint Descriptor:
 +
        bLength                7
 +
        bDescriptorType        5
 +
        bEndpointAddress    0x82  EP 2 IN
 +
        bmAttributes            3
 +
          Transfer Type            Interrupt
 +
          Synch Type              None
 +
          Usage Type              Data
 +
        wMaxPacketSize    0x0020  1x 32 bytes
 +
        bInterval              4
 +
      Endpoint Descriptor:
 +
        bLength                7
 +
        bDescriptorType        5
 +
        bEndpointAddress    0x01  EP 1 OUT
 +
        bmAttributes            3
 +
          Transfer Type            Interrupt
 +
          Synch Type              None
 +
          Usage Type              Data
 +
        wMaxPacketSize    0x0020  1x 32 bytes
 +
        bInterval              4
 +
</pre>
 +
 
 +
=== Controller to Xbox ===
 +
 
 +
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
 +
 
 +
26 bytes
 +
 
 +
{| class="wikitable"
 +
!Field
 +
!Offset (Bytes)
 +
!Mask
 +
!Notes
 
|-
 
|-
|Washing
+
|RightJoyMainWeapon
|8
+
|2
|0xF0
+
|0x01
 
|
 
|
 
|-
 
|-
|Extinguisher
+
|RightJoyFire
|9
+
|2
|0x0F
+
|0x02
 
|
 
|
 
|-
 
|-
|Chaff
+
|RightJoyLockOn
|9
+
|2
|0xF0
+
|0x04
 
|
 
|
 
|-
 
|-
|TankDetach
+
|Eject
|10
+
|2
|0x0F
+
|0x08
 
|
 
|
 
|-
 
|-
|Override
+
|CockpitHatch
|10
+
|2
|0xF0
+
|0x10
 
|
 
|
 
|-
 
|-
|NightScope
+
|Ignition
|11
+
|2
|0x0F
+
|0x20
 
|
 
|
 
|-
 
|-
|F1
+
|Start
|11
+
|2
|0xF0
+
|0x40
 
|
 
|
 
|-
 
|-
|F2
+
|MultiMonOpenClose
|12
+
|2
|0x0F
+
|0x80
 
|
 
|
 
|-
 
|-
|F3
+
|MultiMonMapZoomInOut
|12
+
|3
|0xF0
+
|0x01
 
|
 
|
 
|-
 
|-
|MainWeaponControl
+
|MultiMonModeSelect
|13
+
|3
|0x0F
+
|0x02
 
|
 
|
 
|-
 
|-
|SubWeaponControl
+
|MultiMonSubMonitor
|13
+
|3
|0xF0
+
|0x04
 
|
 
|
 
|-
 
|-
|MagazineChange
+
|MainMonZoomIn
|14
+
|3
|0x0F
+
|0x08
 
|
 
|
 
|-
 
|-
|Comm1
+
|MainMonZoomOut
|14
+
|3
|0xF0
+
|0x10
 
|
 
|
 
|-
 
|-
|Comm2
+
|FunctionFSS
|15
+
|3
|0x0F
+
|0x20
 
|
 
|
 
|-
 
|-
|Comm3
+
|FunctionManipulator
|15
+
|3
|0xF0
+
|0x40
 
|
 
|
 
|-
 
|-
|Comm4
+
|FunctionLineColorChange
|16
+
|3
|0x0F
+
|0x80
 
|
 
|
 
|-
 
|-
|Comm5
+
|Washing
|16
+
|4
|0xF0
+
|0x01
 
|
 
|
 
|-
 
|-
|
+
|Extinguisher
|17
+
|4
|0x0F
+
|0x02
 +
|
 +
|-
 +
|Chaff
 +
|4
 +
|0x04
 +
|
 +
|-
 +
|FunctionTankDetach
 +
|4
 +
|0x08
 
|
 
|
 
|-
 
|-
|GearR
+
|FunctionOverride
|17
+
|4
|0xF0
+
|0x10
 
|
 
|
 
|-
 
|-
|GearN
+
|FunctionNightScope
|18
+
|4
|0x0F
+
|0x20
 +
|
 +
|-
 +
|FunctionF1
 +
|4
 +
|0x40
 +
|
 +
|-
 +
|FunctionF2
 +
|4
 +
|0x80
 +
|
 +
|-
 +
|FunctionF3
 +
|5
 +
|0x01
 +
|
 +
|-
 +
|WeaponConMain
 +
|5
 +
|0x02
 +
|
 +
|-
 +
|WeaponConSub
 +
|5
 +
|0x04
 +
|
 +
|-
 +
|WeaponConMagazine
 +
|5
 +
|0x08
 +
|
 +
|-
 +
|Comm1
 +
|5
 +
|0x10
 +
|
 +
|-
 +
|Comm2
 +
|5
 +
|0x20
 +
|
 +
|-
 +
|Comm3
 +
|5
 +
|0x40
 +
|
 +
|-
 +
|Comm4
 +
|5
 +
|0x80
 +
|
 +
|-
 +
|Comm5
 +
|6
 +
|0x01
 +
|
 +
|-
 +
|LeftJoySightChange
 +
|6
 +
|0x02
 +
|
 +
|-
 +
|ToggleFilterControl
 +
|6
 +
|0x04
 +
|
 +
|-
 +
|ToggleOxygenSupply
 +
|6
 +
|0x08
 +
|
 +
|-
 +
|ToggleFuelFlowRate
 +
|6
 +
|0x10
 +
|
 +
|-
 +
|ToggleBuffreMaterial
 +
|6
 +
|0x20
 +
|
 +
|-
 +
|ToggleVTLocation
 +
|6
 +
|0x40
 +
|
 +
|-
 +
|
 +
|6
 +
|0x80
 +
|
 +
|-
 +
|
 +
|7
 +
|0xFF
 +
|
 +
|-
 +
|
 +
|8
 +
|0xFF
 +
|
 +
|-
 +
|AimingX
 +
|9
 +
|0xFFFF
 +
|"Aiming Lever" joystick on the right. Unsigned X Axis value: 0 (Left) to 0xFFFF (Right).
 +
|-
 +
|AimingY
 +
|11
 +
|0xFFFF
 +
|"Aiming Lever" joystick on the right. Unsigned Y Axis value: 0 (Top) to 0xFFFF (Bottom).
 +
|-
 +
|RotationLever
 +
|13
 +
|0xFFFF
 +
|"Rotation Lever" joystick on the left. Signed X Axis value: -0x7FFF (Left) to 0x7FFF (Right)
 +
|-
 +
|SightChangeX
 +
|15
 +
|0xFFFF
 +
|"Sight Change" analog stick on the "Rotation Lever" joystick. Signed X Axis value: -0x7FFF (Left) to 0x7FFF (Right)
 +
|-
 +
|SightChangeY
 +
|17
 +
|0xFFFF
 +
|"Sight Change" analog stick on the "Rotation Lever" joystick. Signed Y Axis value: -0x7FFF (Top) to 0x7FFF (Bottom)
 +
|-
 +
|LeftPedal
 +
|19
 +
|0xFFFF
 +
|
 +
|-
 +
|MiddlePedal
 +
|21
 +
|0xFFFF
 +
|
 +
|-
 +
|RightPedal
 +
|23
 +
|0xFFFF
 +
|
 +
|-
 +
|TunerDial
 +
|24
 +
|0x0F
 +
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
 +
|-
 +
|
 +
|24
 +
|0xF0
 +
|
 +
|-
 +
|GearLever
 +
|25
 +
|0xFF
 +
|The gear lever on the left block. R = -2, N = -1, 1st = 1, 2nd = 2, 3rd = 3, 4th = 4, 5th = 5. If the shifter is between two gears this value will be 0.
 +
|}
 +
 
 +
=== Xbox to Controller ===
 +
 
 +
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
 +
 
 +
22 bytes
 +
 
 +
{| class="wikitable"
 +
!Field
 +
!Offset (Bytes)
 +
!Mask
 +
!Notes
 +
|-
 +
|Start
 +
|0
 +
|0x00
 +
|This will always be 0x00
 +
|-
 +
|bLen
 +
|1
 +
|0x16
 +
|This will always be 0x16 (22 bytes)
 +
|-
 +
|EmergencyEject
 +
|2
 +
|0x0F
 +
|
 +
|-
 +
|CockpitHatch
 +
|2
 +
|0xF0
 +
|
 +
|-
 +
|Ignition
 +
|3
 +
|0x0F
 +
|
 +
|-
 +
|Start
 +
|3
 +
|0xF0
 +
|
 +
|-
 +
|OpenClose
 +
|4
 +
|0x0F
 +
|
 +
|-
 +
|MapZoomInOut
 +
|4
 +
|0xF0
 +
|
 +
|-
 +
|ModeSelect
 +
|5
 +
|0x0F
 +
|
 +
|-
 +
|SubMonitorModeSelect
 +
|5
 +
|0xF0
 +
|
 +
|-
 +
|MainMonitorZoomIn
 +
|6
 +
|0x0F
 +
|
 +
|-
 +
|MainMonitorZoomOut
 +
|6
 +
|0xF0
 +
|
 +
|-
 +
|ForecastShootingSystem
 +
|7
 +
|0x0F
 +
|
 +
|-
 +
|Manipulator
 +
|7
 +
|0xF0
 +
|
 +
|-
 +
|LineColorChange
 +
|8
 +
|0x0F
 +
|
 +
|-
 +
|Washing
 +
|8
 +
|0xF0
 +
|
 +
|-
 +
|Extinguisher
 +
|9
 +
|0x0F
 +
|
 +
|-
 +
|Chaff
 +
|9
 +
|0xF0
 +
|
 +
|-
 +
|TankDetach
 +
|10
 +
|0x0F
 +
|
 +
|-
 +
|Override
 +
|10
 +
|0xF0
 +
|
 +
|-
 +
|NightScope
 +
|11
 +
|0x0F
 +
|
 +
|-
 +
|F1
 +
|11
 +
|0xF0
 +
|
 +
|-
 +
|F2
 +
|12
 +
|0x0F
 +
|
 +
|-
 +
|F3
 +
|12
 +
|0xF0
 +
|
 +
|-
 +
|MainWeaponControl
 +
|13
 +
|0x0F
 +
|
 +
|-
 +
|SubWeaponControl
 +
|13
 +
|0xF0
 +
|
 +
|-
 +
|MagazineChange
 +
|14
 +
|0x0F
 +
|
 +
|-
 +
|Comm1
 +
|14
 +
|0xF0
 +
|
 +
|-
 +
|Comm2
 +
|15
 +
|0x0F
 +
|
 +
|-
 +
|Comm3
 +
|15
 +
|0xF0
 +
|
 +
|-
 +
|Comm4
 +
|16
 +
|0x0F
 +
|
 +
|-
 +
|Comm5
 +
|16
 +
|0xF0
 +
|
 +
|-
 +
|
 +
|17
 +
|0x0F
 +
|
 +
|-
 +
|GearR
 +
|17
 +
|0xF0
 +
|
 +
|-
 +
|GearN
 +
|18
 +
|0x0F
 
|
 
|
 
|-
 
|-
 
|Gear1
 
|Gear1
|18
+
|18
|0xF0
+
|0xF0
|
+
|
|-
+
|-
|Gear2
+
|Gear2
|19
+
|19
|0x0F
+
|0x0F
|
+
|
|-
+
|-
|Gear3
+
|Gear3
|19
+
|19
|0xF0
+
|0xF0
|
+
|
|-
+
|-
|Gear4
+
|Gear4
|20
+
|20
|0x0F
+
|0x0F
|
+
|
|-
+
|-
|Gear5
+
|Gear5
|20
+
|20
|0xF0
+
|0xF0
|
+
|
|}
+
|-
 +
|Unused?
 +
|21
 +
|
 +
|-
 +
|}
 +
 
 +
== SEGA Chihiro Baseboard ==
 +
 
 +
Contains 2 USB devices which directly attach to USB ports 3 & 4 (player 0, 1)
 +
 
 +
=== USB Descriptors ===
 +
 
 +
<pre>
 +
[Device Descriptor]
 +
----------------------------------------------
 +
  Length              = 18
 +
  DescriptorType      = 0x01
 +
  USB version        = 1.00
 +
  Vendor:Product      = 0ca3:0003
 +
  MaxPacketSize0      = 64
 +
  NumConfigurations  = 1
 +
  Device version      = 1.03
 +
  Device Class:SubClass:Protocol = 60:01:00
 +
 
 +
[Configuration Descriptor]
 +
----------------------------------------------
 +
  Length              =  9
 +
  DescriptorType      = 02
 +
  wTotalLength        = 60
 +
  bNumInterfaces      = 1
 +
  bConfigurationValue = 1
 +
  iConfiguration      = 0
 +
  bmAttributes        = 0x80
 +
  MaxPower            = 150
 +
 
 +
    [Interface Descriptor]
 +
    ----------------------------------------------
 +
      Length              =  9
 +
      DescriptorType      = 04
 +
      bInterfaceNumber    = 0
 +
      bAlternateSetting  = 0
 +
      bNumEndpoints      = 6
 +
      bInterfaceClass    = 0xff
 +
      bInterfaceSubClass  = 0x00
 +
      bInterfaceProtocol  = 0x00
 +
      iInterface          = 0
 +
 
 +
        [Endpoint Descriptor]
 +
        ----------------------------------------------
 +
          Length              =  7
 +
          DescriptorType      = 05
 +
          bEndpointAddress    = 0x01
 +
          bmAttributes        = 0x02
 +
          wMaxPacketSize      = 64
 +
          bInterval          = 0
 +
          bRefresh            = 7
 +
          bSynchAddress      = 5
 +
 
 +
        [Endpoint Descriptor]
 +
        ----------------------------------------------
 +
          Length              =  7
 +
          DescriptorType      = 05
 +
          bEndpointAddress    = 0x02
 +
          bmAttributes        = 0x02
 +
          wMaxPacketSize      = 64
 +
          bInterval          = 0
 +
          bRefresh            = 7
 +
          bSynchAddress      = 5
 +
 
 +
        [Endpoint Descriptor]
 +
        ----------------------------------------------
 +
          Length              =  7
 +
          DescriptorType      = 05
 +
          bEndpointAddress    = 0x03
 +
          bmAttributes        = 0x02
 +
          wMaxPacketSize      = 64
 +
          bInterval          = 0
 +
          bRefresh            = 7
 +
          bSynchAddress      = 5
 +
 
 +
        [Endpoint Descriptor]
 +
        ----------------------------------------------
 +
          Length              =  7
 +
          DescriptorType      = 05
 +
          bEndpointAddress    = 0x81
 +
          bmAttributes        = 0x02
 +
          wMaxPacketSize      = 64
 +
          bInterval          = 0
 +
          bRefresh            = 7
 +
          bSynchAddress      = 5
 +
 
 +
        [Endpoint Descriptor]
 +
        ----------------------------------------------
 +
          Length              =  7
 +
          DescriptorType      = 05
 +
          bEndpointAddress    = 0x82
 +
          bmAttributes        = 0x02
 +
          wMaxPacketSize      = 64
 +
          bInterval          = 0
 +
          bRefresh            = 7
 +
          bSynchAddress      = 5
 +
 
 +
        [Endpoint Descriptor]
 +
        ----------------------------------------------
 +
          Length              =  7
 +
          DescriptorType      = 05
 +
          bEndpointAddress    = 0x83
 +
          bmAttributes        = 0x02
 +
          wMaxPacketSize      = 64
 +
          bInterval          = 0
 +
          bRefresh            = 0
 +
          bSynchAddress      = 0
 +
</pre>
 +
<pre>
 +
[Device Descriptor]
 +
----------------------------------------------
 +
  Length              = 18
 +
  DescriptorType      = 0x01
 +
  USB version        = 1.00
 +
  Vendor:Product      = 0ca3:0002
 +
  MaxPacketSize0      = 64
 +
  NumConfigurations  = 1
 +
  Device version      = 1.03
 +
  Device Class:SubClass:Protocol = 60:00:00
 +
 
 +
[Configuration Descriptor]
 +
----------------------------------------------
 +
  Length              =  9
 +
  DescriptorType      = 02
 +
  wTotalLength        = 88
 +
  bNumInterfaces      = 1
 +
  bConfigurationValue = 1
 +
  iConfiguration      = 0
 +
  bmAttributes        = 0x80
 +
  MaxPower            = 150
 +
 
 +
    [Interface Descriptor]
 +
    ----------------------------------------------
 +
      Length              =  9
 +
      DescriptorType      = 04
 +
      bInterfaceNumber    = 0
 +
      bAlternateSetting  = 0
 +
      bNumEndpoints      = 10
 +
      bInterfaceClass    = 0xff
 +
      bInterfaceSubClass  = 0x00
 +
      bInterfaceProtocol  = 0x00
 +
      iInterface          = 0
 +
 
 +
        [Endpoint Descriptor]
 +
        ----------------------------------------------
 +
          Length              =  7
 +
          DescriptorType      = 05
 +
          bEndpointAddress    = 0x01
 +
          bmAttributes        = 0x02
 +
          wMaxPacketSize      = 64
 +
          bInterval          = 0
 +
          bRefresh            = 7
 +
          bSynchAddress      = 5
 +
 
 +
        [Endpoint Descriptor]
 +
        ----------------------------------------------
 +
          Length              =  7
 +
          DescriptorType      = 05
 +
          bEndpointAddress    = 0x02
 +
          bmAttributes        = 0x02
 +
          wMaxPacketSize      = 64
 +
          bInterval          = 0
 +
          bRefresh            = 7
 +
          bSynchAddress      = 5
 +
 
 +
        [Endpoint Descriptor]
 +
        ----------------------------------------------
 +
          Length              =  7
 +
          DescriptorType      = 05
 +
          bEndpointAddress    = 0x03
 +
          bmAttributes        = 0x02
 +
          wMaxPacketSize      = 64
 +
          bInterval          = 0
 +
          bRefresh            = 7
 +
          bSynchAddress      = 5
 +
 
 +
        [Endpoint Descriptor]
 +
        ----------------------------------------------
 +
          Length              =  7
 +
          DescriptorType      = 05
 +
          bEndpointAddress    = 0x04
 +
          bmAttributes        = 0x02
 +
          wMaxPacketSize      = 64
 +
          bInterval          = 0
 +
          bRefresh            = 7
 +
          bSynchAddress      = 5
 +
 
 +
        [Endpoint Descriptor]
 +
        ----------------------------------------------
 +
          Length              =  7
 +
          DescriptorType      = 05
 +
          bEndpointAddress    = 0x05
 +
          bmAttributes        = 0x02
 +
          wMaxPacketSize      = 64
 +
          bInterval          = 0
 +
          bRefresh            = 7
 +
          bSynchAddress      = 5
 +
 
 +
        [Endpoint Descriptor]
 +
        ----------------------------------------------
 +
          Length              =  7
 +
          DescriptorType      = 05
 +
          bEndpointAddress    = 0x81
 +
          bmAttributes        = 0x02
 +
          wMaxPacketSize      = 64
 +
          bInterval          = 0
 +
          bRefresh            = 7
 +
          bSynchAddress      = 5
 +
 
 +
        [Endpoint Descriptor]
 +
        ----------------------------------------------
 +
          Length              =  7
 +
          DescriptorType      = 05
 +
          bEndpointAddress    = 0x82
 +
          bmAttributes        = 0x02
 +
          wMaxPacketSize      = 64
 +
          bInterval          = 0
 +
          bRefresh            = 7
 +
          bSynchAddress      = 5
 +
 
 +
        [Endpoint Descriptor]
 +
        ----------------------------------------------
 +
          Length              =  7
 +
          DescriptorType      = 05
 +
          bEndpointAddress    = 0x83
 +
          bmAttributes        = 0x02
 +
          wMaxPacketSize      = 64
 +
          bInterval          = 0
 +
          bRefresh            = 7
 +
          bSynchAddress      = 5
 +
 
 +
        [Endpoint Descriptor]
 +
        ----------------------------------------------
 +
          Length              =  7
 +
          DescriptorType      = 05
 +
          bEndpointAddress    = 0x84
 +
          bmAttributes        = 0x02
 +
          wMaxPacketSize      = 64
 +
          bInterval          = 0
 +
          bRefresh            = 7
 +
          bSynchAddress      = 5
 +
 
 +
        [Endpoint Descriptor]
 +
        ----------------------------------------------
 +
          Length              =  7
 +
          DescriptorType      = 05
 +
          bEndpointAddress    = 0x85
 +
          bmAttributes        = 0x02
 +
          wMaxPacketSize      = 64
 +
          bInterval          = 0
 +
          bRefresh            = 0
 +
          bSynchAddress      = 0
 +
</pre>
 +
 
 +
== Related links ==
 +
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
  
== Related links ==
+
[https://docs.google.com/spreadsheets/d/1-c1tXfOMvaWuno3ixQyI_rPCQVAZA24N4v9OPZUSrCk/edit?usp=sharing Compilation of Xbox Controller Hardware Research]
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
 

Latest revision as of 13:26, 7 August 2024

Contents

XID Overview

XIDs are USB devices.

The hardware side is USB with a different plug while the software side is USB without HID-descriptors. Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator. The logical XID gamepad USB device is internally connected to that hub.


USB Adapters

The Xbox's Input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter; decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).

Wiring diagram to show how male Xbox controller plug maps to standard female USB connector. White cable color is depicted as gray for better visibility. The yellow cable is not connected to the USB side, as it's exclusive to Xbox.
Port (From) Plug (To) Link
Xbox USB-A Amazon Aliexpress
USB-A Xbox Amazon Aliexpress

Wiring

Untested / unverified! Take this with a grain of salt.

Pin Typical cable color Description
1 Red VCC
2 White USB D+
3 Green USB D-
4 Yellow VBlank signal from video output (for Lightguns)
5 Black GND

Protocol

XID are similar to HID but have custom Vendor requests

Control Transfers

GET_DESCRIPTOR
  • bmRequestType: 0xC1
  • bRequest: 6
  • wValue: 0x4200
  • wIndex: Interface number
  • wLength: <length of respective report; typically 16>

Actual length is truncated to size of descriptor or wLength. Whichever is smaller.

typedef struct XIDDescriptor {
    uint8_t bLength;
    uint8_t bDescriptorType;
    uint16_t bcdXid;
    uint8_t bType;
    uint8_t bSubType;
    uint8_t bMaxInputReportSize;
    uint8_t bMaxOutputReportSize;
    uint16_t wAlternateProductIds[4];
};

bDescriptorType is probably always 0x42.

bType = 1: Xbox Gamecontroller
  • bSubType:
    • 0x01 = Gamepad (Duke)
    • 0x02 = Gamepad (Controller-S)
    • 0x10 = Steering wheel
    • 0x20 = Arcade Stick
    • 0x50 = Light gun
bType = 3: Xbox DVD Movie Playback IR Dongle
  • bSubType:
    • 0x00
bType = 128: Steel Battalion
  • bSubType:
    • 0x01
Example XID reports

This is an example XID descriptor taken from a Controller-S (VID 0x045E / PID 0x0289).

bLength              0x10 (16 bytes)
bDescriptorType      0x42
bcdXid               0x0100 (USB 1.0)
bType                0x01
bSubType             0x02
bMaxInputReportSize  0x14 (20 bytes)
bMaxOutputReportSize 0x06 (6 bytes)
wAlternateProductIds 4 x 0xFFFF

This is an example XID descriptor taken from a Steel Battalion controller.

bLength              0x10 (16 bytes)
bDescriptorType      0x42
bcdXid               0x0100 (USB 1.0)
bType                0x80
bSubType             0x01
bMaxInputReportSize  0x1A (26 bytes)
bMaxOutputReportSize 0x16 (22 bytes)
wAlternateProductIds 4 x 0xFFFF

This is an example XID descriptor taken from an official Microsoft DVD Movie Playback IR dongle.

bLength              0x08 (8 bytes)
bDescriptorType      0x42
bcdXid               0x0100 (USB 1.0)
bType                0x03
bSubType             0x00
bMaxInputReportSize  0x06 (6 bytes)
bMaxOutputReportSize 0x00 (0 bytes)
GET_CAPABILITIES
  • bmRequestType: 0xC1
  • bRequest: 1
  • wValue:
    • 0x0100 for input
    • 0x0200 for output
  • wIndex: Interface number
  • wLength: <length of respective report>


  • STALL if wValue not supported.

Actual length is truncated to size of report or wLength. Whichever is smaller.

typedef struct XIDGamepadCapabilities {
    uint8_t bReportId;
    uint8_t bLength;
    <Data>
}

The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report. If the bit is auto-generated, it will be cleared (0).

SET_REPORT
  • bmRequestType: 0x21
  • bRequest: 9
  • wValue: 0x0200
  • wIndex: Interface number
  • wLength: <length of report; typically 6>


  • STALL if wValue not supported.
Typical report
typedef struct XIDGamepadReport {
    uint8_t bReportId;
    uint8_t bLength;
    <Data>
}
GET_REPORT
  • bmRequestType: 0xA1
  • bRequest: 1
  • wValue: 0x0100
  • wIndex: Interface number
  • wLength: <length of report; typically 20>


  • STALL if wValue not supported or if wLength is greater than report size.
  • ACK if supported.
Typical report
typedef struct XIDGamepadOutputReport {
    uint8_t report_id; //FIXME: is this correct?
    uint8_t length;
    <Data>
}

Interrupt transfers

Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.

In case of the interrupt-in, there is another status which can occur now:

  • NAK if supported but no changes since last ACK.

Standard Gamepads

Microsoft Hardware Variants

There are a few hardware re-designs of the Microsoft Gamepad.

Controller Name Part Number Board Model Notes Datasheets
Xbox Game Controller (AKA "Duke") X08-17160 23-0819B Earliest known model[FIXME]. 3 IC's: Dedicated ST 92163/JFL Micro Controller, dedicated AT43USB401 USB Controller, 4 Channel Analog Mux LW052A. ST 92163/JFL, AT43USB401[FIXME], LW052A
Xbox Game Controller (AKA "Duke") X08-17160 K023B121 Same as 23-0819B, but manufactured in China. Only Board Model that does not follow naming conventions. Hardware identical. Easily identified by a serial number that starts with "KD". ST 92163/JFL, AT43USB401[FIXME], LW052A
Xbox Game Controller (AKA "Duke") X08-17160 23-0819C Last known Duke model.[FIXME]. Identical to 23-0819B in hardware, new silkscreen markings show this model is UL-94 V-0 compliant. All boards after this are V-0 compliant. ST 92163/JFL, AT43USB401[FIXME], LW052A
Xbox Game Controller (Looks like an S, with green Xbox jewel) X08-19383 23-0923A Japan and Australia exclusive model[FIXME].Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design. ST 92163/JFL, AT43USB401[FIXME], LW052A
Xbox Controller S X08-69873 23-0923B Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design ST 92163/JFL, AT43USB401[FIXME], LW052A
Xbox Controller S X08-69873 23-0923H Entirely new PCB design. Single IC on the board, AT43USB355M-AC AT43USB355M-AC
Xbox Controller S X08-69873 23-0923I PCB Design almost exactly the same as H revision. Only difference is the IC is smaller: AT43USB353M-AC AT43USB353M-AC

There are also dedicated Part Numbers for color variants:

Controller Part Number Controller Description Board Model
X02332-001 Crystal S Controller 23-0923I
X09-64240-01 Transparent Green Controller 23-0923I
X800679-100 Black S With Halo Jewel 23-0923I

USB Descriptors

See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.

23-0819B

Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass            0 
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  idVendor           0x045e Microsoft Corp.
  idProduct          0x0202 Xbox Controller
  bcdDevice            1.00
  iManufacturer           0 
  iProduct                0 
  iSerial                 0 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           32
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0x80
      (Bus Powered)
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass        88 Xbox
      bInterfaceSubClass     66 Controller
      bInterfaceProtocol      0 
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0020  1x 32 bytes
        bInterval               4
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x02  EP 2 OUT
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0020  1x 32 bytes
        bInterval               4

K023B121

Identical to 23-0819B [FIXME]

23-0819C

Identical to 23-0819B [FIXME]

23-0923A

Changes from 23-0819B

Device Descriptor:
  idProduct: 0x0285

23-0923B

[FIXME]

23-0923H

Changes from 23-0819B

Device Descriptor
  bMaxPacketSize0: 8
  idProduct: 0x0289
  bcdDevice: 1.20
  Configuration Descriptor
    Interface Descriptor
      Endpoint Descriptor
        bEndpointAddress: 0x81

23-0923I

Changes from 23-0923H

Device Descriptor
  bcdDevice: 1.21

Controller to Xbox

20 bytes

Field Offset (Bytes) Mask Notes
Alt=Digital-Pad-Up 2 0x01
Alt=Digital-Pad-Down 2 0x02
Alt=Digital-Pad-Left 2 0x04
Alt=Digital-Pad-Right 2 0x08
Alt=START button 2 0x10
Alt=BACK button 2 0x20
Alt=Left-Thumbstick-Press 2 0x40
Alt=Right-Thumbstick-Press 2 0x80
Alt=A button 4 0xFF Button is analog
Alt=B button 5 0xFF Button is analog
Alt=X button 6 0xFF Button is analog
Alt=Y button 7 0xFF Button is analog
Alt=Black button 8 0xFF Button is analog
Alt=White button 9 0xFF Button is analog
Left-Trigger 10 0xFF Trigger is analog
Right-Trigger 11 0xFF Trigger is analog
Alt=Left-Thumbstick-Horizontal 12 0xFFFF Negative = Left; Positive = Right
Alt=Left-Thumbstick-Vertical 14 0xFFFF Negative = Down; Positive = Up
Alt=Right-Thumbstick-Horizontal 16 0xFFFF Negative = Left; Positive = Right
Alt=Right-Thumbstick-Vertical 18 0xFFFF Negative = Down; Positive = Up

Xbox to Controller

6 bytes

Field Offset (Bytes) Mask Notes
Left actuator strength 2 0xFFFF
Right actuator strength 4 0xFFFF

The Microsoft Controller S will not react to packets which don't have a value of 6 in the length field of the header. The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.

Steering wheels

MadCatz Wheel

[FIXME]

Fanatec Speedster 3 ForceShock

Pedals

The Pedals are not a USB device.

Note that the cable going to the pedals is also not a USB port despite using the Xbox controller breakaway plug. Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):

new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device

Internal HUB

USB Descriptors

Power not connected, pedals not connected, not in Tuning mode:

Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass            9 Hub
  bDeviceSubClass         0 
  bDeviceProtocol         0 Full speed (or root) hub
  bMaxPacketSize0         8
  idVendor           0x3767 
  idProduct          0x0102 
  bcdDevice            0.01
  iManufacturer           0 
  iProduct                1 End
  iSerial                 0 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           25
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0xa0
      (Bus Powered)
      Remote Wakeup
    MaxPower               64mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         9 Hub
      bInterfaceSubClass      0 
      bInterfaceProtocol      0 Full speed (or root) hub
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0001  1x 1 bytes
        bInterval             255
Hub Descriptor:
  bLength               9
  bDescriptorType      41
  nNbrPorts             3
  wHubCharacteristic 0x000d
    Per-port power switching
    Compound device
    Per-port overcurrent protection
  bPwrOn2PwrGood       50 * 2 milli seconds
  bHubContrCurrent     64 milli Ampere
  DeviceRemovable    0x02
  PortPwrCtrlMask    0xff
 Hub Port Status:
   Port 1: 0000.0103 power enable connect
   Port 2: 0000.0100 power
   Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status:     0x0003
  Self Powered
  Remote Wakeup Enabled

Steering wheel (and Pedals)

Always connected to port 1 of the internal HUB

USB Descriptors
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass            0 
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0         8
  idVendor           0x3767 
  idProduct          0x0101 
  bcdDevice            2.80
  iManufacturer           0 
  iProduct                0 
  iSerial                 0 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           32
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0x80
      (Bus Powered)
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass        88 Xbox
      bInterfaceSubClass     66 Controller
      bInterfaceProtocol      0 
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0020  1x 32 bytes
        bInterval               4
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x02  EP 2 OUT
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0020  1x 32 bytes
        bInterval               4
can't get debug descriptor: Resource temporarily unavailable
Device Status:     0x0000
  (Bus Powered)

Arcade Sticks

Xbox TECMO Dead or Alive 3 ARCADE Stick Joystick Controller Japan

[FIXME]

Street Fighter 15th Anniversary Edition Arcade Stick

[FIXME]

Gamester Xbox Arcade Stick

[FIXME]

Nuby Xbox Fighter Arcade Stick

[FIXME]

Nuby Xbox Arcade Super Stick

[FIXME]

The source image of the box and on device has item#:36020.

Naki Ultimate Fighting Stick

[FIXME]

YouTube reviewer report this joystick to have rumble support.

Light guns

Light guns use similar input and output reports to standard gamepads. Their bSubType is set to 0x50. They report where they are aimed in place of the left stick coordinates, and an extra bit at offset 3 in their input reports flags whether the light gun is currently pointed at the screen or not. Light guns may not function properly if they are not supplied with a video sync signal (they may not populate their input reports correctly, or even fail to enumerate as USB devices entirely).

Controller to Xbox

20 bytes

Field Offset (Bytes) Mask Notes
Alt=Digital-Pad-Up 2 0x01
Alt=Digital-Pad-Down 2 0x02
Alt=Digital-Pad-Left 2 0x04
Alt=Digital-Pad-Right 2 0x08
Alt=START button 2 0x10
Alt=BACK button 2 0x20
Light visible 3 0x20 Set to 1 if the gun is pointed to a bright screen, 0 if no light visible.
Unknown 1 3 0x40 Light guns from different manufacturers include these two bits in their GET_CAPABILITIES reports, but they always seem to read back as 0 in GET_REPORT.
Unknown 2 3 0x80
Alt=A button Trigger 4 0xFF Digital only, either 0 or 255
Alt=B button 5 0xFF
Alt=X button 6 0xFF
Alt=Y button 7 0xFF
Alt=Black button 8 0xFF
Alt=White button 9 0xFF
Alt=Left-Thumbstick-Horizontal 12 0xFFFF Absolute position using the full stick range.

(0, 0) is the center of the screen and is also reported if the light gun is pointed off-screen.

Alt=Left-Thumbstick-Vertical 14 0xFFFF

Xbox to Controller

Force feedback: wValue: 0x0200, wLength: 6

6 bytes

Field Offset (Bytes) Mask Notes
Actuator strength 2 0xFFFF
(Unused) 4 0x0000

The 4Gamers-branded gun (which appears to be sold by a number of different manufacturers) only reports it has the left actuator, however it only responds to force feedback output reports for the right actuator. Games appear to always enable both actuators, whether the controller reports it has both or not.

Calibration: wValue: 0x0201, wLength: 10

10 bytes

Field Offset (Bytes) Mask Notes
Center calibration X 2 0xFFFF Gun's reported value subtracted from (0,0)
Center calibration Y 4 0xFFFF
Top left calibration X 6 0xFFFF Gun's reported value subtracted from (-25000,25000)
Top left calibration Y 8 0xFFFF

Light guns are expected to handle their own calibration, i.e. the game will tell the gun the offsets between its reported position and the expected position and then expect the gun to offset and scale its output to compensate. The calibration process runs as follows:

  1. The game will first send a calibration report with all four offsets reset to (0, 0), (0, 0) to reset any offsets and scaling.
  2. The game will now display a target in the centre of the screen and ask you to shoot it. This will tell it how "wrong" the gun is when aimed at where it thinks (0, 0) should be on the screen. If the gun normally shoots slightly too high and further to the right, it might report (1000, 3000) for example.
  3. The game sends a calibration report to the gun to negate the offset, e.g. (-1000, -3000), (0, 0) using our example of (1000, 3000) from before.
  4. The game will now display a target in at (-25000, 25000) on the screen and ask you to shoot it. This will tell it how "wrong" the gun is when aimed at the top left of the screen.
  5. The coordinates received from the gun will be subtracted from the expected (-25000, 25000) and sent back to the gun in the second part of the calibration report along with the values previously determined for the centre position. If the first calibration was enough to adjust the screen offset we might have seen the "perfect" coordinates of (-25000, 25000) in which case the report would be (-1000, -3000), (0, 0) again. However, if our gun read the coordinates slightly closer the the middle of the screen at (-20000, 22000) then the report would be (-1000, -3000), (5000, -3000).

If the light gun does not handle the calibration output report then you will not be able to get past the calibration screen in The House of the Dead III.

EMS TopGun II

This is an unlicensed / unofficial Xbox accessory.

The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm

The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P). There is no internal hub in this device.

EMS TopGun II Xbox Gamepad Notes
Stick Alt=Digital-Pad
Trigger Alt=A button Digital only, either 0 or 255
Grip Alt=B button
A Alt=X button
B Alt=Y button
START Alt=START button
SE/BA Alt=BACK button
Aim Left / Right Alt=Left-Thumbstick-Horizontal Absolute position using the full stick range
Aim Up / Down Alt=Left-Thumbstick-Vertical

There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).

Turbo Mode
  • Turbo mode 0 keeps Alt=A button pressed while trigger is held
  • Turbo mode 1 toggles Alt=A button rapidly while trigger is held
  • Turbo mode 2 toggles Alt=A button rapidly and once in a while Alt=B button while trigger is held
Force Feedback

The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick). I could not get the force feedback working, but I'm sure I've had it working in the past on PC.[citation needed]

USB Descriptors

This is the descriptor in the Xbox mode (X).

Bus 003 Device 016: ID 0b9a:016b  
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass            0 
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  idVendor           0x0b9a 
  idProduct          0x016b 
  bcdDevice            4.57
  iManufacturer           1 EMS̖E
  iProduct                2 EMS TopGun
  iSerial                 0 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           32
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0x80
      (Bus Powered)
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass        88 Xbox
      bInterfaceSubClass     66 Controller
      bInterfaceProtocol      0 
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               4
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x02  EP 2 OUT
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               8
can't get debug descriptor: Resource temporarily unavailable
Device Status:     0x0000
  (Bus Powered)

Joytech Sharp Shooter

This is an unlicensed / unofficial Xbox accessory.

The third party light gun from Joytech reports itself as 2 devices and mentions pattent US6287198 it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.

model numer: JS-901D

Joytech Sharp Shooter Xbox Gamepad Notes
Stick Alt=Digital-Pad
Trigger Alt=A button Digital only, either 0 or 255 [citation needed]
B (Left side) Alt=B button
B (Right side)
B (Magazine button)
x Alt=X button
y Alt=Y button
START Alt=START button
BACK Alt=BACK button
Aim Left / Right Alt=Left-Thumbstick-Horizontal [citation needed]
Aim Up / Down Alt=Left-Thumbstick-Vertical [citation needed]

There is no right thumbstick, thumbstick presses, black/white button or trigger buttons [citation needed]

Fire/Reload Mode
  • Normal mode does nothing, normal operation
  • Auto reload mode toggles Alt=B button rapidly to rappidly reload [citation needed]
  • Auto fire+reload mode toggles Alt=A button + Alt=B button rapidly [citation needed]

USB Descriptors


Bus 003 Device 025: ID 1292:3006 Innomedia 
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass            0 
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0         8
  idVendor           0x1292 Innomedia
  idProduct          0x3006 
  bcdDevice            1.50
  iManufacturer           0 
  iProduct                0 
  iSerial                 0 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           32
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          1 (error)
    bmAttributes         0x80
      (Bus Powered)
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass        88 Xbox
      bInterfaceSubClass     66 Controller
      bInterfaceProtocol      0 
      iInterface              2 (error)
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0020  1x 32 bytes
        bInterval               4
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x02  EP 2 OUT
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0020  1x 32 bytes
        bInterval               4

Bus 003 Device 024: ID 1292:3006 Innomedia 
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass            9 Hub
  bDeviceSubClass         0 
  bDeviceProtocol         0 Full speed (or root) hub
  bMaxPacketSize0         8
  idVendor           0x1292 Innomedia
  idProduct          0x3006 
  bcdDevice            1.50
  iManufacturer           1 (c) 2004 R0R3 Inc.
  iProduct                2 US Patent 6,287,198
  iSerial                 0 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           25
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
    bmAttributes         0xa0
      (Bus Powered)
      Remote Wakeup
    MaxPower               64mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         9 Hub
      bInterfaceSubClass      0 
      bInterfaceProtocol      0 Full speed (or root) hub
      iInterface              5 (error)
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0001  1x 1 bytes
        bInterval             255
Hub Descriptor:
  bLength               9
  bDescriptorType      41
  nNbrPorts             3
  wHubCharacteristic 0x000d
    Per-port power switching
    Compound device
    Per-port overcurrent protection
  bPwrOn2PwrGood       32 * 2 milli seconds
  bHubContrCurrent     64 milli Ampere
  DeviceRemovable    0x02
  PortPwrCtrlMask    0x0e
 Hub Port Status:
   Port 1: 0000.0103 power enable connect
   Port 2: 0000.0100 power
   Port 3: 0100.0100 power
Device Status:     0x0000
  (Bus Powered)

Microphones

Xbox Communicator

USB Descriptor

Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass            0 
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0         8
  idVendor           0x045e Microsoft Corp.
  idProduct          0x0283 Xbox Communicator
  bcdDevice            1.58
  iManufacturer           0 
  iProduct                0 
  iSerial                 0 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x002d
    bNumInterfaces          2
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0x80
      (Bus Powered)
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass       120 
      bInterfaceSubClass      0 
      bInterfaceProtocol      0 
      iInterface              0 
      Endpoint Descriptor:
        bLength                 9
        bDescriptorType         5
        bEndpointAddress     0x04  EP 4 OUT
        bmAttributes            5
          Transfer Type            Isochronous
          Synch Type               Asynchronous
          Usage Type               Data
        wMaxPacketSize     0x0030  1x 48 bytes
        bInterval               1
        bRefresh                0
        bSynchAddress           0
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass       120 
      bInterfaceSubClass      0 
      bInterfaceProtocol      0 
      iInterface              0 
      Endpoint Descriptor:
        bLength                 9
        bDescriptorType         5
        bEndpointAddress     0x85  EP 5 IN
        bmAttributes            5
          Transfer Type            Isochronous
          Synch Type               Asynchronous
          Usage Type               Data
        wMaxPacketSize     0x0030  1x 48 bytes
        bInterval               1
        bRefresh                0
        bSynchAddress           0

Xbox Karaoke

USB Descriptor

Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass            0 
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0         8
  idVendor           0x045e Microsoft Corp.
  idProduct          0x0501 
  bcdDevice            1.00
  iManufacturer           1 Licensed 3PP Vendor
  iProduct                2 Karaoke Microphone Module
  iSerial                 0 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x001b
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0x80
      (Bus Powered)
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass       121 
      bInterfaceSubClass      1 
      bInterfaceProtocol      0 
      iInterface              0 
      Endpoint Descriptor:
        bLength                 9
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            5
          Transfer Type            Isochronous
          Synch Type               Asynchronous
          Usage Type               Data
        wMaxPacketSize     0x0060  1x 96 bytes
        bInterval               1
        bRefresh                0
        bSynchAddress           0

Steel Battalion Controller

Steel Battalion Controller Layout

USB Descriptors

Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0
  bDeviceProtocol         0
  bMaxPacketSize0         8
  idVendor           0x0a7b
  idProduct          0xd000
  bcdDevice            1.00
  iManufacturer           0
  iProduct                0
  iSerial                 0
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           32
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0
    bmAttributes         0x80
      (Bus Powered)
    MaxPower              500mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass        88 Xbox
      bInterfaceSubClass     66 Controller
      bInterfaceProtocol      0
      iInterface              0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0020  1x 32 bytes
        bInterval               4
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x01  EP 1 OUT
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0020  1x 32 bytes
        bInterval               4

Controller to Xbox

From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs

26 bytes

Field Offset (Bytes) Mask Notes
RightJoyMainWeapon 2 0x01
RightJoyFire 2 0x02
RightJoyLockOn 2 0x04
Eject 2 0x08
CockpitHatch 2 0x10
Ignition 2 0x20
Start 2 0x40
MultiMonOpenClose 2 0x80
MultiMonMapZoomInOut 3 0x01
MultiMonModeSelect 3 0x02
MultiMonSubMonitor 3 0x04
MainMonZoomIn 3 0x08
MainMonZoomOut 3 0x10
FunctionFSS 3 0x20
FunctionManipulator 3 0x40
FunctionLineColorChange 3 0x80
Washing 4 0x01
Extinguisher 4 0x02
Chaff 4 0x04
FunctionTankDetach 4 0x08
FunctionOverride 4 0x10
FunctionNightScope 4 0x20
FunctionF1 4 0x40
FunctionF2 4 0x80
FunctionF3 5 0x01
WeaponConMain 5 0x02
WeaponConSub 5 0x04
WeaponConMagazine 5 0x08
Comm1 5 0x10
Comm2 5 0x20
Comm3 5 0x40
Comm4 5 0x80
Comm5 6 0x01
LeftJoySightChange 6 0x02
ToggleFilterControl 6 0x04
ToggleOxygenSupply 6 0x08
ToggleFuelFlowRate 6 0x10
ToggleBuffreMaterial 6 0x20
ToggleVTLocation 6 0x40
6 0x80
7 0xFF
8 0xFF
AimingX 9 0xFFFF "Aiming Lever" joystick on the right. Unsigned X Axis value: 0 (Left) to 0xFFFF (Right).
AimingY 11 0xFFFF "Aiming Lever" joystick on the right. Unsigned Y Axis value: 0 (Top) to 0xFFFF (Bottom).
RotationLever 13 0xFFFF "Rotation Lever" joystick on the left. Signed X Axis value: -0x7FFF (Left) to 0x7FFF (Right)
SightChangeX 15 0xFFFF "Sight Change" analog stick on the "Rotation Lever" joystick. Signed X Axis value: -0x7FFF (Left) to 0x7FFF (Right)
SightChangeY 17 0xFFFF "Sight Change" analog stick on the "Rotation Lever" joystick. Signed Y Axis value: -0x7FFF (Top) to 0x7FFF (Bottom)
LeftPedal 19 0xFFFF
MiddlePedal 21 0xFFFF
RightPedal 23 0xFFFF
TunerDial 24 0x0F The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
24 0xF0
GearLever 25 0xFF The gear lever on the left block. R = -2, N = -1, 1st = 1, 2nd = 2, 3rd = 3, 4th = 4, 5th = 5. If the shifter is between two gears this value will be 0.

Xbox to Controller

From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs

22 bytes

Field Offset (Bytes) Mask Notes
Start 0 0x00 This will always be 0x00
bLen 1 0x16 This will always be 0x16 (22 bytes)
EmergencyEject 2 0x0F
CockpitHatch 2 0xF0
Ignition 3 0x0F
Start 3 0xF0
OpenClose 4 0x0F
MapZoomInOut 4 0xF0
ModeSelect 5 0x0F
SubMonitorModeSelect 5 0xF0
MainMonitorZoomIn 6 0x0F
MainMonitorZoomOut 6 0xF0
ForecastShootingSystem 7 0x0F
Manipulator 7 0xF0
LineColorChange 8 0x0F
Washing 8 0xF0
Extinguisher 9 0x0F
Chaff 9 0xF0
TankDetach 10 0x0F
Override 10 0xF0
NightScope 11 0x0F
F1 11 0xF0
F2 12 0x0F
F3 12 0xF0
MainWeaponControl 13 0x0F
SubWeaponControl 13 0xF0
MagazineChange 14 0x0F
Comm1 14 0xF0
Comm2 15 0x0F
Comm3 15 0xF0
Comm4 16 0x0F
Comm5 16 0xF0
17 0x0F
GearR 17 0xF0
GearN 18 0x0F
Gear1 18 0xF0
Gear2 19 0x0F
Gear3 19 0xF0
Gear4 20 0x0F
Gear5 20 0xF0
Unused? 21

SEGA Chihiro Baseboard

Contains 2 USB devices which directly attach to USB ports 3 & 4 (player 0, 1)

USB Descriptors

[Device Descriptor]
----------------------------------------------
  Length              = 18
  DescriptorType      = 0x01
  USB version         = 1.00
  Vendor:Product      = 0ca3:0003
  MaxPacketSize0      = 64
  NumConfigurations   = 1
  Device version      = 1.03
  Device Class:SubClass:Protocol = 60:01:00

[Configuration Descriptor]
----------------------------------------------
  Length              =  9
  DescriptorType      = 02
  wTotalLength        = 60
  bNumInterfaces      = 1
  bConfigurationValue = 1
  iConfiguration      = 0
  bmAttributes        = 0x80
  MaxPower            = 150

    [Interface Descriptor]
    ----------------------------------------------
      Length              =  9
      DescriptorType      = 04
      bInterfaceNumber    = 0
      bAlternateSetting   = 0
      bNumEndpoints       = 6
      bInterfaceClass     = 0xff
      bInterfaceSubClass  = 0x00
      bInterfaceProtocol  = 0x00
      iInterface          = 0

        [Endpoint Descriptor]
        ----------------------------------------------
          Length              =  7
          DescriptorType      = 05
          bEndpointAddress    = 0x01
          bmAttributes        = 0x02
          wMaxPacketSize      = 64
          bInterval           = 0
          bRefresh            = 7
          bSynchAddress       = 5

        [Endpoint Descriptor]
        ----------------------------------------------
          Length              =  7
          DescriptorType      = 05
          bEndpointAddress    = 0x02
          bmAttributes        = 0x02
          wMaxPacketSize      = 64
          bInterval           = 0
          bRefresh            = 7
          bSynchAddress       = 5

        [Endpoint Descriptor]
        ----------------------------------------------
          Length              =  7
          DescriptorType      = 05
          bEndpointAddress    = 0x03
          bmAttributes        = 0x02
          wMaxPacketSize      = 64
          bInterval           = 0
          bRefresh            = 7
          bSynchAddress       = 5

        [Endpoint Descriptor]
        ----------------------------------------------
          Length              =  7
          DescriptorType      = 05
          bEndpointAddress    = 0x81
          bmAttributes        = 0x02
          wMaxPacketSize      = 64
          bInterval           = 0
          bRefresh            = 7
          bSynchAddress       = 5

        [Endpoint Descriptor]
        ----------------------------------------------
          Length              =  7
          DescriptorType      = 05
          bEndpointAddress    = 0x82
          bmAttributes        = 0x02
          wMaxPacketSize      = 64
          bInterval           = 0
          bRefresh            = 7
          bSynchAddress       = 5

        [Endpoint Descriptor]
        ----------------------------------------------
          Length              =  7
          DescriptorType      = 05
          bEndpointAddress    = 0x83
          bmAttributes        = 0x02
          wMaxPacketSize      = 64
          bInterval           = 0
          bRefresh            = 0
          bSynchAddress       = 0
[Device Descriptor]
----------------------------------------------
  Length              = 18
  DescriptorType      = 0x01
  USB version         = 1.00
  Vendor:Product      = 0ca3:0002
  MaxPacketSize0      = 64
  NumConfigurations   = 1
  Device version      = 1.03
  Device Class:SubClass:Protocol = 60:00:00

[Configuration Descriptor]
----------------------------------------------
  Length              =  9
  DescriptorType      = 02
  wTotalLength        = 88
  bNumInterfaces      = 1
  bConfigurationValue = 1
  iConfiguration      = 0
  bmAttributes        = 0x80
  MaxPower            = 150

    [Interface Descriptor]
    ----------------------------------------------
      Length              =  9
      DescriptorType      = 04
      bInterfaceNumber    = 0
      bAlternateSetting   = 0
      bNumEndpoints       = 10
      bInterfaceClass     = 0xff
      bInterfaceSubClass  = 0x00
      bInterfaceProtocol  = 0x00
      iInterface          = 0

        [Endpoint Descriptor]
        ----------------------------------------------
          Length              =  7
          DescriptorType      = 05
          bEndpointAddress    = 0x01
          bmAttributes        = 0x02
          wMaxPacketSize      = 64
          bInterval           = 0
          bRefresh            = 7
          bSynchAddress       = 5

        [Endpoint Descriptor]
        ----------------------------------------------
          Length              =  7
          DescriptorType      = 05
          bEndpointAddress    = 0x02
          bmAttributes        = 0x02
          wMaxPacketSize      = 64
          bInterval           = 0
          bRefresh            = 7
          bSynchAddress       = 5

        [Endpoint Descriptor]
        ----------------------------------------------
          Length              =  7
          DescriptorType      = 05
          bEndpointAddress    = 0x03
          bmAttributes        = 0x02
          wMaxPacketSize      = 64
          bInterval           = 0
          bRefresh            = 7
          bSynchAddress       = 5

        [Endpoint Descriptor]
        ----------------------------------------------
          Length              =  7
          DescriptorType      = 05
          bEndpointAddress    = 0x04
          bmAttributes        = 0x02
          wMaxPacketSize      = 64
          bInterval           = 0
          bRefresh            = 7
          bSynchAddress       = 5

        [Endpoint Descriptor]
        ----------------------------------------------
          Length              =  7
          DescriptorType      = 05
          bEndpointAddress    = 0x05
          bmAttributes        = 0x02
          wMaxPacketSize      = 64
          bInterval           = 0
          bRefresh            = 7
          bSynchAddress       = 5

        [Endpoint Descriptor]
        ----------------------------------------------
          Length              =  7
          DescriptorType      = 05
          bEndpointAddress    = 0x81
          bmAttributes        = 0x02
          wMaxPacketSize      = 64
          bInterval           = 0
          bRefresh            = 7
          bSynchAddress       = 5

        [Endpoint Descriptor]
        ----------------------------------------------
          Length              =  7
          DescriptorType      = 05
          bEndpointAddress    = 0x82
          bmAttributes        = 0x02
          wMaxPacketSize      = 64
          bInterval           = 0
          bRefresh            = 7
          bSynchAddress       = 5

        [Endpoint Descriptor]
        ----------------------------------------------
          Length              =  7
          DescriptorType      = 05
          bEndpointAddress    = 0x83
          bmAttributes        = 0x02
          wMaxPacketSize      = 64
          bInterval           = 0
          bRefresh            = 7
          bSynchAddress       = 5

        [Endpoint Descriptor]
        ----------------------------------------------
          Length              =  7
          DescriptorType      = 05
          bEndpointAddress    = 0x84
          bmAttributes        = 0x02
          wMaxPacketSize      = 64
          bInterval           = 0
          bRefresh            = 7
          bSynchAddress       = 5

        [Endpoint Descriptor]
        ----------------------------------------------
          Length              =  7
          DescriptorType      = 05
          bEndpointAddress    = 0x85
          bmAttributes        = 0x02
          wMaxPacketSize      = 64
          bInterval           = 0
          bRefresh            = 0
          bSynchAddress       = 0

Related links

XID emulation in XQEMU

Compilation of Xbox Controller Hardware Research