Inside Xbox Controller

This document describes the Xbox controller as a USB device. Readers are expected to have working knowledge on USB 1.1 and USB HID class.

Throughout this document, the term "controller" refers to the whole controller product and "gamepad" refers to the gamepad portion thereof (excluding the integrated hub and the memory unit slots).


The Xbox controller is in brief a USB compound device that consists of a USB gamepad and a two-port USB hub. The hub internally has three ports, to one of which the gamepad is attached. The other two ports are the memory unit slots; it means the memory unit is also a USB device (mass storage class). The USB cable and the memory unit connector carries five signals, four of which are standard USB signals and the rest is a clock signal(?). The extra signal is not used by the gamepad and the memory unit; it seems to be provided for upcoming expansion devices.

基本的にはUSBゲームパッドと2ポートUSBハブの複合デバイス。 ハブは内部的には3ポートで、内1つにゲームパッドがぶらさがる形になる。 残り2ポートはメモリーユニットスロット。 すなわちメモリーユニットもUSBデバイス(マスストレージクラス)である。 ケーブルとスロットコネクタはUSBの4ピンとクロック信号(?)の計5ピン。 この追加の信号はコントローラおよびメモリーユニットでは使っていない。 将来の拡張機器用と思われる。

You can connect the controller to a PC by ripping the cable and soldering a USB connector. However, the controller does not work either with the generic USB joystick driver or with the generic mass storage driver, because the interface class/subclass values are strange, the HID descriptor and the HID report descriptor are missing, and so on.

ケーブルを剥いてUSBコネクタをつなぐとPCに接続できるようになる。 しかしインタフェースのクラス・サブクラスの値が変だったり、 HIDデスクリプタ・レポートデスクリプタが存在しなかったりするので、 汎用のUSBジョイスティックドライバやマスストレージドライバでは動かない。

USB Device Model


Here are descriptor dumps of the hub, the gamepad and the memory unit.

Vendor/Product IDs

The vendor ID is 0x045e (Microsoft). Product IDs are as follows:

0x001cintegrated hub
0x0202gamepad (American)
0x0280memory unit
0x0284DVD remote receiver
0x0285gamepad (Japanese)

It is not recommended to distinguish Xbox gamepads by vendor/product IDs because third-party controllers may have their own vendor/product IDs.

Device Class

The gamepad has interface class 0x58 ('X'), subclass 0x42 ('B'), protocol 0x00. I believe this should be also common to third-party controllers, but I have no evidence. In fact the gamepad conforms to the HID class and behaves like a USB HID gamepad except that it lacks the HID descriptor and the HID report descriptor.

The memory unit has interface class 0x08 (mass storage), subclass 0x42 ('B'=???), protocol 0x50 (bulk-only). It seems to conform to the mass storage device class with bulk-only transport, though the "true" subclass must be revealed to access the unit.

HID Report Format

Input Report

The input report is 20-byte.

offset data
+0 0x00
+1 0x14 (size of the whole report)
+2 digital buttons
bit0 D-pad up
bit1 D-pad down
bit2 D-pad left
bit3 D-pad right
bit4 start button
bit5 back button
bit6 left stick press
bit7 right stick press
+3 0x00 (reserved for more digital buttons?)
+4 A button (*)
+5 B button (*)
+6 X button (*)
+7 Y button (*)
+8 black button (*)
+9 white button (*)
+10 L trigger (*)
+11 R trigger (*)
+12 left stick x (**)
+14 left stick y (**)
+16 right stick x (**)
+18 right stick y (**)

Output Report

The output report (rumble control) is 6-byte.

offset data
+0 0x00
+1 0x06 (size of the whole report)
+2 0x00
+3 left actuator (*)
+4 0x00
+5 right actuator (*)

(*) unsigned 8-bit

Example of HID Report Descriptor

The Xbox gamepad lacks the HID report descriptor that describes the input/output report formats. Based on the above report formats I have tried writing the report descriptor for your information. This is a mere example; neither official nor verified. Accuracy is not guaranteed.

Copyright (C) 2002 ITO Takayuki, All rights reserved.

To Top Page