<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://xboxdevwiki.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=JohnVeness</id>
		<title>xboxdevwiki - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://xboxdevwiki.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=JohnVeness"/>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/Special:Contributions/JohnVeness"/>
		<updated>2026-05-21T10:52:24Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.28.0</generator>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=Xbox_Input_Devices&amp;diff=7426</id>
		<title>Xbox Input Devices</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=Xbox_Input_Devices&amp;diff=7426"/>
				<updated>2026-02-25T22:12:35Z</updated>
		
		<summary type="html">&lt;p&gt;JohnVeness: /* XID Overview */ Typos&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== XID Overview ==&lt;br /&gt;
&lt;br /&gt;
XIDs are USB devices.&lt;br /&gt;
&lt;br /&gt;
The hardware side is USB with a different plug while the software side is USB without HID descriptors.&lt;br /&gt;
Technically a XID is a USB hub for the Memory Units and the Xbox Live Communicator.&lt;br /&gt;
The logical XID gamepad USB device is internally connected to that hub.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== USB Adapters ===&lt;br /&gt;
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).                              &lt;br /&gt;
&lt;br /&gt;
[[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.]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;                                                          &lt;br /&gt;
|- &lt;br /&gt;
! Port (From)&lt;br /&gt;
! Plug (To)&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| Xbox&lt;br /&gt;
| USB-A &lt;br /&gt;
| [https://www.amazon.com/gp/product/B000RT2868 Amazon] [https://www.aliexpress.com/item/32948906701.html Aliexpress]&lt;br /&gt;
|-&lt;br /&gt;
| USB-A&lt;br /&gt;
| Xbox&lt;br /&gt;
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon] [https://www.aliexpress.com/item/4000452932782.html Aliexpress]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Wiring ===&lt;br /&gt;
&lt;br /&gt;
Untested / unverified! Take this with a grain of salt.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pin&lt;br /&gt;
!Typical cable color&lt;br /&gt;
!Description&lt;br /&gt;
|-                                                            &lt;br /&gt;
|1&lt;br /&gt;
|Red&lt;br /&gt;
|VCC&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|White&lt;br /&gt;
|USB D+&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Green&lt;br /&gt;
|USB D-&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|Yellow&lt;br /&gt;
|VBlank signal from video output (for light guns)&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|Black&lt;br /&gt;
|GND&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Protocol ===&lt;br /&gt;
&lt;br /&gt;
XID are similar to HID but have custom Vendor requests.&lt;br /&gt;
&lt;br /&gt;
==== Control Transfers ====&lt;br /&gt;
&lt;br /&gt;
===== GET_DESCRIPTOR =====&lt;br /&gt;
&lt;br /&gt;
* bmRequestType: 0xC1&lt;br /&gt;
* bRequest: 6&lt;br /&gt;
* wValue: 0x4200&lt;br /&gt;
* wIndex: Interface number&lt;br /&gt;
* wLength: &amp;lt;length of respective report; typically 16&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Actual length is truncated to size of descriptor or wLength. Whichever is smaller. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct XIDDescriptor {&lt;br /&gt;
    uint8_t bLength;&lt;br /&gt;
    uint8_t bDescriptorType;&lt;br /&gt;
    uint16_t bcdXid;&lt;br /&gt;
    uint8_t bType;&lt;br /&gt;
    uint8_t bSubType;&lt;br /&gt;
    uint8_t bMaxInputReportSize;&lt;br /&gt;
    uint8_t bMaxOutputReportSize;&lt;br /&gt;
    uint16_t wAlternateProductIds[4];&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bDescriptorType is probably always 0x42.&lt;br /&gt;
&lt;br /&gt;
====== bType = 1: Xbox game controller ======&lt;br /&gt;
&lt;br /&gt;
* bSubType:&lt;br /&gt;
** 0x01 = Gamepad (Duke)&lt;br /&gt;
** 0x02 = Gamepad (Controller-S)&lt;br /&gt;
** 0x10 = Steering wheel&lt;br /&gt;
** 0x20 = Arcade Stick&lt;br /&gt;
** 0x50 = Light gun&lt;br /&gt;
&lt;br /&gt;
====== bType = 3: Xbox DVD Movie Playback IR Dongle======&lt;br /&gt;
&lt;br /&gt;
* bSubType:&lt;br /&gt;
** 0x00&lt;br /&gt;
&lt;br /&gt;
====== bType = 128: Steel Battalion ======&lt;br /&gt;
&lt;br /&gt;
* bSubType:&lt;br /&gt;
** 0x01&lt;br /&gt;
&lt;br /&gt;
====== Example XID reports ======&lt;br /&gt;
&lt;br /&gt;
This is an example XID descriptor taken from a Controller-S (VID 0x045E / PID 0x0289).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bLength              0x10 (16 bytes)&lt;br /&gt;
bDescriptorType      0x42&lt;br /&gt;
bcdXid               0x0100 (USB 1.0)&lt;br /&gt;
bType                0x01&lt;br /&gt;
bSubType             0x02&lt;br /&gt;
bMaxInputReportSize  0x14 (20 bytes)&lt;br /&gt;
bMaxOutputReportSize 0x06 (6 bytes)&lt;br /&gt;
wAlternateProductIds 4 x 0xFFFF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is an example XID descriptor taken from a Steel Battalion controller.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bLength              0x10 (16 bytes)&lt;br /&gt;
bDescriptorType      0x42&lt;br /&gt;
bcdXid               0x0100 (USB 1.0)&lt;br /&gt;
bType                0x80&lt;br /&gt;
bSubType             0x01&lt;br /&gt;
bMaxInputReportSize  0x1A (26 bytes)&lt;br /&gt;
bMaxOutputReportSize 0x16 (22 bytes)&lt;br /&gt;
wAlternateProductIds 4 x 0xFFFF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is an example XID descriptor taken from an official Microsoft DVD Movie Playback IR dongle.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bLength              0x08 (8 bytes)&lt;br /&gt;
bDescriptorType      0x42&lt;br /&gt;
bcdXid               0x0100 (USB 1.0)&lt;br /&gt;
bType                0x03&lt;br /&gt;
bSubType             0x00&lt;br /&gt;
bMaxInputReportSize  0x06 (6 bytes)&lt;br /&gt;
bMaxOutputReportSize 0x00 (0 bytes)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== GET_CAPABILITIES =====&lt;br /&gt;
&lt;br /&gt;
* bmRequestType: 0xC1&lt;br /&gt;
* bRequest: 1&lt;br /&gt;
* wValue:&lt;br /&gt;
** 0x0100 for input&lt;br /&gt;
** 0x0200 for output&lt;br /&gt;
* wIndex: Interface number&lt;br /&gt;
* wLength: &amp;lt;length of respective report&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* STALL if wValue not supported.&lt;br /&gt;
&lt;br /&gt;
Actual length is truncated to size of report or wLength. Whichever is smaller.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct XIDGamepadCapabilities {&lt;br /&gt;
    uint8_t bReportId;&lt;br /&gt;
    uint8_t bLength;&lt;br /&gt;
    &amp;lt;Data&amp;gt;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
If the bit is auto-generated, it will be cleared (0).&lt;br /&gt;
&lt;br /&gt;
===== SET_REPORT =====&lt;br /&gt;
&lt;br /&gt;
* bmRequestType: 0x21&lt;br /&gt;
* bRequest: 9&lt;br /&gt;
* wValue: 0x0200&lt;br /&gt;
* wIndex: Interface number&lt;br /&gt;
* wLength: &amp;lt;length of report; typically 6&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* STALL if wValue not supported.&lt;br /&gt;
&lt;br /&gt;
====== Typical report ======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct XIDGamepadReport {&lt;br /&gt;
    uint8_t bReportId;&lt;br /&gt;
    uint8_t bLength;&lt;br /&gt;
    &amp;lt;Data&amp;gt;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== GET_REPORT =====&lt;br /&gt;
&lt;br /&gt;
* bmRequestType: 0xA1&lt;br /&gt;
* bRequest: 1&lt;br /&gt;
* wValue: 0x0100&lt;br /&gt;
* wIndex: Interface number&lt;br /&gt;
* wLength: &amp;lt;length of report; typically 20&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* STALL if wValue not supported or if wLength is greater than report size.&lt;br /&gt;
* ACK if supported.&lt;br /&gt;
&lt;br /&gt;
====== Typical report ======&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct XIDGamepadOutputReport {&lt;br /&gt;
    uint8_t report_id; //FIXME: is this correct?&lt;br /&gt;
    uint8_t length;&lt;br /&gt;
    &amp;lt;Data&amp;gt;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Interrupt transfers ====&lt;br /&gt;
&lt;br /&gt;
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.&lt;br /&gt;
&lt;br /&gt;
In case of the interrupt-in, there is another status which can occur now:&lt;br /&gt;
&lt;br /&gt;
* NAK if supported but no changes since last ACK.&lt;br /&gt;
&lt;br /&gt;
== Standard Gamepads ==&lt;br /&gt;
&lt;br /&gt;
=== Microsoft Hardware Variants ===&lt;br /&gt;
&lt;br /&gt;
There are a few hardware re-designs of the Microsoft Gamepad.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Controller Name&lt;br /&gt;
!Part Number&lt;br /&gt;
!Board Model&lt;br /&gt;
!Notes&lt;br /&gt;
!Datasheets&lt;br /&gt;
|-&lt;br /&gt;
|Xbox Game Controller (AKA &amp;quot;Duke&amp;quot;)&lt;br /&gt;
|X08-17160&lt;br /&gt;
|23-0819B&lt;br /&gt;
|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.&lt;br /&gt;
|[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]&lt;br /&gt;
|-&lt;br /&gt;
|Xbox Game Controller (AKA &amp;quot;Duke&amp;quot;)&lt;br /&gt;
|X08-17160&lt;br /&gt;
|K023B121&lt;br /&gt;
|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 &amp;quot;KD&amp;quot;.&lt;br /&gt;
|[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]&lt;br /&gt;
|-&lt;br /&gt;
|Xbox Game Controller (AKA &amp;quot;Duke&amp;quot;)&lt;br /&gt;
|X08-17160&lt;br /&gt;
|23-0819C&lt;br /&gt;
|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.&lt;br /&gt;
|[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]&lt;br /&gt;
|-&lt;br /&gt;
|Xbox Game Controller (Looks like an S, with green Xbox jewel)&lt;br /&gt;
|X08-19383&lt;br /&gt;
|23-0923A&lt;br /&gt;
|Japan and Australia exclusive model{{FIXME|Reason=Speculation, no hard source for this}}.Minification of &amp;quot;Duke&amp;quot; PCB Design. Has exact same IC's as the Duke, only in an S controller design.&lt;br /&gt;
|[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]&lt;br /&gt;
|-&lt;br /&gt;
|Xbox Controller S&lt;br /&gt;
|X08-69873&lt;br /&gt;
|23-0923B&lt;br /&gt;
|Minification of &amp;quot;Duke&amp;quot; PCB Design. Has exact same IC's as the Duke, only in an S controller design&lt;br /&gt;
|[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]&lt;br /&gt;
|-&lt;br /&gt;
|Xbox Controller S&lt;br /&gt;
|X08-69873&lt;br /&gt;
|23-0923H&lt;br /&gt;
|Entirely new PCB design. Single IC on the board, AT43USB355M-AC&lt;br /&gt;
|[https://archive.org/details/AT43USB355 AT43USB355M-AC]&lt;br /&gt;
|-&lt;br /&gt;
|Xbox Controller S&lt;br /&gt;
|X08-69873&lt;br /&gt;
|23-0923I&lt;br /&gt;
|PCB Design almost exactly the same as H revision. Only difference is the IC is smaller: AT43USB353M-AC &lt;br /&gt;
|[https://archive.org/details/AT43USB353M-AC AT43USB353M-AC]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
There are also dedicated Part Numbers for color variants:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Controller Part Number&lt;br /&gt;
!Controller Description&lt;br /&gt;
!Board Model&lt;br /&gt;
|-&lt;br /&gt;
|X02332-001&lt;br /&gt;
|Crystal S Controller&lt;br /&gt;
|23-0923I&lt;br /&gt;
|-&lt;br /&gt;
|X09-64240-01&lt;br /&gt;
|Transparent Green Controller&lt;br /&gt;
|23-0923I&lt;br /&gt;
|-&lt;br /&gt;
|X800679-100&lt;br /&gt;
|Black S With Halo Jewel&lt;br /&gt;
|23-0923I&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== USB Descriptors ===&lt;br /&gt;
&lt;br /&gt;
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.&lt;br /&gt;
&lt;br /&gt;
==== 23-0819B ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Device Descriptor:&lt;br /&gt;
  bLength                18&lt;br /&gt;
  bDescriptorType         1&lt;br /&gt;
  bcdUSB               1.10&lt;br /&gt;
  bDeviceClass            0 &lt;br /&gt;
  bDeviceSubClass         0 &lt;br /&gt;
  bDeviceProtocol         0 &lt;br /&gt;
  bMaxPacketSize0        64&lt;br /&gt;
  idVendor           0x045e Microsoft Corp.&lt;br /&gt;
  idProduct          0x0202 Xbox Controller&lt;br /&gt;
  bcdDevice            1.00&lt;br /&gt;
  iManufacturer           0 &lt;br /&gt;
  iProduct                0 &lt;br /&gt;
  iSerial                 0 &lt;br /&gt;
  bNumConfigurations      1&lt;br /&gt;
  Configuration Descriptor:&lt;br /&gt;
    bLength                 9&lt;br /&gt;
    bDescriptorType         2&lt;br /&gt;
    wTotalLength           32&lt;br /&gt;
    bNumInterfaces          1&lt;br /&gt;
    bConfigurationValue     1&lt;br /&gt;
    iConfiguration          0 &lt;br /&gt;
    bmAttributes         0x80&lt;br /&gt;
      (Bus Powered)&lt;br /&gt;
    MaxPower              100mA&lt;br /&gt;
    Interface Descriptor:&lt;br /&gt;
      bLength                 9&lt;br /&gt;
      bDescriptorType         4&lt;br /&gt;
      bInterfaceNumber        0&lt;br /&gt;
      bAlternateSetting       0&lt;br /&gt;
      bNumEndpoints           2&lt;br /&gt;
      bInterfaceClass        88 Xbox&lt;br /&gt;
      bInterfaceSubClass     66 Controller&lt;br /&gt;
      bInterfaceProtocol      0 &lt;br /&gt;
      iInterface              0 &lt;br /&gt;
      Endpoint Descriptor:&lt;br /&gt;
        bLength                 7&lt;br /&gt;
        bDescriptorType         5&lt;br /&gt;
        bEndpointAddress     0x82  EP 2 IN&lt;br /&gt;
        bmAttributes            3&lt;br /&gt;
          Transfer Type            Interrupt&lt;br /&gt;
          Synch Type               None&lt;br /&gt;
          Usage Type               Data&lt;br /&gt;
        wMaxPacketSize     0x0020  1x 32 bytes&lt;br /&gt;
        bInterval               4&lt;br /&gt;
      Endpoint Descriptor:&lt;br /&gt;
        bLength                 7&lt;br /&gt;
        bDescriptorType         5&lt;br /&gt;
        bEndpointAddress     0x02  EP 2 OUT&lt;br /&gt;
        bmAttributes            3&lt;br /&gt;
          Transfer Type            Interrupt&lt;br /&gt;
          Synch Type               None&lt;br /&gt;
          Usage Type               Data&lt;br /&gt;
        wMaxPacketSize     0x0020  1x 32 bytes&lt;br /&gt;
        bInterval               4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== K023B121 ====&lt;br /&gt;
&lt;br /&gt;
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}&lt;br /&gt;
&lt;br /&gt;
==== 23-0819C ====&lt;br /&gt;
&lt;br /&gt;
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}&lt;br /&gt;
&lt;br /&gt;
==== 23-0923A ====&lt;br /&gt;
&lt;br /&gt;
Changes from 23-0819B&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Device Descriptor:&lt;br /&gt;
  idProduct: 0x0285&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 23-0923B ====&lt;br /&gt;
&lt;br /&gt;
{{FIXME|Reason=No Descriptor Dump}}&lt;br /&gt;
&lt;br /&gt;
==== 23-0923H ====&lt;br /&gt;
&lt;br /&gt;
Changes from 23-0819B&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Device Descriptor&lt;br /&gt;
  bMaxPacketSize0: 8&lt;br /&gt;
  idProduct: 0x0289&lt;br /&gt;
  bcdDevice: 1.20&lt;br /&gt;
  Configuration Descriptor&lt;br /&gt;
    Interface Descriptor&lt;br /&gt;
      Endpoint Descriptor&lt;br /&gt;
        bEndpointAddress: 0x81&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 23-0923I ====&lt;br /&gt;
&lt;br /&gt;
Changes from 23-0923H&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Device Descriptor&lt;br /&gt;
  bcdDevice: 1.21&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Controller to Xbox ===&lt;br /&gt;
&lt;br /&gt;
20 bytes&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Field&lt;br /&gt;
!Offset (Bytes)&lt;br /&gt;
!Mask&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
|{{input-dy+}}&lt;br /&gt;
|2&lt;br /&gt;
|0x01&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|{{input-dy-}}&lt;br /&gt;
|2&lt;br /&gt;
|0x02&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|{{input-dx-}}&lt;br /&gt;
|2&lt;br /&gt;
|0x04&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|{{input-dx+}}&lt;br /&gt;
|2&lt;br /&gt;
|0x08&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|{{input-start}}&lt;br /&gt;
|2&lt;br /&gt;
|0x10&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|{{input-back}}&lt;br /&gt;
|2&lt;br /&gt;
|0x20&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|{{input-ls}}&lt;br /&gt;
|2&lt;br /&gt;
|0x40&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|{{input-rs}}&lt;br /&gt;
|2&lt;br /&gt;
|0x80&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|{{input-a}}&lt;br /&gt;
|4&lt;br /&gt;
|0xFF&lt;br /&gt;
|Button is analog&lt;br /&gt;
|-&lt;br /&gt;
|{{input-b}}&lt;br /&gt;
|5&lt;br /&gt;
|0xFF&lt;br /&gt;
|Button is analog&lt;br /&gt;
|-&lt;br /&gt;
|{{input-x}}&lt;br /&gt;
|6&lt;br /&gt;
|0xFF&lt;br /&gt;
|Button is analog&lt;br /&gt;
|-&lt;br /&gt;
|{{input-y}}&lt;br /&gt;
|7&lt;br /&gt;
|0xFF&lt;br /&gt;
|Button is analog&lt;br /&gt;
|-&lt;br /&gt;
|{{input-black}}&lt;br /&gt;
|8&lt;br /&gt;
|0xFF&lt;br /&gt;
|Button is analog&lt;br /&gt;
|-&lt;br /&gt;
|{{input-white}}&lt;br /&gt;
|9&lt;br /&gt;
|0xFF&lt;br /&gt;
|Button is analog&lt;br /&gt;
|-&lt;br /&gt;
|{{input-lt}}&lt;br /&gt;
|10&lt;br /&gt;
|0xFF&lt;br /&gt;
|Trigger is analog&lt;br /&gt;
|-&lt;br /&gt;
|{{input-rt}}&lt;br /&gt;
|11&lt;br /&gt;
|0xFF&lt;br /&gt;
|Trigger is analog&lt;br /&gt;
|-&lt;br /&gt;
|{{input-lx}}&lt;br /&gt;
|12&lt;br /&gt;
|0xFFFF&lt;br /&gt;
|Negative = Left; Positive = Right&lt;br /&gt;
|-&lt;br /&gt;
|{{input-ly}}&lt;br /&gt;
|14&lt;br /&gt;
|0xFFFF&lt;br /&gt;
|Negative = Down; Positive = Up&lt;br /&gt;
|-&lt;br /&gt;
|{{input-rx}}&lt;br /&gt;
|16&lt;br /&gt;
|0xFFFF&lt;br /&gt;
|Negative = Left; Positive = Right&lt;br /&gt;
|-&lt;br /&gt;
|{{input-ry}}&lt;br /&gt;
|18&lt;br /&gt;
|0xFFFF&lt;br /&gt;
|Negative = Down; Positive = Up&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Xbox to Controller ===&lt;br /&gt;
&lt;br /&gt;
6 bytes&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Field&lt;br /&gt;
!Offset (Bytes)&lt;br /&gt;
!Mask&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
|Left actuator strength&lt;br /&gt;
|2&lt;br /&gt;
|0xFFFF&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Right actuator strength&lt;br /&gt;
|4&lt;br /&gt;
|0xFFFF&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Microsoft Controller S will not react to packets which don't have a value of 6 in the &amp;lt;code&amp;gt;length&amp;lt;/code&amp;gt; field of the header.&lt;br /&gt;
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.&lt;br /&gt;
&lt;br /&gt;
== Steering wheels ==&lt;br /&gt;
&lt;br /&gt;
=== MadCatz Wheel ===&lt;br /&gt;
&lt;br /&gt;
{{FIXME}}&lt;br /&gt;
&lt;br /&gt;
=== Fanatec Speedster 3 ForceShock ===&lt;br /&gt;
&lt;br /&gt;
==== Pedals ====&lt;br /&gt;
&lt;br /&gt;
The Pedals are ''not'' a USB device.&lt;br /&gt;
&lt;br /&gt;
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.&lt;br /&gt;
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
new full-speed USB device number 14 using xhci_hcd&lt;br /&gt;
device descriptor read/64, error -71&lt;br /&gt;
device descriptor read/64, error -71&lt;br /&gt;
new full-speed USB device number 15 using xhci_hcd&lt;br /&gt;
device descriptor read/64, error -71&lt;br /&gt;
device descriptor read/64, error -71&lt;br /&gt;
new full-speed USB device number 16 using xhci_hcd&lt;br /&gt;
Device not responding to setup address.&lt;br /&gt;
Device not responding to setup address.&lt;br /&gt;
device not accepting address 16, error -71&lt;br /&gt;
new full-speed USB device number 17 using xhci_hcd&lt;br /&gt;
Device not responding to setup address.&lt;br /&gt;
Device not responding to setup address.&lt;br /&gt;
device not accepting address 17, error -71&lt;br /&gt;
unable to enumerate USB device&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Internal HUB ====&lt;br /&gt;
&lt;br /&gt;
===== USB Descriptors =====&lt;br /&gt;
&lt;br /&gt;
Power not connected, pedals not connected, not in Tuning mode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Device Descriptor:&lt;br /&gt;
  bLength                18&lt;br /&gt;
  bDescriptorType         1&lt;br /&gt;
  bcdUSB               1.10&lt;br /&gt;
  bDeviceClass            9 Hub&lt;br /&gt;
  bDeviceSubClass         0 &lt;br /&gt;
  bDeviceProtocol         0 Full speed (or root) hub&lt;br /&gt;
  bMaxPacketSize0         8&lt;br /&gt;
  idVendor           0x3767 &lt;br /&gt;
  idProduct          0x0102 &lt;br /&gt;
  bcdDevice            0.01&lt;br /&gt;
  iManufacturer           0 &lt;br /&gt;
  iProduct                1 End&lt;br /&gt;
  iSerial                 0 &lt;br /&gt;
  bNumConfigurations      1&lt;br /&gt;
  Configuration Descriptor:&lt;br /&gt;
    bLength                 9&lt;br /&gt;
    bDescriptorType         2&lt;br /&gt;
    wTotalLength           25&lt;br /&gt;
    bNumInterfaces          1&lt;br /&gt;
    bConfigurationValue     1&lt;br /&gt;
    iConfiguration          0 &lt;br /&gt;
    bmAttributes         0xa0&lt;br /&gt;
      (Bus Powered)&lt;br /&gt;
      Remote Wakeup&lt;br /&gt;
    MaxPower               64mA&lt;br /&gt;
    Interface Descriptor:&lt;br /&gt;
      bLength                 9&lt;br /&gt;
      bDescriptorType         4&lt;br /&gt;
      bInterfaceNumber        0&lt;br /&gt;
      bAlternateSetting       0&lt;br /&gt;
      bNumEndpoints           1&lt;br /&gt;
      bInterfaceClass         9 Hub&lt;br /&gt;
      bInterfaceSubClass      0 &lt;br /&gt;
      bInterfaceProtocol      0 Full speed (or root) hub&lt;br /&gt;
      iInterface              0 &lt;br /&gt;
      Endpoint Descriptor:&lt;br /&gt;
        bLength                 7&lt;br /&gt;
        bDescriptorType         5&lt;br /&gt;
        bEndpointAddress     0x81  EP 1 IN&lt;br /&gt;
        bmAttributes            3&lt;br /&gt;
          Transfer Type            Interrupt&lt;br /&gt;
          Synch Type               None&lt;br /&gt;
          Usage Type               Data&lt;br /&gt;
        wMaxPacketSize     0x0001  1x 1 bytes&lt;br /&gt;
        bInterval             255&lt;br /&gt;
Hub Descriptor:&lt;br /&gt;
  bLength               9&lt;br /&gt;
  bDescriptorType      41&lt;br /&gt;
  nNbrPorts             3&lt;br /&gt;
  wHubCharacteristic 0x000d&lt;br /&gt;
    Per-port power switching&lt;br /&gt;
    Compound device&lt;br /&gt;
    Per-port overcurrent protection&lt;br /&gt;
  bPwrOn2PwrGood       50 * 2 milli seconds&lt;br /&gt;
  bHubContrCurrent     64 milli Ampere&lt;br /&gt;
  DeviceRemovable    0x02&lt;br /&gt;
  PortPwrCtrlMask    0xff&lt;br /&gt;
 Hub Port Status:&lt;br /&gt;
   Port 1: 0000.0103 power enable connect&lt;br /&gt;
   Port 2: 0000.0100 power&lt;br /&gt;
   Port 3: 0000.0100 power&lt;br /&gt;
can't get debug descriptor: Resource temporarily unavailable&lt;br /&gt;
Device Status:     0x0003&lt;br /&gt;
  Self Powered&lt;br /&gt;
  Remote Wakeup Enabled&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Steering wheel (and Pedals) ====&lt;br /&gt;
&lt;br /&gt;
Always connected to port 1 of the internal HUB&lt;br /&gt;
&lt;br /&gt;
===== USB Descriptors =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Device Descriptor:&lt;br /&gt;
  bLength                18&lt;br /&gt;
  bDescriptorType         1&lt;br /&gt;
  bcdUSB               1.10&lt;br /&gt;
  bDeviceClass            0 &lt;br /&gt;
  bDeviceSubClass         0 &lt;br /&gt;
  bDeviceProtocol         0 &lt;br /&gt;
  bMaxPacketSize0         8&lt;br /&gt;
  idVendor           0x3767 &lt;br /&gt;
  idProduct          0x0101 &lt;br /&gt;
  bcdDevice            2.80&lt;br /&gt;
  iManufacturer           0 &lt;br /&gt;
  iProduct                0 &lt;br /&gt;
  iSerial                 0 &lt;br /&gt;
  bNumConfigurations      1&lt;br /&gt;
  Configuration Descriptor:&lt;br /&gt;
    bLength                 9&lt;br /&gt;
    bDescriptorType         2&lt;br /&gt;
    wTotalLength           32&lt;br /&gt;
    bNumInterfaces          1&lt;br /&gt;
    bConfigurationValue     1&lt;br /&gt;
    iConfiguration          0 &lt;br /&gt;
    bmAttributes         0x80&lt;br /&gt;
      (Bus Powered)&lt;br /&gt;
    MaxPower              100mA&lt;br /&gt;
    Interface Descriptor:&lt;br /&gt;
      bLength                 9&lt;br /&gt;
      bDescriptorType         4&lt;br /&gt;
      bInterfaceNumber        0&lt;br /&gt;
      bAlternateSetting       0&lt;br /&gt;
      bNumEndpoints           2&lt;br /&gt;
      bInterfaceClass        88 Xbox&lt;br /&gt;
      bInterfaceSubClass     66 Controller&lt;br /&gt;
      bInterfaceProtocol      0 &lt;br /&gt;
      iInterface              0 &lt;br /&gt;
      Endpoint Descriptor:&lt;br /&gt;
        bLength                 7&lt;br /&gt;
        bDescriptorType         5&lt;br /&gt;
        bEndpointAddress     0x82  EP 2 IN&lt;br /&gt;
        bmAttributes            3&lt;br /&gt;
          Transfer Type            Interrupt&lt;br /&gt;
          Synch Type               None&lt;br /&gt;
          Usage Type               Data&lt;br /&gt;
        wMaxPacketSize     0x0020  1x 32 bytes&lt;br /&gt;
        bInterval               4&lt;br /&gt;
      Endpoint Descriptor:&lt;br /&gt;
        bLength                 7&lt;br /&gt;
        bDescriptorType         5&lt;br /&gt;
        bEndpointAddress     0x02  EP 2 OUT&lt;br /&gt;
        bmAttributes            3&lt;br /&gt;
          Transfer Type            Interrupt&lt;br /&gt;
          Synch Type               None&lt;br /&gt;
          Usage Type               Data&lt;br /&gt;
        wMaxPacketSize     0x0020  1x 32 bytes&lt;br /&gt;
        bInterval               4&lt;br /&gt;
can't get debug descriptor: Resource temporarily unavailable&lt;br /&gt;
Device Status:     0x0000&lt;br /&gt;
  (Bus Powered)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Arcade Sticks ==&lt;br /&gt;
&lt;br /&gt;
=== Xbox TECMO Dead or Alive 3 ARCADE Stick Joystick Controller Japan ===&lt;br /&gt;
&lt;br /&gt;
{{FIXME}}&lt;br /&gt;
&lt;br /&gt;
=== Street Fighter 15th Anniversary Edition Arcade Stick ===&lt;br /&gt;
&lt;br /&gt;
{{FIXME}}&lt;br /&gt;
&lt;br /&gt;
=== Gamester Xbox Arcade Stick ===&lt;br /&gt;
&lt;br /&gt;
{{FIXME}}&lt;br /&gt;
&lt;br /&gt;
=== Nuby Xbox Fighter Arcade Stick ===&lt;br /&gt;
&lt;br /&gt;
{{FIXME}}&lt;br /&gt;
&lt;br /&gt;
=== Nuby Xbox Arcade Super Stick ===&lt;br /&gt;
&lt;br /&gt;
{{FIXME}}&lt;br /&gt;
&lt;br /&gt;
The source image of the box and on device has item&amp;lt;nowiki&amp;gt;#:&amp;lt;/nowiki&amp;gt;36020.&lt;br /&gt;
&lt;br /&gt;
=== Naki Ultimate Fighting Stick ===&lt;br /&gt;
&lt;br /&gt;
{{FIXME}}&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=4GphUsTzgds YouTube reviewer] report this joystick to have rumble support.&lt;br /&gt;
&lt;br /&gt;
== Light guns ==&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
=== Controller to Xbox ===&lt;br /&gt;
&lt;br /&gt;
20 bytes&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Field&lt;br /&gt;
!Offset (Bytes)&lt;br /&gt;
!Mask&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
|{{input-dy+}}&lt;br /&gt;
|2&lt;br /&gt;
|0x01&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|{{input-dy-}}&lt;br /&gt;
|2&lt;br /&gt;
|0x02&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|{{input-dx-}}&lt;br /&gt;
|2&lt;br /&gt;
|0x04&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|{{input-dx+}}&lt;br /&gt;
|2&lt;br /&gt;
|0x08&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|{{input-start}}&lt;br /&gt;
|2&lt;br /&gt;
|0x10&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|{{input-back}}&lt;br /&gt;
|2&lt;br /&gt;
|0x20&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Light visible&lt;br /&gt;
|3&lt;br /&gt;
|0x20&lt;br /&gt;
|Set to 1 if the gun is pointed to a bright screen, 0 if no light visible.&lt;br /&gt;
|-&lt;br /&gt;
|Unknown 1&lt;br /&gt;
|3&lt;br /&gt;
|0x40&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot; | 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.&lt;br /&gt;
|-&lt;br /&gt;
|Unknown 2&lt;br /&gt;
|3&lt;br /&gt;
|0x80&lt;br /&gt;
|-&lt;br /&gt;
|{{input-a}} Trigger&lt;br /&gt;
|4&lt;br /&gt;
|0xFF&lt;br /&gt;
|rowspan=&amp;quot;6&amp;quot; | Digital only, either 0 or 255&lt;br /&gt;
|-&lt;br /&gt;
|{{input-b}}&lt;br /&gt;
|5&lt;br /&gt;
|0xFF&lt;br /&gt;
|-&lt;br /&gt;
|{{input-x}}&lt;br /&gt;
|6&lt;br /&gt;
|0xFF&lt;br /&gt;
|-&lt;br /&gt;
|{{input-y}}&lt;br /&gt;
|7&lt;br /&gt;
|0xFF&lt;br /&gt;
|-&lt;br /&gt;
|{{input-black}}&lt;br /&gt;
|8&lt;br /&gt;
|0xFF&lt;br /&gt;
|-&lt;br /&gt;
|{{input-white}}&lt;br /&gt;
|9&lt;br /&gt;
|0xFF&lt;br /&gt;
|-&lt;br /&gt;
|{{input-lx}}&lt;br /&gt;
|12&lt;br /&gt;
|0xFFFF&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot; | Absolute position using the full stick range.&lt;br /&gt;
(0, 0) is the center of the screen and is also reported if the light gun is pointed off-screen.&lt;br /&gt;
|-&lt;br /&gt;
|{{input-ly}}&lt;br /&gt;
|14&lt;br /&gt;
|0xFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Xbox to Controller ===&lt;br /&gt;
&lt;br /&gt;
==== Force feedback: wValue: 0x0200, wLength: 6 ====&lt;br /&gt;
&lt;br /&gt;
6 bytes&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Field&lt;br /&gt;
!Offset (Bytes)&lt;br /&gt;
!Mask&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
|Actuator strength&lt;br /&gt;
|2&lt;br /&gt;
|0xFFFF&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|(Unused)&lt;br /&gt;
|4&lt;br /&gt;
|0x0000&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==== Calibration: wValue: 0x0201, wLength: 10 ====&lt;br /&gt;
&lt;br /&gt;
10 bytes&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Field&lt;br /&gt;
!Offset (Bytes)&lt;br /&gt;
!Mask&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
|Center calibration X&lt;br /&gt;
|2&lt;br /&gt;
|0xFFFF&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;|Gun's reported value subtracted from (0,0)&lt;br /&gt;
|-&lt;br /&gt;
|Center calibration Y&lt;br /&gt;
|4&lt;br /&gt;
|0xFFFF&lt;br /&gt;
|-&lt;br /&gt;
|Top left calibration X&lt;br /&gt;
|6&lt;br /&gt;
|0xFFFF&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;|Gun's reported value subtracted from (-25000,25000)&lt;br /&gt;
|-&lt;br /&gt;
|Top left calibration Y&lt;br /&gt;
|8&lt;br /&gt;
|0xFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
# The game will first send a calibration report with all four offsets reset to (0, 0), (0, 0) to reset any offsets and scaling.&lt;br /&gt;
# The game will now display a target in the centre of the screen and ask you to shoot it. This will tell it how &amp;quot;wrong&amp;quot; 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.&lt;br /&gt;
# 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.&lt;br /&gt;
# 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 &amp;quot;wrong&amp;quot; the gun is when aimed at the top left of the screen.&lt;br /&gt;
# 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 &amp;quot;perfect&amp;quot; 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).&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
=== EMS TopGun II ===&lt;br /&gt;
&lt;br /&gt;
''This is an unlicensed / unofficial Xbox accessory.''&lt;br /&gt;
&lt;br /&gt;
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm&lt;br /&gt;
&lt;br /&gt;
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).&lt;br /&gt;
There is no internal hub in this device.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! EMS TopGun II !! Xbox Gamepad !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Stick || {{input-d}} ||&lt;br /&gt;
|-&lt;br /&gt;
| Trigger || {{input-a}} || rowspan=&amp;quot;4&amp;quot; | Digital only, either 0 or 255&lt;br /&gt;
|-&lt;br /&gt;
| Grip || {{input-b}}&lt;br /&gt;
|-&lt;br /&gt;
| A || {{input-x}}&lt;br /&gt;
|-&lt;br /&gt;
| B || {{input-y}}&lt;br /&gt;
|-&lt;br /&gt;
| START || {{input-start}} ||&lt;br /&gt;
|-&lt;br /&gt;
| SE/BA || {{input-back}} ||&lt;br /&gt;
|-&lt;br /&gt;
| Aim Left / Right || {{input-lx}} || rowspan=&amp;quot;2&amp;quot; | Absolute position using the full stick range&lt;br /&gt;
|-&lt;br /&gt;
| Aim Up / Down || {{input-ly}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).&lt;br /&gt;
&lt;br /&gt;
===== Turbo Mode =====&lt;br /&gt;
&lt;br /&gt;
* Turbo mode 0 keeps {{input-a}} pressed  while trigger is held&lt;br /&gt;
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held&lt;br /&gt;
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held&lt;br /&gt;
&lt;br /&gt;
===== Force Feedback =====&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}&lt;br /&gt;
&lt;br /&gt;
==== USB Descriptors ====&lt;br /&gt;
&lt;br /&gt;
This is the descriptor in the Xbox mode (X).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bus 003 Device 016: ID 0b9a:016b  &lt;br /&gt;
Device Descriptor:&lt;br /&gt;
  bLength                18&lt;br /&gt;
  bDescriptorType         1&lt;br /&gt;
  bcdUSB               1.10&lt;br /&gt;
  bDeviceClass            0 &lt;br /&gt;
  bDeviceSubClass         0 &lt;br /&gt;
  bDeviceProtocol         0 &lt;br /&gt;
  bMaxPacketSize0        64&lt;br /&gt;
  idVendor           0x0b9a &lt;br /&gt;
  idProduct          0x016b &lt;br /&gt;
  bcdDevice            4.57&lt;br /&gt;
  iManufacturer           1 EMS̖E&lt;br /&gt;
  iProduct                2 EMS TopGun&lt;br /&gt;
  iSerial                 0 &lt;br /&gt;
  bNumConfigurations      1&lt;br /&gt;
  Configuration Descriptor:&lt;br /&gt;
    bLength                 9&lt;br /&gt;
    bDescriptorType         2&lt;br /&gt;
    wTotalLength           32&lt;br /&gt;
    bNumInterfaces          1&lt;br /&gt;
    bConfigurationValue     1&lt;br /&gt;
    iConfiguration          0 &lt;br /&gt;
    bmAttributes         0x80&lt;br /&gt;
      (Bus Powered)&lt;br /&gt;
    MaxPower              100mA&lt;br /&gt;
    Interface Descriptor:&lt;br /&gt;
      bLength                 9&lt;br /&gt;
      bDescriptorType         4&lt;br /&gt;
      bInterfaceNumber        0&lt;br /&gt;
      bAlternateSetting       0&lt;br /&gt;
      bNumEndpoints           2&lt;br /&gt;
      bInterfaceClass        88 Xbox&lt;br /&gt;
      bInterfaceSubClass     66 Controller&lt;br /&gt;
      bInterfaceProtocol      0 &lt;br /&gt;
      iInterface              0 &lt;br /&gt;
      Endpoint Descriptor:&lt;br /&gt;
        bLength                 7&lt;br /&gt;
        bDescriptorType         5&lt;br /&gt;
        bEndpointAddress     0x81  EP 1 IN&lt;br /&gt;
        bmAttributes            3&lt;br /&gt;
          Transfer Type            Interrupt&lt;br /&gt;
          Synch Type               None&lt;br /&gt;
          Usage Type               Data&lt;br /&gt;
        wMaxPacketSize     0x0040  1x 64 bytes&lt;br /&gt;
        bInterval               4&lt;br /&gt;
      Endpoint Descriptor:&lt;br /&gt;
        bLength                 7&lt;br /&gt;
        bDescriptorType         5&lt;br /&gt;
        bEndpointAddress     0x02  EP 2 OUT&lt;br /&gt;
        bmAttributes            3&lt;br /&gt;
          Transfer Type            Interrupt&lt;br /&gt;
          Synch Type               None&lt;br /&gt;
          Usage Type               Data&lt;br /&gt;
        wMaxPacketSize     0x0040  1x 64 bytes&lt;br /&gt;
        bInterval               8&lt;br /&gt;
can't get debug descriptor: Resource temporarily unavailable&lt;br /&gt;
Device Status:     0x0000&lt;br /&gt;
  (Bus Powered)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Joytech Sharp Shooter ===&lt;br /&gt;
&lt;br /&gt;
''This is an unlicensed / unofficial Xbox accessory.''&lt;br /&gt;
&lt;br /&gt;
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
model numer: JS-901D&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Stick || {{input-d}} ||&lt;br /&gt;
|-&lt;br /&gt;
| Trigger || {{input-a}} || rowspan=&amp;quot;6&amp;quot; | Digital only, either 0 or 255 {{citation needed}}&lt;br /&gt;
|-&lt;br /&gt;
| B (Left side) || rowspan=&amp;quot;3&amp;quot; | {{input-b}}&lt;br /&gt;
|-&lt;br /&gt;
| B (Right side)&lt;br /&gt;
|-&lt;br /&gt;
| B (Magazine button)&lt;br /&gt;
|-&lt;br /&gt;
| x || {{input-x}}&lt;br /&gt;
|-&lt;br /&gt;
| y || {{input-y}}&lt;br /&gt;
|-&lt;br /&gt;
| START || {{input-start}} ||&lt;br /&gt;
|-&lt;br /&gt;
| BACK || {{input-back}} ||&lt;br /&gt;
|-&lt;br /&gt;
| Aim Left / Right || {{input-lx}} || {{citation needed}}&lt;br /&gt;
|-&lt;br /&gt;
| Aim Up / Down || {{input-ly}} || {{citation needed}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}&lt;br /&gt;
&lt;br /&gt;
===== Fire/Reload Mode =====&lt;br /&gt;
&lt;br /&gt;
* Normal mode does nothing, normal operation&lt;br /&gt;
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}} &lt;br /&gt;
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly  {{citation needed}}&lt;br /&gt;
&lt;br /&gt;
==== USB Descriptors ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bus 003 Device 025: ID 1292:3006 Innomedia &lt;br /&gt;
Device Descriptor:&lt;br /&gt;
  bLength                18&lt;br /&gt;
  bDescriptorType         1&lt;br /&gt;
  bcdUSB               1.10&lt;br /&gt;
  bDeviceClass            0 &lt;br /&gt;
  bDeviceSubClass         0 &lt;br /&gt;
  bDeviceProtocol         0 &lt;br /&gt;
  bMaxPacketSize0         8&lt;br /&gt;
  idVendor           0x1292 Innomedia&lt;br /&gt;
  idProduct          0x3006 &lt;br /&gt;
  bcdDevice            1.50&lt;br /&gt;
  iManufacturer           0 &lt;br /&gt;
  iProduct                0 &lt;br /&gt;
  iSerial                 0 &lt;br /&gt;
  bNumConfigurations      1&lt;br /&gt;
  Configuration Descriptor:&lt;br /&gt;
    bLength                 9&lt;br /&gt;
    bDescriptorType         2&lt;br /&gt;
    wTotalLength           32&lt;br /&gt;
    bNumInterfaces          1&lt;br /&gt;
    bConfigurationValue     1&lt;br /&gt;
    iConfiguration          1 (error)&lt;br /&gt;
    bmAttributes         0x80&lt;br /&gt;
      (Bus Powered)&lt;br /&gt;
    MaxPower              100mA&lt;br /&gt;
    Interface Descriptor:&lt;br /&gt;
      bLength                 9&lt;br /&gt;
      bDescriptorType         4&lt;br /&gt;
      bInterfaceNumber        0&lt;br /&gt;
      bAlternateSetting       0&lt;br /&gt;
      bNumEndpoints           2&lt;br /&gt;
      bInterfaceClass        88 Xbox&lt;br /&gt;
      bInterfaceSubClass     66 Controller&lt;br /&gt;
      bInterfaceProtocol      0 &lt;br /&gt;
      iInterface              2 (error)&lt;br /&gt;
      Endpoint Descriptor:&lt;br /&gt;
        bLength                 7&lt;br /&gt;
        bDescriptorType         5&lt;br /&gt;
        bEndpointAddress     0x81  EP 1 IN&lt;br /&gt;
        bmAttributes            3&lt;br /&gt;
          Transfer Type            Interrupt&lt;br /&gt;
          Synch Type               None&lt;br /&gt;
          Usage Type               Data&lt;br /&gt;
        wMaxPacketSize     0x0020  1x 32 bytes&lt;br /&gt;
        bInterval               4&lt;br /&gt;
      Endpoint Descriptor:&lt;br /&gt;
        bLength                 7&lt;br /&gt;
        bDescriptorType         5&lt;br /&gt;
        bEndpointAddress     0x02  EP 2 OUT&lt;br /&gt;
        bmAttributes            3&lt;br /&gt;
          Transfer Type            Interrupt&lt;br /&gt;
          Synch Type               None&lt;br /&gt;
          Usage Type               Data&lt;br /&gt;
        wMaxPacketSize     0x0020  1x 32 bytes&lt;br /&gt;
        bInterval               4&lt;br /&gt;
&lt;br /&gt;
Bus 003 Device 024: ID 1292:3006 Innomedia &lt;br /&gt;
Device Descriptor:&lt;br /&gt;
  bLength                18&lt;br /&gt;
  bDescriptorType         1&lt;br /&gt;
  bcdUSB               1.10&lt;br /&gt;
  bDeviceClass            9 Hub&lt;br /&gt;
  bDeviceSubClass         0 &lt;br /&gt;
  bDeviceProtocol         0 Full speed (or root) hub&lt;br /&gt;
  bMaxPacketSize0         8&lt;br /&gt;
  idVendor           0x1292 Innomedia&lt;br /&gt;
  idProduct          0x3006 &lt;br /&gt;
  bcdDevice            1.50&lt;br /&gt;
  iManufacturer           1 (c) 2004 R0R3 Inc.&lt;br /&gt;
  iProduct                2 US Patent 6,287,198&lt;br /&gt;
  iSerial                 0 &lt;br /&gt;
  bNumConfigurations      1&lt;br /&gt;
  Configuration Descriptor:&lt;br /&gt;
    bLength                 9&lt;br /&gt;
    bDescriptorType         2&lt;br /&gt;
    wTotalLength           25&lt;br /&gt;
    bNumInterfaces          1&lt;br /&gt;
    bConfigurationValue     1&lt;br /&gt;
    iConfiguration          4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē&lt;br /&gt;
    bmAttributes         0xa0&lt;br /&gt;
      (Bus Powered)&lt;br /&gt;
      Remote Wakeup&lt;br /&gt;
    MaxPower               64mA&lt;br /&gt;
    Interface Descriptor:&lt;br /&gt;
      bLength                 9&lt;br /&gt;
      bDescriptorType         4&lt;br /&gt;
      bInterfaceNumber        0&lt;br /&gt;
      bAlternateSetting       0&lt;br /&gt;
      bNumEndpoints           1&lt;br /&gt;
      bInterfaceClass         9 Hub&lt;br /&gt;
      bInterfaceSubClass      0 &lt;br /&gt;
      bInterfaceProtocol      0 Full speed (or root) hub&lt;br /&gt;
      iInterface              5 (error)&lt;br /&gt;
      Endpoint Descriptor:&lt;br /&gt;
        bLength                 7&lt;br /&gt;
        bDescriptorType         5&lt;br /&gt;
        bEndpointAddress     0x81  EP 1 IN&lt;br /&gt;
        bmAttributes            3&lt;br /&gt;
          Transfer Type            Interrupt&lt;br /&gt;
          Synch Type               None&lt;br /&gt;
          Usage Type               Data&lt;br /&gt;
        wMaxPacketSize     0x0001  1x 1 bytes&lt;br /&gt;
        bInterval             255&lt;br /&gt;
Hub Descriptor:&lt;br /&gt;
  bLength               9&lt;br /&gt;
  bDescriptorType      41&lt;br /&gt;
  nNbrPorts             3&lt;br /&gt;
  wHubCharacteristic 0x000d&lt;br /&gt;
    Per-port power switching&lt;br /&gt;
    Compound device&lt;br /&gt;
    Per-port overcurrent protection&lt;br /&gt;
  bPwrOn2PwrGood       32 * 2 milli seconds&lt;br /&gt;
  bHubContrCurrent     64 milli Ampere&lt;br /&gt;
  DeviceRemovable    0x02&lt;br /&gt;
  PortPwrCtrlMask    0x0e&lt;br /&gt;
 Hub Port Status:&lt;br /&gt;
   Port 1: 0000.0103 power enable connect&lt;br /&gt;
   Port 2: 0000.0100 power&lt;br /&gt;
   Port 3: 0100.0100 power&lt;br /&gt;
Device Status:     0x0000&lt;br /&gt;
  (Bus Powered)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Microphones ==&lt;br /&gt;
&lt;br /&gt;
=== Xbox Communicator ===&lt;br /&gt;
&lt;br /&gt;
==== USB Descriptor ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Device Descriptor:&lt;br /&gt;
  bLength                18&lt;br /&gt;
  bDescriptorType         1&lt;br /&gt;
  bcdUSB               1.10&lt;br /&gt;
  bDeviceClass            0 &lt;br /&gt;
  bDeviceSubClass         0 &lt;br /&gt;
  bDeviceProtocol         0 &lt;br /&gt;
  bMaxPacketSize0         8&lt;br /&gt;
  idVendor           0x045e Microsoft Corp.&lt;br /&gt;
  idProduct          0x0283 Xbox Communicator&lt;br /&gt;
  bcdDevice            1.58&lt;br /&gt;
  iManufacturer           0 &lt;br /&gt;
  iProduct                0 &lt;br /&gt;
  iSerial                 0 &lt;br /&gt;
  bNumConfigurations      1&lt;br /&gt;
  Configuration Descriptor:&lt;br /&gt;
    bLength                 9&lt;br /&gt;
    bDescriptorType         2&lt;br /&gt;
    wTotalLength       0x002d&lt;br /&gt;
    bNumInterfaces          2&lt;br /&gt;
    bConfigurationValue     1&lt;br /&gt;
    iConfiguration          0 &lt;br /&gt;
    bmAttributes         0x80&lt;br /&gt;
      (Bus Powered)&lt;br /&gt;
    MaxPower              100mA&lt;br /&gt;
    Interface Descriptor:&lt;br /&gt;
      bLength                 9&lt;br /&gt;
      bDescriptorType         4&lt;br /&gt;
      bInterfaceNumber        0&lt;br /&gt;
      bAlternateSetting       0&lt;br /&gt;
      bNumEndpoints           1&lt;br /&gt;
      bInterfaceClass       120 &lt;br /&gt;
      bInterfaceSubClass      0 &lt;br /&gt;
      bInterfaceProtocol      0 &lt;br /&gt;
      iInterface              0 &lt;br /&gt;
      Endpoint Descriptor:&lt;br /&gt;
        bLength                 9&lt;br /&gt;
        bDescriptorType         5&lt;br /&gt;
        bEndpointAddress     0x04  EP 4 OUT&lt;br /&gt;
        bmAttributes            5&lt;br /&gt;
          Transfer Type            Isochronous&lt;br /&gt;
          Synch Type               Asynchronous&lt;br /&gt;
          Usage Type               Data&lt;br /&gt;
        wMaxPacketSize     0x0030  1x 48 bytes&lt;br /&gt;
        bInterval               1&lt;br /&gt;
        bRefresh                0&lt;br /&gt;
        bSynchAddress           0&lt;br /&gt;
    Interface Descriptor:&lt;br /&gt;
      bLength                 9&lt;br /&gt;
      bDescriptorType         4&lt;br /&gt;
      bInterfaceNumber        1&lt;br /&gt;
      bAlternateSetting       0&lt;br /&gt;
      bNumEndpoints           1&lt;br /&gt;
      bInterfaceClass       120 &lt;br /&gt;
      bInterfaceSubClass      0 &lt;br /&gt;
      bInterfaceProtocol      0 &lt;br /&gt;
      iInterface              0 &lt;br /&gt;
      Endpoint Descriptor:&lt;br /&gt;
        bLength                 9&lt;br /&gt;
        bDescriptorType         5&lt;br /&gt;
        bEndpointAddress     0x85  EP 5 IN&lt;br /&gt;
        bmAttributes            5&lt;br /&gt;
          Transfer Type            Isochronous&lt;br /&gt;
          Synch Type               Asynchronous&lt;br /&gt;
          Usage Type               Data&lt;br /&gt;
        wMaxPacketSize     0x0030  1x 48 bytes&lt;br /&gt;
        bInterval               1&lt;br /&gt;
        bRefresh                0&lt;br /&gt;
        bSynchAddress           0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Xbox Karaoke ===&lt;br /&gt;
&lt;br /&gt;
==== USB Descriptor ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Device Descriptor:&lt;br /&gt;
  bLength                18&lt;br /&gt;
  bDescriptorType         1&lt;br /&gt;
  bcdUSB               1.10&lt;br /&gt;
  bDeviceClass            0 &lt;br /&gt;
  bDeviceSubClass         0 &lt;br /&gt;
  bDeviceProtocol         0 &lt;br /&gt;
  bMaxPacketSize0         8&lt;br /&gt;
  idVendor           0x045e Microsoft Corp.&lt;br /&gt;
  idProduct          0x0501 &lt;br /&gt;
  bcdDevice            1.00&lt;br /&gt;
  iManufacturer           1 Licensed 3PP Vendor&lt;br /&gt;
  iProduct                2 Karaoke Microphone Module&lt;br /&gt;
  iSerial                 0 &lt;br /&gt;
  bNumConfigurations      1&lt;br /&gt;
  Configuration Descriptor:&lt;br /&gt;
    bLength                 9&lt;br /&gt;
    bDescriptorType         2&lt;br /&gt;
    wTotalLength       0x001b&lt;br /&gt;
    bNumInterfaces          1&lt;br /&gt;
    bConfigurationValue     1&lt;br /&gt;
    iConfiguration          0 &lt;br /&gt;
    bmAttributes         0x80&lt;br /&gt;
      (Bus Powered)&lt;br /&gt;
    MaxPower              100mA&lt;br /&gt;
    Interface Descriptor:&lt;br /&gt;
      bLength                 9&lt;br /&gt;
      bDescriptorType         4&lt;br /&gt;
      bInterfaceNumber        0&lt;br /&gt;
      bAlternateSetting       0&lt;br /&gt;
      bNumEndpoints           1&lt;br /&gt;
      bInterfaceClass       121 &lt;br /&gt;
      bInterfaceSubClass      1 &lt;br /&gt;
      bInterfaceProtocol      0 &lt;br /&gt;
      iInterface              0 &lt;br /&gt;
      Endpoint Descriptor:&lt;br /&gt;
        bLength                 9&lt;br /&gt;
        bDescriptorType         5&lt;br /&gt;
        bEndpointAddress     0x81  EP 1 IN&lt;br /&gt;
        bmAttributes            5&lt;br /&gt;
          Transfer Type            Isochronous&lt;br /&gt;
          Synch Type               Asynchronous&lt;br /&gt;
          Usage Type               Data&lt;br /&gt;
        wMaxPacketSize     0x0060  1x 96 bytes&lt;br /&gt;
        bInterval               1&lt;br /&gt;
        bRefresh                0&lt;br /&gt;
        bSynchAddress           0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Steel Battalion Controller ==&lt;br /&gt;
&lt;br /&gt;
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]&lt;br /&gt;
&lt;br /&gt;
=== USB Descriptors ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Device Descriptor:&lt;br /&gt;
  bLength                18&lt;br /&gt;
  bDescriptorType         1&lt;br /&gt;
  bcdUSB               1.10&lt;br /&gt;
  bDeviceClass            0 (Defined at Interface level)&lt;br /&gt;
  bDeviceSubClass         0&lt;br /&gt;
  bDeviceProtocol         0&lt;br /&gt;
  bMaxPacketSize0         8&lt;br /&gt;
  idVendor           0x0a7b&lt;br /&gt;
  idProduct          0xd000&lt;br /&gt;
  bcdDevice            1.00&lt;br /&gt;
  iManufacturer           0&lt;br /&gt;
  iProduct                0&lt;br /&gt;
  iSerial                 0&lt;br /&gt;
  bNumConfigurations      1&lt;br /&gt;
  Configuration Descriptor:&lt;br /&gt;
    bLength                 9&lt;br /&gt;
    bDescriptorType         2&lt;br /&gt;
    wTotalLength           32&lt;br /&gt;
    bNumInterfaces          1&lt;br /&gt;
    bConfigurationValue     1&lt;br /&gt;
    iConfiguration          0&lt;br /&gt;
    bmAttributes         0x80&lt;br /&gt;
      (Bus Powered)&lt;br /&gt;
    MaxPower              500mA&lt;br /&gt;
    Interface Descriptor:&lt;br /&gt;
      bLength                 9&lt;br /&gt;
      bDescriptorType         4&lt;br /&gt;
      bInterfaceNumber        0&lt;br /&gt;
      bAlternateSetting       0&lt;br /&gt;
      bNumEndpoints           2&lt;br /&gt;
      bInterfaceClass        88 Xbox&lt;br /&gt;
      bInterfaceSubClass     66 Controller&lt;br /&gt;
      bInterfaceProtocol      0&lt;br /&gt;
      iInterface              0&lt;br /&gt;
      Endpoint Descriptor:&lt;br /&gt;
        bLength                 7&lt;br /&gt;
        bDescriptorType         5&lt;br /&gt;
        bEndpointAddress     0x82  EP 2 IN&lt;br /&gt;
        bmAttributes            3&lt;br /&gt;
          Transfer Type            Interrupt&lt;br /&gt;
          Synch Type               None&lt;br /&gt;
          Usage Type               Data&lt;br /&gt;
        wMaxPacketSize     0x0020  1x 32 bytes&lt;br /&gt;
        bInterval               4&lt;br /&gt;
      Endpoint Descriptor:&lt;br /&gt;
        bLength                 7&lt;br /&gt;
        bDescriptorType         5&lt;br /&gt;
        bEndpointAddress     0x01  EP 1 OUT&lt;br /&gt;
        bmAttributes            3&lt;br /&gt;
          Transfer Type            Interrupt&lt;br /&gt;
          Synch Type               None&lt;br /&gt;
          Usage Type               Data&lt;br /&gt;
        wMaxPacketSize     0x0020  1x 32 bytes&lt;br /&gt;
        bInterval               4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Controller to Xbox ===&lt;br /&gt;
&lt;br /&gt;
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs&lt;br /&gt;
&lt;br /&gt;
26 bytes&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Field&lt;br /&gt;
!Offset (Bytes)&lt;br /&gt;
!Mask&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
|RightJoyMainWeapon&lt;br /&gt;
|2&lt;br /&gt;
|0x01&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|RightJoyFire&lt;br /&gt;
|2&lt;br /&gt;
|0x02&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|RightJoyLockOn&lt;br /&gt;
|2&lt;br /&gt;
|0x04&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Eject&lt;br /&gt;
|2&lt;br /&gt;
|0x08&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|CockpitHatch&lt;br /&gt;
|2&lt;br /&gt;
|0x10&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ignition&lt;br /&gt;
|2&lt;br /&gt;
|0x20&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Start&lt;br /&gt;
|2&lt;br /&gt;
|0x40&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MultiMonOpenClose&lt;br /&gt;
|2&lt;br /&gt;
|0x80&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MultiMonMapZoomInOut&lt;br /&gt;
|3&lt;br /&gt;
|0x01&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MultiMonModeSelect&lt;br /&gt;
|3&lt;br /&gt;
|0x02&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MultiMonSubMonitor&lt;br /&gt;
|3&lt;br /&gt;
|0x04&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MainMonZoomIn&lt;br /&gt;
|3&lt;br /&gt;
|0x08&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MainMonZoomOut&lt;br /&gt;
|3&lt;br /&gt;
|0x10&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|FunctionFSS&lt;br /&gt;
|3&lt;br /&gt;
|0x20&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|FunctionManipulator&lt;br /&gt;
|3&lt;br /&gt;
|0x40&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|FunctionLineColorChange&lt;br /&gt;
|3&lt;br /&gt;
|0x80&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Washing&lt;br /&gt;
|4&lt;br /&gt;
|0x01&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Extinguisher&lt;br /&gt;
|4&lt;br /&gt;
|0x02&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Chaff&lt;br /&gt;
|4&lt;br /&gt;
|0x04&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|FunctionTankDetach&lt;br /&gt;
|4&lt;br /&gt;
|0x08&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|FunctionOverride&lt;br /&gt;
|4&lt;br /&gt;
|0x10&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|FunctionNightScope&lt;br /&gt;
|4&lt;br /&gt;
|0x20&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|FunctionF1&lt;br /&gt;
|4&lt;br /&gt;
|0x40&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|FunctionF2&lt;br /&gt;
|4&lt;br /&gt;
|0x80&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|FunctionF3&lt;br /&gt;
|5&lt;br /&gt;
|0x01&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|WeaponConMain&lt;br /&gt;
|5&lt;br /&gt;
|0x02&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|WeaponConSub&lt;br /&gt;
|5&lt;br /&gt;
|0x04&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|WeaponConMagazine&lt;br /&gt;
|5&lt;br /&gt;
|0x08&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Comm1&lt;br /&gt;
|5&lt;br /&gt;
|0x10&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Comm2&lt;br /&gt;
|5&lt;br /&gt;
|0x20&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Comm3&lt;br /&gt;
|5&lt;br /&gt;
|0x40&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Comm4&lt;br /&gt;
|5&lt;br /&gt;
|0x80&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Comm5&lt;br /&gt;
|6&lt;br /&gt;
|0x01&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|LeftJoySightChange&lt;br /&gt;
|6&lt;br /&gt;
|0x02&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ToggleFilterControl&lt;br /&gt;
|6&lt;br /&gt;
|0x04&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ToggleOxygenSupply&lt;br /&gt;
|6&lt;br /&gt;
|0x08&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ToggleFuelFlowRate&lt;br /&gt;
|6&lt;br /&gt;
|0x10&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ToggleBuffreMaterial&lt;br /&gt;
|6&lt;br /&gt;
|0x20&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ToggleVTLocation&lt;br /&gt;
|6&lt;br /&gt;
|0x40&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|6&lt;br /&gt;
|0x80&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|7&lt;br /&gt;
|0xFF&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|8&lt;br /&gt;
|0xFF&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|AimingX&lt;br /&gt;
|9&lt;br /&gt;
|0xFFFF&lt;br /&gt;
|&amp;quot;Aiming Lever&amp;quot; joystick on the right. Unsigned X Axis value: 0 (Left) to 0xFFFF (Right).&lt;br /&gt;
|-&lt;br /&gt;
|AimingY&lt;br /&gt;
|11&lt;br /&gt;
|0xFFFF&lt;br /&gt;
|&amp;quot;Aiming Lever&amp;quot; joystick on the right. Unsigned Y Axis value: 0 (Top) to 0xFFFF (Bottom).&lt;br /&gt;
|-&lt;br /&gt;
|RotationLever&lt;br /&gt;
|13&lt;br /&gt;
|0xFFFF&lt;br /&gt;
|&amp;quot;Rotation Lever&amp;quot; joystick on the left. Signed X Axis value: -0x7FFF (Left) to 0x7FFF (Right)&lt;br /&gt;
|-&lt;br /&gt;
|SightChangeX&lt;br /&gt;
|15&lt;br /&gt;
|0xFFFF&lt;br /&gt;
|&amp;quot;Sight Change&amp;quot; analog stick on the &amp;quot;Rotation Lever&amp;quot; joystick. Signed X Axis value: -0x7FFF (Left) to 0x7FFF (Right)&lt;br /&gt;
|-&lt;br /&gt;
|SightChangeY&lt;br /&gt;
|17&lt;br /&gt;
|0xFFFF&lt;br /&gt;
|&amp;quot;Sight Change&amp;quot; analog stick on the &amp;quot;Rotation Lever&amp;quot; joystick. Signed Y Axis value: -0x7FFF (Top) to 0x7FFF (Bottom)&lt;br /&gt;
|-&lt;br /&gt;
|LeftPedal&lt;br /&gt;
|19&lt;br /&gt;
|0xFFFF&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MiddlePedal&lt;br /&gt;
|21&lt;br /&gt;
|0xFFFF&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|RightPedal&lt;br /&gt;
|23&lt;br /&gt;
|0xFFFF&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|TunerDial&lt;br /&gt;
|24&lt;br /&gt;
|0x0F&lt;br /&gt;
|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.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|24&lt;br /&gt;
|0xF0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|GearLever&lt;br /&gt;
|25&lt;br /&gt;
|0xFF&lt;br /&gt;
|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.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Xbox to Controller ===&lt;br /&gt;
&lt;br /&gt;
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs&lt;br /&gt;
&lt;br /&gt;
22 bytes&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Field&lt;br /&gt;
!Offset (Bytes)&lt;br /&gt;
!Mask&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
|Start&lt;br /&gt;
|0&lt;br /&gt;
|0x00&lt;br /&gt;
|This will always be 0x00&lt;br /&gt;
|-&lt;br /&gt;
|bLen&lt;br /&gt;
|1&lt;br /&gt;
|0x16&lt;br /&gt;
|This will always be 0x16 (22 bytes)&lt;br /&gt;
|-&lt;br /&gt;
|EmergencyEject&lt;br /&gt;
|2&lt;br /&gt;
|0x0F&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|CockpitHatch&lt;br /&gt;
|2&lt;br /&gt;
|0xF0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ignition&lt;br /&gt;
|3&lt;br /&gt;
|0x0F&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Start&lt;br /&gt;
|3&lt;br /&gt;
|0xF0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|OpenClose&lt;br /&gt;
|4&lt;br /&gt;
|0x0F&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MapZoomInOut&lt;br /&gt;
|4&lt;br /&gt;
|0xF0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ModeSelect&lt;br /&gt;
|5&lt;br /&gt;
|0x0F&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SubMonitorModeSelect&lt;br /&gt;
|5&lt;br /&gt;
|0xF0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MainMonitorZoomIn&lt;br /&gt;
|6&lt;br /&gt;
|0x0F&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MainMonitorZoomOut&lt;br /&gt;
|6&lt;br /&gt;
|0xF0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ForecastShootingSystem&lt;br /&gt;
|7&lt;br /&gt;
|0x0F&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Manipulator&lt;br /&gt;
|7&lt;br /&gt;
|0xF0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|LineColorChange&lt;br /&gt;
|8&lt;br /&gt;
|0x0F&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Washing&lt;br /&gt;
|8&lt;br /&gt;
|0xF0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Extinguisher&lt;br /&gt;
|9&lt;br /&gt;
|0x0F&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Chaff&lt;br /&gt;
|9&lt;br /&gt;
|0xF0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|TankDetach&lt;br /&gt;
|10&lt;br /&gt;
|0x0F&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Override&lt;br /&gt;
|10&lt;br /&gt;
|0xF0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|NightScope&lt;br /&gt;
|11&lt;br /&gt;
|0x0F&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|F1&lt;br /&gt;
|11&lt;br /&gt;
|0xF0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|F2&lt;br /&gt;
|12&lt;br /&gt;
|0x0F&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|F3&lt;br /&gt;
|12&lt;br /&gt;
|0xF0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MainWeaponControl&lt;br /&gt;
|13&lt;br /&gt;
|0x0F&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SubWeaponControl&lt;br /&gt;
|13&lt;br /&gt;
|0xF0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MagazineChange&lt;br /&gt;
|14&lt;br /&gt;
|0x0F&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Comm1&lt;br /&gt;
|14&lt;br /&gt;
|0xF0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Comm2&lt;br /&gt;
|15&lt;br /&gt;
|0x0F&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Comm3&lt;br /&gt;
|15&lt;br /&gt;
|0xF0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Comm4&lt;br /&gt;
|16&lt;br /&gt;
|0x0F&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Comm5&lt;br /&gt;
|16&lt;br /&gt;
|0xF0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|17&lt;br /&gt;
|0x0F&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|GearR&lt;br /&gt;
|17&lt;br /&gt;
|0xF0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|GearN&lt;br /&gt;
|18&lt;br /&gt;
|0x0F&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Gear1&lt;br /&gt;
|18&lt;br /&gt;
|0xF0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Gear2&lt;br /&gt;
|19&lt;br /&gt;
|0x0F&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Gear3&lt;br /&gt;
|19&lt;br /&gt;
|0xF0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Gear4&lt;br /&gt;
|20&lt;br /&gt;
|0x0F&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Gear5&lt;br /&gt;
|20&lt;br /&gt;
|0xF0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Unused?&lt;br /&gt;
|21&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SEGA Chihiro Baseboard ==&lt;br /&gt;
&lt;br /&gt;
Contains 2 USB devices which directly attach to USB ports 3 &amp;amp; 4 (player 0, 1)&lt;br /&gt;
&lt;br /&gt;
=== USB Descriptors ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Device Descriptor]&lt;br /&gt;
----------------------------------------------&lt;br /&gt;
  Length              = 18&lt;br /&gt;
  DescriptorType      = 0x01&lt;br /&gt;
  USB version         = 1.00&lt;br /&gt;
  Vendor:Product      = 0ca3:0003&lt;br /&gt;
  MaxPacketSize0      = 64&lt;br /&gt;
  NumConfigurations   = 1&lt;br /&gt;
  Device version      = 1.03&lt;br /&gt;
  Device Class:SubClass:Protocol = 60:01:00&lt;br /&gt;
&lt;br /&gt;
[Configuration Descriptor]&lt;br /&gt;
----------------------------------------------&lt;br /&gt;
  Length              =  9&lt;br /&gt;
  DescriptorType      = 02&lt;br /&gt;
  wTotalLength        = 60&lt;br /&gt;
  bNumInterfaces      = 1&lt;br /&gt;
  bConfigurationValue = 1&lt;br /&gt;
  iConfiguration      = 0&lt;br /&gt;
  bmAttributes        = 0x80&lt;br /&gt;
  MaxPower            = 150&lt;br /&gt;
&lt;br /&gt;
    [Interface Descriptor]&lt;br /&gt;
    ----------------------------------------------&lt;br /&gt;
      Length              =  9&lt;br /&gt;
      DescriptorType      = 04&lt;br /&gt;
      bInterfaceNumber    = 0&lt;br /&gt;
      bAlternateSetting   = 0&lt;br /&gt;
      bNumEndpoints       = 6&lt;br /&gt;
      bInterfaceClass     = 0xff&lt;br /&gt;
      bInterfaceSubClass  = 0x00&lt;br /&gt;
      bInterfaceProtocol  = 0x00&lt;br /&gt;
      iInterface          = 0&lt;br /&gt;
&lt;br /&gt;
        [Endpoint Descriptor]&lt;br /&gt;
        ----------------------------------------------&lt;br /&gt;
          Length              =  7&lt;br /&gt;
          DescriptorType      = 05&lt;br /&gt;
          bEndpointAddress    = 0x01&lt;br /&gt;
          bmAttributes        = 0x02&lt;br /&gt;
          wMaxPacketSize      = 64&lt;br /&gt;
          bInterval           = 0&lt;br /&gt;
          bRefresh            = 7&lt;br /&gt;
          bSynchAddress       = 5&lt;br /&gt;
&lt;br /&gt;
        [Endpoint Descriptor]&lt;br /&gt;
        ----------------------------------------------&lt;br /&gt;
          Length              =  7&lt;br /&gt;
          DescriptorType      = 05&lt;br /&gt;
          bEndpointAddress    = 0x02&lt;br /&gt;
          bmAttributes        = 0x02&lt;br /&gt;
          wMaxPacketSize      = 64&lt;br /&gt;
          bInterval           = 0&lt;br /&gt;
          bRefresh            = 7&lt;br /&gt;
          bSynchAddress       = 5&lt;br /&gt;
&lt;br /&gt;
        [Endpoint Descriptor]&lt;br /&gt;
        ----------------------------------------------&lt;br /&gt;
          Length              =  7&lt;br /&gt;
          DescriptorType      = 05&lt;br /&gt;
          bEndpointAddress    = 0x03&lt;br /&gt;
          bmAttributes        = 0x02&lt;br /&gt;
          wMaxPacketSize      = 64&lt;br /&gt;
          bInterval           = 0&lt;br /&gt;
          bRefresh            = 7&lt;br /&gt;
          bSynchAddress       = 5&lt;br /&gt;
&lt;br /&gt;
        [Endpoint Descriptor]&lt;br /&gt;
        ----------------------------------------------&lt;br /&gt;
          Length              =  7&lt;br /&gt;
          DescriptorType      = 05&lt;br /&gt;
          bEndpointAddress    = 0x81&lt;br /&gt;
          bmAttributes        = 0x02&lt;br /&gt;
          wMaxPacketSize      = 64&lt;br /&gt;
          bInterval           = 0&lt;br /&gt;
          bRefresh            = 7&lt;br /&gt;
          bSynchAddress       = 5&lt;br /&gt;
&lt;br /&gt;
        [Endpoint Descriptor]&lt;br /&gt;
        ----------------------------------------------&lt;br /&gt;
          Length              =  7&lt;br /&gt;
          DescriptorType      = 05&lt;br /&gt;
          bEndpointAddress    = 0x82&lt;br /&gt;
          bmAttributes        = 0x02&lt;br /&gt;
          wMaxPacketSize      = 64&lt;br /&gt;
          bInterval           = 0&lt;br /&gt;
          bRefresh            = 7&lt;br /&gt;
          bSynchAddress       = 5&lt;br /&gt;
&lt;br /&gt;
        [Endpoint Descriptor]&lt;br /&gt;
        ----------------------------------------------&lt;br /&gt;
          Length              =  7&lt;br /&gt;
          DescriptorType      = 05&lt;br /&gt;
          bEndpointAddress    = 0x83&lt;br /&gt;
          bmAttributes        = 0x02&lt;br /&gt;
          wMaxPacketSize      = 64&lt;br /&gt;
          bInterval           = 0&lt;br /&gt;
          bRefresh            = 0&lt;br /&gt;
          bSynchAddress       = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Device Descriptor]&lt;br /&gt;
----------------------------------------------&lt;br /&gt;
  Length              = 18&lt;br /&gt;
  DescriptorType      = 0x01&lt;br /&gt;
  USB version         = 1.00&lt;br /&gt;
  Vendor:Product      = 0ca3:0002&lt;br /&gt;
  MaxPacketSize0      = 64&lt;br /&gt;
  NumConfigurations   = 1&lt;br /&gt;
  Device version      = 1.03&lt;br /&gt;
  Device Class:SubClass:Protocol = 60:00:00&lt;br /&gt;
&lt;br /&gt;
[Configuration Descriptor]&lt;br /&gt;
----------------------------------------------&lt;br /&gt;
  Length              =  9&lt;br /&gt;
  DescriptorType      = 02&lt;br /&gt;
  wTotalLength        = 88&lt;br /&gt;
  bNumInterfaces      = 1&lt;br /&gt;
  bConfigurationValue = 1&lt;br /&gt;
  iConfiguration      = 0&lt;br /&gt;
  bmAttributes        = 0x80&lt;br /&gt;
  MaxPower            = 150&lt;br /&gt;
&lt;br /&gt;
    [Interface Descriptor]&lt;br /&gt;
    ----------------------------------------------&lt;br /&gt;
      Length              =  9&lt;br /&gt;
      DescriptorType      = 04&lt;br /&gt;
      bInterfaceNumber    = 0&lt;br /&gt;
      bAlternateSetting   = 0&lt;br /&gt;
      bNumEndpoints       = 10&lt;br /&gt;
      bInterfaceClass     = 0xff&lt;br /&gt;
      bInterfaceSubClass  = 0x00&lt;br /&gt;
      bInterfaceProtocol  = 0x00&lt;br /&gt;
      iInterface          = 0&lt;br /&gt;
&lt;br /&gt;
        [Endpoint Descriptor]&lt;br /&gt;
        ----------------------------------------------&lt;br /&gt;
          Length              =  7&lt;br /&gt;
          DescriptorType      = 05&lt;br /&gt;
          bEndpointAddress    = 0x01&lt;br /&gt;
          bmAttributes        = 0x02&lt;br /&gt;
          wMaxPacketSize      = 64&lt;br /&gt;
          bInterval           = 0&lt;br /&gt;
          bRefresh            = 7&lt;br /&gt;
          bSynchAddress       = 5&lt;br /&gt;
&lt;br /&gt;
        [Endpoint Descriptor]&lt;br /&gt;
        ----------------------------------------------&lt;br /&gt;
          Length              =  7&lt;br /&gt;
          DescriptorType      = 05&lt;br /&gt;
          bEndpointAddress    = 0x02&lt;br /&gt;
          bmAttributes        = 0x02&lt;br /&gt;
          wMaxPacketSize      = 64&lt;br /&gt;
          bInterval           = 0&lt;br /&gt;
          bRefresh            = 7&lt;br /&gt;
          bSynchAddress       = 5&lt;br /&gt;
&lt;br /&gt;
        [Endpoint Descriptor]&lt;br /&gt;
        ----------------------------------------------&lt;br /&gt;
          Length              =  7&lt;br /&gt;
          DescriptorType      = 05&lt;br /&gt;
          bEndpointAddress    = 0x03&lt;br /&gt;
          bmAttributes        = 0x02&lt;br /&gt;
          wMaxPacketSize      = 64&lt;br /&gt;
          bInterval           = 0&lt;br /&gt;
          bRefresh            = 7&lt;br /&gt;
          bSynchAddress       = 5&lt;br /&gt;
&lt;br /&gt;
        [Endpoint Descriptor]&lt;br /&gt;
        ----------------------------------------------&lt;br /&gt;
          Length              =  7&lt;br /&gt;
          DescriptorType      = 05&lt;br /&gt;
          bEndpointAddress    = 0x04&lt;br /&gt;
          bmAttributes        = 0x02&lt;br /&gt;
          wMaxPacketSize      = 64&lt;br /&gt;
          bInterval           = 0&lt;br /&gt;
          bRefresh            = 7&lt;br /&gt;
          bSynchAddress       = 5&lt;br /&gt;
&lt;br /&gt;
        [Endpoint Descriptor]&lt;br /&gt;
        ----------------------------------------------&lt;br /&gt;
          Length              =  7&lt;br /&gt;
          DescriptorType      = 05&lt;br /&gt;
          bEndpointAddress    = 0x05&lt;br /&gt;
          bmAttributes        = 0x02&lt;br /&gt;
          wMaxPacketSize      = 64&lt;br /&gt;
          bInterval           = 0&lt;br /&gt;
          bRefresh            = 7&lt;br /&gt;
          bSynchAddress       = 5&lt;br /&gt;
&lt;br /&gt;
        [Endpoint Descriptor]&lt;br /&gt;
        ----------------------------------------------&lt;br /&gt;
          Length              =  7&lt;br /&gt;
          DescriptorType      = 05&lt;br /&gt;
          bEndpointAddress    = 0x81&lt;br /&gt;
          bmAttributes        = 0x02&lt;br /&gt;
          wMaxPacketSize      = 64&lt;br /&gt;
          bInterval           = 0&lt;br /&gt;
          bRefresh            = 7&lt;br /&gt;
          bSynchAddress       = 5&lt;br /&gt;
&lt;br /&gt;
        [Endpoint Descriptor]&lt;br /&gt;
        ----------------------------------------------&lt;br /&gt;
          Length              =  7&lt;br /&gt;
          DescriptorType      = 05&lt;br /&gt;
          bEndpointAddress    = 0x82&lt;br /&gt;
          bmAttributes        = 0x02&lt;br /&gt;
          wMaxPacketSize      = 64&lt;br /&gt;
          bInterval           = 0&lt;br /&gt;
          bRefresh            = 7&lt;br /&gt;
          bSynchAddress       = 5&lt;br /&gt;
&lt;br /&gt;
        [Endpoint Descriptor]&lt;br /&gt;
        ----------------------------------------------&lt;br /&gt;
          Length              =  7&lt;br /&gt;
          DescriptorType      = 05&lt;br /&gt;
          bEndpointAddress    = 0x83&lt;br /&gt;
          bmAttributes        = 0x02&lt;br /&gt;
          wMaxPacketSize      = 64&lt;br /&gt;
          bInterval           = 0&lt;br /&gt;
          bRefresh            = 7&lt;br /&gt;
          bSynchAddress       = 5&lt;br /&gt;
&lt;br /&gt;
        [Endpoint Descriptor]&lt;br /&gt;
        ----------------------------------------------&lt;br /&gt;
          Length              =  7&lt;br /&gt;
          DescriptorType      = 05&lt;br /&gt;
          bEndpointAddress    = 0x84&lt;br /&gt;
          bmAttributes        = 0x02&lt;br /&gt;
          wMaxPacketSize      = 64&lt;br /&gt;
          bInterval           = 0&lt;br /&gt;
          bRefresh            = 7&lt;br /&gt;
          bSynchAddress       = 5&lt;br /&gt;
&lt;br /&gt;
        [Endpoint Descriptor]&lt;br /&gt;
        ----------------------------------------------&lt;br /&gt;
          Length              =  7&lt;br /&gt;
          DescriptorType      = 05&lt;br /&gt;
          bEndpointAddress    = 0x85&lt;br /&gt;
          bmAttributes        = 0x02&lt;br /&gt;
          wMaxPacketSize      = 64&lt;br /&gt;
          bInterval           = 0&lt;br /&gt;
          bRefresh            = 0&lt;br /&gt;
          bSynchAddress       = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Related links ==&lt;br /&gt;
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/spreadsheets/d/1-c1tXfOMvaWuno3ixQyI_rPCQVAZA24N4v9OPZUSrCk/edit?usp=sharing Compilation of Xbox Controller Hardware Research]&lt;/div&gt;</summary>
		<author><name>JohnVeness</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=Talk:Xbox_DVD_Movie_Playback_Kit&amp;diff=6975</id>
		<title>Talk:Xbox DVD Movie Playback Kit</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=Talk:Xbox_DVD_Movie_Playback_Kit&amp;diff=6975"/>
				<updated>2022-01-31T09:35:55Z</updated>
		
		<summary type="html">&lt;p&gt;JohnVeness: Created page with &amp;quot;== Roms == I have an X08-25387 from which I could probably dump the ROM. Is there a repository somewhere to upload/store them? Also, what is the &amp;quot;Version&amp;quot; in the wiki table (a...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Roms ==&lt;br /&gt;
I have an X08-25387 from which I could probably dump the ROM. Is there a repository somewhere to upload/store them? Also, what is the &amp;quot;Version&amp;quot; in the wiki table (always seems to be 1.1)? --[[User:JohnVeness|JohnVeness]] ([[User talk:JohnVeness|talk]]) 09:35, 31 January 2022 (UTC)&lt;/div&gt;</summary>
		<author><name>JohnVeness</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=Xbox_DVD_Movie_Playback_Kit&amp;diff=6974</id>
		<title>Xbox DVD Movie Playback Kit</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=Xbox_DVD_Movie_Playback_Kit&amp;diff=6974"/>
				<updated>2022-01-26T16:42:20Z</updated>
		
		<summary type="html">&lt;p&gt;JohnVeness: /* References */ Added MS link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Xbox-Remote-and-Receiver.jpg|thumb|200px|Remote and Receiver]]&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
The DVD Movie Playback Kit contains 2 parts: A remote and a dongle for the Xbox{{FIXME|reason=One of these parts, or both, seem to have a model number PG8012?}}.&lt;br /&gt;
&lt;br /&gt;
== Remote Control ==&lt;br /&gt;
&lt;br /&gt;
=== Infrared interface ===&lt;br /&gt;
&lt;br /&gt;
{{FIXME|reason=Missing info about light frequency, timing, possible preamble and more}}&lt;br /&gt;
&lt;br /&gt;
{{FIXME|reason=The following information has been derived from http://lirc.sourceforge.net/remotes/microsoft/Xbox and all logic was extrapolated; it's entirely unconfirmed}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct {&lt;br /&gt;
  uint8_t check_high; // 8 bit check&lt;br /&gt;
  uint8_t check_low__data_high; // 4 bit check, 4 bit data&lt;br /&gt;
  uint8_t data_low; // 8 bit data&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first part of the transfer consists of the negated data signal (&amp;lt;code&amp;gt;check&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
The data integrity can be confirmed by XOR-ing both parts:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
check = (check_high &amp;lt;&amp;lt; 4) | check_low&lt;br /&gt;
data = (data_high &amp;lt;&amp;lt; 8) | data_low&lt;br /&gt;
check ^ data = 0xFFF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;check&amp;lt;/code&amp;gt;, which marks the start of the transfer{{FIXME|reason=There might be a preamble}}, always starts with 0b0101, therefore the &amp;lt;code&amp;gt;data&amp;lt;/code&amp;gt; always starts with 0b1010.&lt;br /&gt;
&lt;br /&gt;
== Dongle ==&lt;br /&gt;
&lt;br /&gt;
The dongle contains a ROM with an XBE which provides some functions for the DVD playback application. However, the XBE is not standalone.&lt;br /&gt;
&lt;br /&gt;
Why would they not just put this little &amp;lt; 512kiB library on the harddisk? Why another ROM which contains the program?&lt;br /&gt;
One could think it is to allow them to upgrade the application easily, but the real reason seems to be different: licensing. As the label on the back notes: &amp;quot;Made under license from Dolby Laboratories&amp;quot;. By including the software in the DVD Remote kit, they didn't have to pay the [[wikipedia:DVD Forum|DVD Forum]] (and apparently also Dolby) for every Xbox sold, but just for every DVD Remote kit sold[https://www.youtube.com/watch?v=gquAV8f7OAY&amp;amp;t=2059]. This allowed them to keep the cost of the Xbox down.&lt;br /&gt;
&lt;br /&gt;
Additionally the dongle contains an IR receiver to receive commands from the Remote control.&lt;br /&gt;
&lt;br /&gt;
=== Known versions ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &amp;lt;!-- Version is: &amp;quot;%X.%X&amp;quot; % (version &amp;gt;&amp;gt; 8, version &amp;amp; 0xFF) --&amp;gt;&lt;br /&gt;
! Part No.      !! Manufactured in !! Version !! DVD Region !! ROM Size     !! ROM SHA1                                              !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| X08-25402     || Indonesia       || 1.1     || 2          || 229790 Bytes || &amp;lt;code&amp;gt;70d4b5f8e073b05610fba9e9617d7356196b61ff&amp;lt;/code&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
| X08-25402-002 || Indonesia       || 1.1     ||2           || 229790 Bytes || &amp;lt;code&amp;gt;70d4b5f8e073b05610fba9e9617d7356196b61ff&amp;lt;/code&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
| X08-25387     || Indonesia       ||         ||            ||              ||                                                       ||&lt;br /&gt;
|-&lt;br /&gt;
| X08-25387-002 || Indonesia       || 1.1     || 1          || 229790 Bytes || &amp;lt;code&amp;gt;73814aa736d83d636380f5c6b1c291441b35354d&amp;lt;/code&amp;gt; || Sticker: &amp;quot;2341P&amp;quot; on PCB&lt;br /&gt;
|-&lt;br /&gt;
| X08-25597     || Indonesia       || 1.1     || 4          || 229790 Bytes || &amp;lt;code&amp;gt;1E6D7F4F526B56527447AA09EDA41FFF05665A16&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| X08-96288-002 || Indonesia       || 1.1     || 3          || 229790 Bytes || &amp;lt;code&amp;gt;0447373BF9326DFF95808CD028ED19FACD54C759&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== USB Protocol ===&lt;br /&gt;
&lt;br /&gt;
==== USB Descriptor ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bus 001 Device 002: ID 045e:0284 Microsoft Corp. Xbox DVD Playback Kit&lt;br /&gt;
Couldn't open device, some information will be missing&lt;br /&gt;
Device Descriptor:&lt;br /&gt;
  bLength                18&lt;br /&gt;
  bDescriptorType         1&lt;br /&gt;
  bcdUSB               1.10&lt;br /&gt;
  bDeviceClass            0 &lt;br /&gt;
  bDeviceSubClass         0 &lt;br /&gt;
  bDeviceProtocol         0 &lt;br /&gt;
  bMaxPacketSize0        64&lt;br /&gt;
  idVendor           0x045e Microsoft Corp.&lt;br /&gt;
  idProduct          0x0284 Xbox DVD Playback Kit&lt;br /&gt;
  bcdDevice            0.0a&lt;br /&gt;
  iManufacturer           0 &lt;br /&gt;
  iProduct                0 &lt;br /&gt;
  iSerial                 0 &lt;br /&gt;
  bNumConfigurations      1&lt;br /&gt;
  Configuration Descriptor:&lt;br /&gt;
    bLength                 9&lt;br /&gt;
    bDescriptorType         2&lt;br /&gt;
    wTotalLength       0x0022&lt;br /&gt;
    bNumInterfaces          2&lt;br /&gt;
    bConfigurationValue     1&lt;br /&gt;
    iConfiguration          0 &lt;br /&gt;
    bmAttributes         0x00&lt;br /&gt;
      (Missing must-be-set bit!)&lt;br /&gt;
      (Bus Powered)&lt;br /&gt;
    MaxPower                0mA&lt;br /&gt;
    Interface Descriptor:&lt;br /&gt;
      bLength                 9&lt;br /&gt;
      bDescriptorType         4&lt;br /&gt;
      bInterfaceNumber        0&lt;br /&gt;
      bAlternateSetting       0&lt;br /&gt;
      bNumEndpoints           1&lt;br /&gt;
      bInterfaceClass        88 Xbox&lt;br /&gt;
      bInterfaceSubClass     66 Controller&lt;br /&gt;
      bInterfaceProtocol      0 &lt;br /&gt;
      iInterface              0 &lt;br /&gt;
      Endpoint Descriptor:&lt;br /&gt;
        bLength                 7&lt;br /&gt;
        bDescriptorType         5&lt;br /&gt;
        bEndpointAddress     0x81  EP 1 IN&lt;br /&gt;
        bmAttributes            3&lt;br /&gt;
          Transfer Type            Interrupt&lt;br /&gt;
          Synch Type               None&lt;br /&gt;
          Usage Type               Data&lt;br /&gt;
        wMaxPacketSize     0x0008  1x 8 bytes&lt;br /&gt;
        bInterval              16&lt;br /&gt;
    Interface Descriptor:&lt;br /&gt;
      bLength                 9&lt;br /&gt;
      bDescriptorType         4&lt;br /&gt;
      bInterfaceNumber        1&lt;br /&gt;
      bAlternateSetting       0&lt;br /&gt;
      bNumEndpoints           0&lt;br /&gt;
      bInterfaceClass        89 &lt;br /&gt;
      bInterfaceSubClass      0 &lt;br /&gt;
      bInterfaceProtocol      0 &lt;br /&gt;
      iInterface              0 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====  Infrared signals ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- The following information has been derived from http://lirc.sourceforge.net/remotes/microsoft/lircd.conf.xbox + own research --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When infrared signals are received from the Remote Control, they can be read using an interrupt transfer {{FIXME|reason=What interface etc?}}. Each USB payload is 6 bytes long:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct {&lt;br /&gt;
  uint8_t unk; // always 0x00 (These could be length high bits?)&lt;br /&gt;
  uint8_t length_low; // always 0x06&lt;br /&gt;
  uint8_t data_low;&lt;br /&gt;
  uint8_t data_high; // only lower 4 bit are used (Always 0x0A with offical Microsoft remote)&lt;br /&gt;
  // Milliseconds since last press (will clamp to 0xFFFF when no button was pressed in a long time).&lt;br /&gt;
  // A value close to 0x0040 is returned for continously holding a button.&lt;br /&gt;
  // When holding, the value often goes back and forth between 0x0040 / 0x0041.&lt;br /&gt;
  // It is unknown if the receiver / remote intentionally does this.&lt;br /&gt;
  uint8_t timer_low;&lt;br /&gt;
  uint8_t timer_high;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When holding two or more buttons at once on the remote the IR receiver stops sending interrupt transfers. The last transfer will be the first button pressed.&lt;br /&gt;
&lt;br /&gt;
The keycodes read from an official Microsoft IR remote are as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Button&lt;br /&gt;
!data_low&lt;br /&gt;
!data_high&lt;br /&gt;
|-&lt;br /&gt;
|INFO&lt;br /&gt;
|0xC3&lt;br /&gt;
|0x0A&lt;br /&gt;
|-&lt;br /&gt;
|9&lt;br /&gt;
|0xC6&lt;br /&gt;
|0x0A&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|0xC7&lt;br /&gt;
|0x0A&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|0xC8&lt;br /&gt;
|0x0A&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|0xC9&lt;br /&gt;
|0x0A&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|0xCA&lt;br /&gt;
|0x0A&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|0xCB&lt;br /&gt;
|0x0A&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|0xCC&lt;br /&gt;
|0x0A&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|0xCD&lt;br /&gt;
|0x0A&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|0xCE&lt;br /&gt;
|0x0A&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|0xCF&lt;br /&gt;
|0x0A&lt;br /&gt;
|-&lt;br /&gt;
|SELECT&lt;br /&gt;
|0x0B&lt;br /&gt;
|0x0A&lt;br /&gt;
|-&lt;br /&gt;
|UP&lt;br /&gt;
|0xA6&lt;br /&gt;
|0x0A&lt;br /&gt;
|-&lt;br /&gt;
|DOWN&lt;br /&gt;
|0xA7&lt;br /&gt;
|0x0A&lt;br /&gt;
|-&lt;br /&gt;
|RIGHT&lt;br /&gt;
|0xA8&lt;br /&gt;
|0x0A&lt;br /&gt;
|-&lt;br /&gt;
|LEFT&lt;br /&gt;
|0xA9&lt;br /&gt;
|0x0A&lt;br /&gt;
|-&lt;br /&gt;
|STOP&lt;br /&gt;
|0xE0&lt;br /&gt;
|0x0A&lt;br /&gt;
|-&lt;br /&gt;
|REVERSE&lt;br /&gt;
|0xE2&lt;br /&gt;
|0x0A&lt;br /&gt;
|-&lt;br /&gt;
|FORWARD&lt;br /&gt;
|0xE3&lt;br /&gt;
|0x0A&lt;br /&gt;
|-&lt;br /&gt;
|TITLE&lt;br /&gt;
|0xE5&lt;br /&gt;
|0x0A&lt;br /&gt;
|-&lt;br /&gt;
|PAUSE&lt;br /&gt;
|0xE6&lt;br /&gt;
|0x0A&lt;br /&gt;
|-&lt;br /&gt;
|PLAY&lt;br /&gt;
|0xEA&lt;br /&gt;
|0x0A&lt;br /&gt;
|-&lt;br /&gt;
|POWER&lt;br /&gt;
|0xD5&lt;br /&gt;
|0x0A&lt;br /&gt;
|-&lt;br /&gt;
|BACK&lt;br /&gt;
|0xD8&lt;br /&gt;
|0x0A&lt;br /&gt;
|-&lt;br /&gt;
|SKIP-&lt;br /&gt;
|0xDD&lt;br /&gt;
|0x0A&lt;br /&gt;
|-&lt;br /&gt;
|SKIP+&lt;br /&gt;
|0xDF&lt;br /&gt;
|0x0A&lt;br /&gt;
|-&lt;br /&gt;
|MENU&lt;br /&gt;
|0xF7&lt;br /&gt;
|0x0A&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====  Firmware download ====&lt;br /&gt;
&lt;br /&gt;
See https://github.com/XboxDev/dump-dvd-kit (PC Python based) or https://github.com/Ryzee119/Dongle_Dumper (Xbox homebrew).&lt;br /&gt;
&lt;br /&gt;
The firmware locatedn on the DVD dongle is accessed over USB by a vendor specific control request. &lt;br /&gt;
&lt;br /&gt;
The setup packet for the control transfer should have the below format:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &amp;lt;!-- Version is: &amp;quot;%X.%X&amp;quot; % (version &amp;gt;&amp;gt; 8, version &amp;amp; 0xFF) --&amp;gt;&lt;br /&gt;
! Field         !! Value !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| bmRequestType || 0xC1                 || Device-to-host / Vendor / Interface.&lt;br /&gt;
|-&lt;br /&gt;
| bRequest      || 1 or 2               || 1 = Request ROM info, 2 = Request ROM data.&lt;br /&gt;
|-&lt;br /&gt;
| wValue        || What 1024 byte chunk || 0 = the first 1024 bytes, 1 = Second 1024 bytes etc.&lt;br /&gt;
|-&lt;br /&gt;
| wIndex        || 1 (Normally)         || Should point to the bInterfaceNumber that has a bInterfaceClass of 0x59. That happens to be 1 on most DVD Playback dongles.&lt;br /&gt;
|-&lt;br /&gt;
| wLength       || Up to 1024           || Number of bytes to read from chunk set by wValue. Note the max value here is 1024. To read the next chunk, issue another setup packet with a new wValue.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
bRequest = 1 can be used to obtain the header of the ROM. This is a 6 byte header in the form:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct &lt;br /&gt;
{&lt;br /&gt;
    uint16_t version;  //The version of the embedded ROM&lt;br /&gt;
    uint32_t rom_size; //In bytes&lt;br /&gt;
} xremote_info_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The rom size can then be used with bRequest = 2 to obtain the entire ROM contents. It should be noted that the ROM header obtained with bRequest = 2 is also present at the first 6 bytes of the full ROM image. So it is possible to obtain the ROM header info with bRequest = 2 requesting the first 6 bytes.&lt;br /&gt;
&lt;br /&gt;
=== Components ===&lt;br /&gt;
&lt;br /&gt;
Different versions of the dongle seem to use different hardware internally.&lt;br /&gt;
&lt;br /&gt;
==== X08-25387-002 (PCB: &amp;quot;X01469-100&amp;quot;) ====&lt;br /&gt;
&lt;br /&gt;
* U1 ATMEL AT43USB352M-AC{{FIXME|reason=Can't find datasheet.. only for AT43USB351M-AC and AT43USB353M-AC; both of which have various differences}}&lt;br /&gt;
* U2 TSOP-1556&lt;br /&gt;
* U3 X393121C{{FIXME|reason=What is this? a ROM? how large?}}&lt;br /&gt;
&lt;br /&gt;
==== X08-25387 (PCB: &amp;quot;IR DONGLE REV B&amp;quot;) ====&lt;br /&gt;
[[File:X08-25387-Sticker.jpeg|thumb|200px|X08-25387 Rev B Sticker]]&lt;br /&gt;
[[File:IR_DONGLEREVB-FRNT.jpeg|thumb|200px|Front PCB of X08-25387]]&lt;br /&gt;
&lt;br /&gt;
* U3 MX23C4000TC-10&lt;br /&gt;
&lt;br /&gt;
{{FIXME|reason=Didn't get rear components photographed yet}}73814aa736d83d636380f5c6b1c291441b35354d&lt;br /&gt;
&lt;br /&gt;
==== Unknown version (PCB: &amp;quot;REV C.&amp;quot;) ====&lt;br /&gt;
&lt;br /&gt;
[[File:Xbox-linux-dvd-dongle-front.jpg|thumb|200px|Frontside]]&lt;br /&gt;
[[File:Xbox-linux-dvd-dongle-back.jpg|thumb|200px|Backside]]&lt;br /&gt;
&lt;br /&gt;
* U1 92163 [https://web.archive.org/web/20100617020513/http://www.st.com/ STMicroelectronics] &amp;amp;lt;[https://web.archive.org/web/20100617020513/http://www.st.com/stonline/books/pdf/docs/5521.pdf Datasheet]&amp;amp;gt;&lt;br /&gt;
: This big square IC on the backside is the microcontroller. STMicroelectronics describes it as &amp;quot;8/16-BIT FULL SPEED USB MCU FOR COMPOSITE DEVICES WITH 16 ENDPOINTS, 20K ROM, 2K RAM, I 2 C, SCI, &amp;amp;amp; MFT&amp;quot;. Since the program resides inside in its ROM, it is almost impossible to extract the program from inside.&lt;br /&gt;
&lt;br /&gt;
* U2 TSOP-1556 [https://web.archive.org/web/20100617020513/http://www.vishay.com/ Vishay Telefunken] &amp;amp;lt;[https://web.archive.org/web/20100617020513/http://www.vishay.com/docs/82029/82029.pdf Datasheet]&amp;amp;gt;&lt;br /&gt;
: This black box on the middle of the frontside is an integrated IR receiver. It filters the received infrared pulses and demodulates them. Its filter frequency is 56kHz, while 38kHz is standard for most remote controls. Therefore, chances are few other remotes will work with the Xbox receiver.&lt;br /&gt;
&lt;br /&gt;
* U3 MX23C4000TC-10 [https://web.archive.org/web/20100617020513/http://www.macronix.com/ Macronix] &amp;amp;lt;[https://web.archive.org/web/20100617020513/http://www.macronix.com/QuickPlace/hq/PageLibrary48256D9D002BA613.nsf/h_6057FA6682A90C3948256DCE0052D2D3/67DCB124F1BE4E7D48256DC50039AC31/$File/MX23C4000-4.2.pdf/?OpenElement Datasheet]&amp;amp;gt;&lt;br /&gt;
: This wide TSOP IC on the frontside could be the most interesting of all. It is a 4MBit mask ROM.&lt;br /&gt;
&lt;br /&gt;
* U4 HC574 [https://web.archive.org/web/20100617020513/http://www.ti.com/ Texas Instruments] &amp;amp;lt;[https://web.archive.org/web/20100617020513/http://focus.ti.com/lit/ds/symlink/sn74hc574.pdf Datasheet]&amp;amp;gt;&lt;br /&gt;
: This 20-pin standard logic IC is an octal D-flipflop, which splits the databus from the 92163 to 8 adress bits. This technique is very well known from the 8051 and other microcontrollers.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* [https://ibb.co/album/cmr5rF Pictures of X08-25387-002 including internals]&lt;br /&gt;
* [https://web.archive.org/web/20100617020513/http://www.xbox-linux.org/wiki/DVD-IR_Internals DVD-IR Internals]&lt;br /&gt;
* [https://www.betaarchive.com/wiki/index.php/Microsoft_KB_Archive/817041 Microsoft KB817041 document &amp;quot;Xbox: Description of the DVD Movie Playback Kit&amp;quot;]&lt;/div&gt;</summary>
		<author><name>JohnVeness</name></author>	</entry>

	</feed>