There's a basic description of the Xbox 360 controller protocol here: http://tattiebogle.net/index.php/ProjectRoot/Xbox360Controller/UsbInfo
Quick breakdown: The controller is a USB device with a USB class 255, subclass 255, protocol 255 (all indicating "vendor-specific"). It has several interfaces, including a gamepad (which might be close to standard HID but with a custom descriptor number, I'm not sure), audio (for headset), and a security device. The security device is only important when interfacing the controller to an Xbox 360, since it's used to determine if the controller is licensed by Microsoft. When using the controller on a different system, the security device can be ignored.
For a more comprehensive description, check the Linux kernel. It has a driver for original Xbox and Xbox 360 controllers, and as of the upcoming 3.17 release, basic support for Xbox One controllers. (No rumble or LED support yet, but input works.)
Quick breakdown: The controller is a USB device with a USB class 255, subclass 255, protocol 255 (all indicating "vendor-specific"). It has several interfaces, including a gamepad (which might be close to standard HID but with a custom descriptor number, I'm not sure), audio (for headset), and a security device. The security device is only important when interfacing the controller to an Xbox 360, since it's used to determine if the controller is licensed by Microsoft. When using the controller on a different system, the security device can be ignored.
For a more comprehensive description, check the Linux kernel. It has a driver for original Xbox and Xbox 360 controllers, and as of the upcoming 3.17 release, basic support for Xbox One controllers. (No rumble or LED support yet, but input works.)