Xbox Live Communicator
The Xbox Live Communicator is the headset which is used for Xbox Live.
Contents
Protocol
The Xbox Live Communicator (XBLC) is a a USB1.1 compliant device with two interfaces. One for Microphone and one for a mono speaker. The speaker and microphone interface each has a single isochronous endpoint. The speaker and microphone are differentiated by the direction of the isochronous endpoint in the Interface descriptor.
The headset supports the following audio sample rates (All at signed 16bit LE PCM samples). The units are in samples per second. The microphone and speaker cannot have separate sample rates.
- 8000
- 11025
- 16000
- 22050
- 24000
If a sample rate does not divide evenly into USB frame 1ms blocks, the Host Controller driver is responsible for adding an additional sample every n frames. The formula for calculating this is:
n = 1000 / (sample_rate % 1000)
For example at 11025 Hz, retail titles will add/request an extra sample every 40 USB frames.
USB Interface
Set Sample Rate
The Sample Rate for the speaker and microphone is set by a control transfer to endpoint 0 of the device. The transfer has the following format (Ref USB2 Spec 9.3)
bmRequestType = Host-to-device | Vendor | Interface (0x41) bRequest = SET_FEATURE (0x03) wValue = 0x100 | sample_rate wIndex = 0x0000 wLength = 0x0000
Where sample_rate = 0 for 8000, up to 4 for 24000.
Unknown Command
A secondary control transfer has been observed in retail titles, however its purpose is not clear. It is believed to be for enabling/disabling Auto Gain Control for the Microphone. The transfer has the following format:
bmRequestType = Host-to-device | Vendor | Interface (0x41) bRequest = SET_FEATURE (0x03) wValue = 0x0001 or 0x0000 (enable or disable?) wIndex = 0x0001 wLength = 0x0000
Where wValue = 0 or 1 to enable or disable this feature
USB Descriptor
Bus 003 Device 006: ID 045e:0283 Microsoft Corp. Xbox Communicator Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 1.10 bDeviceClass 0 bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 8 idVendor 0x045e Microsoft Corp. idProduct 0x0283 Xbox Communicator bcdDevice 1.58 iManufacturer 0 iProduct 0 iSerial 0 bNumConfigurations 1 Configuration Descriptor: bLength 9 bDescriptorType 2 wTotalLength 45 bNumInterfaces 2 bConfigurationValue 1 iConfiguration 0 bmAttributes 0x80 (Bus Powered) MaxPower 100mA Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 0 bNumEndpoints 1 bInterfaceClass 120 bInterfaceSubClass 0 bInterfaceProtocol 0 iInterface 0 Endpoint Descriptor: bLength 9 bDescriptorType 5 bEndpointAddress 0x04 EP 4 OUT bmAttributes 5 Transfer Type Isochronous Synch Type Asynchronous Usage Type Data wMaxPacketSize 0x0030 1x 48 bytes bInterval 1 bRefresh 0 bSynchAddress 0 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 1 bAlternateSetting 0 bNumEndpoints 1 bInterfaceClass 120 bInterfaceSubClass 0 bInterfaceProtocol 0 iInterface 0 Endpoint Descriptor: bLength 9 bDescriptorType 5 bEndpointAddress 0x85 EP 5 IN bmAttributes 5 Transfer Type Isochronous Synch Type Asynchronous Usage Type Data wMaxPacketSize 0x0030 1x 48 bytes bInterval 1 bRefresh 0 bSynchAddress 0 can't get debug descriptor: Resource temporarily unavailable Device Status: 0x0000 (Bus Powered)
Microphone
[FIXME]
Speaker
[FIXME]