Difference between revisions of "Xbox Live Communicator"
m (added pic) |
(→Links) |
||
(6 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
The Xbox Live Communicator is the headset which is used for Xbox Live. | The Xbox Live Communicator is the headset which is used for Xbox Live. | ||
[[File:Xbox_Live_Communicator.png|thumb|200px|Headset / Xbox Live Communicator]] | [[File:Xbox_Live_Communicator.png|thumb|200px|Headset / Xbox Live Communicator]] | ||
+ | [[File:XBCommunicator-front.jpg|thumb|200px|PCB Front]] | ||
+ | [[File:XBCommunicator-back.jpg|thumb|200px|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 == | == 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 | ||
Line 89: | Line 131: | ||
{{FIXME}} | {{FIXME}} | ||
+ | |||
+ | ==== Links ==== | ||
+ | |||
+ | * [https://github.com/JayFoxRox/xbox-tools/tree/4bc808e187311010f850d7fbd9af4b76bed90727/communicator-tool Code for accessing the communicator microphone and speaker] | ||
+ | * [https://github.com/Ryzee119/Xblc_Dumper/blob/master/main.c Code for dumping the communicators internal memory (ROM/RAM)] | ||
+ | * [https://web.archive.org/web/20200521011406/http://www.kako.com/neta/2005-009/uac3556b.pdf Datasheet for UAC 3556B (close to the 3560B that the Xbox Communicator uses] |
Latest revision as of 07:25, 2 April 2024
The Xbox Live Communicator is the headset which is used for Xbox Live.
Contents
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]