Difference between revisions of "Xbox Live Communicator"

From xboxdevwiki
Jump to: navigation, search
m (Add PCB images directly on-wiki, remove Imgur link)
(Protocol)
Line 5: Line 5:
  
 
== Protocol ==
 
== 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:
 +
<pre>n = 1000 / (sample_rate % 1000)</pre>
 +
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)
 +
<pre>
 +
bmRequestType = Host-to-device | Vendor | Interface (0x41)
 +
bRequest = SET_FEATURE (0x03)
 +
wValue = 0x100 | sample_rate
 +
wIndex = 0x0000
 +
wLength = 0x0000
 +
</pre>
 +
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:
 +
<pre>
 +
bmRequestType = Host-to-device | Vendor | Interface (0x41)
 +
bRequest = SET_FEATURE (0x03)
 +
wValue = 0x0001 or 0x0000 (enable or disable?)
 +
wIndex = 0x0001
 +
wLength = 0x0000
 +
</pre>
 +
Where wValue = 0 or 1 to enable or disable this feature
  
 
=== USB Descriptor ===
 
=== USB Descriptor ===
 
 
<pre>
 
<pre>
 
Bus 003 Device 006: ID 045e:0283 Microsoft Corp. Xbox Communicator
 
Bus 003 Device 006: ID 045e:0283 Microsoft Corp. Xbox Communicator

Revision as of 06:07, 26 July 2022

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

Headset / Xbox Live Communicator
PCB Front
PCB Back

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