Xbox Live Communicator

From xboxdevwiki
Jump to: navigation, search

The Xbox Live Communicator is the headset which is used for Xbox Live.

Headset / Xbox Live Communicator
PCB Front
PCB Back

Hardware

Microsoft's Xbox Live communicators are equipped with a Micronas UAC 35xx USB Audio Codec. This audio codec features a RISC-based microcontroller that utilizes the V8-uRISC architecture, enabling a high level of versatility, allowing Microsoft to develop completely custom, Xbox-specific firmware. The microcontroller appears to contain 12KB of ROM that can be used if an external EEPROM is not present. When this EEPROM is present, its contents are copied to the audio codec upon bootup and is mapped over the internal ROM allow custom and updatable firmware. The EEPROM can be read and written over the USB protocol however these commands are not documented on public datasheets. Xbox Live Communicators have been found with and without an EEPROM present.

Removing the EEPROM from an Xbox Live Communicator (if present) causes it to revert to the stock firmware stored in ROM, which has shown to contain factory stock Micronas firmware. Consequently, it enumerates as a USB Audio Class compatible generic headset that is fully functional on a PC.

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]

Links