Version: 1.2.1
Last updated: 2024-06-21
Legend
Product Verb | Development Action |
---|---|
"MUST" | Mandatory product requirement |
"SHOULD" | Optional recommendation |
"MAY" | Nice to have |
Overview
This document describes the requirements a ChromeOS Compatible USB microphone meets. This specification is not for WWCB products, nor for a product designed and certified together with a Chromebook.
USB
Security
2.4 GHz Wireless Dongle
- The 2.4 GHz wireless device only auto-pairs with the receiver (dongle) that comes with the box.
- User action (either on the device or via an app) is required to pair headset with another receiver or pair new headset with existing receiver.
- If an app is required to alter headset/receiver pairing, the app must run on ChromeOS, such as via an extension. The app can also be a web app using WebUSB/WebHID.
- If the pairing is implemented via an extension, the extension must only have access to USB ports. Content scripts are explicitly disallowed.
Firmware and Connector
- Headset must be declared as an audio device with a correct audio interface
(0x01) descriptor.
- There must be one corresponding descriptor for both input and output
terminal.
- It is recommended to report the USB Audio Class (UAC) terminal type
- Headset (0x0402)
- SpeakerPhone (0x0403-0x0405) .
- It is recommended to report the USB Audio Class (UAC) terminal type
- There must be one corresponding descriptor for both input and output
terminal.
- If it has any button, it has to be declared as an HID.
- The headset must meet the WWCB Firmware and Connector requirements.
Software
Format
Please refer to Audio Format.
For device have both input and output Audio Interface Descriptor.
Example of Audio Interface Descriptor
Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 2 bAlternateSetting 0 bNumEndpoints 0 bInterfaceClass 1 Audio bInterfaceSubClass 2 Streaming bInterfaceProtocol 0 iInterface 0
If the sample rates of the input and output are different, the device must be
able to support playback and capture at different sample rates at the same time.
Otherwise, the device must reflect the same value in the AudioStreaming
Interface Descriptor -> tSamFreq
.
Example of 48k USB audio output sample rate
AudioStreaming Interface Descriptor: bLength 11 bDescriptorType 36 bDescriptorSubtype 2 (FORMAT_TYPE) bFormatType 1 (FORMAT_TYPE_I) bNrChannels 2 bSubframeSize 2 bBitResolution 16 bSamFreqType 1 Discrete tSamFreq[ 0] 48000 Endpoint Descriptor: bLength 9 bDescriptorType 5 bEndpointAddress 0x02 EP 2 OUT(Output) bmAttributes 9 Transfer Type Isochronous Synch Type Adaptive Usage Type Data
Example of 44.1k USB audio input sample rate
AudioStreaming Interface Descriptor: bLength 11 bDescriptorType 36 bDescriptorSubtype 2 (FORMAT_TYPE) bFormatType 1 (FORMAT_TYPE_I) bNrChannels 2 bSubframeSize 2 bBitResolution 16 bSamFreqType 1 Discrete tSamFreq[ 0] 44100 Endpoint Descriptor: bLength 9 bDescriptorType 5 bEndpointAddress 0x81 EP 1 In(Input) bmAttributes 9 Transfer Type Isochronous Synch Type Adaptive Usage Type Data
HID Codes
- For each HID event, it can only transmit one event once a time.
- The correct event code and corresponding event code should be received when
the button is pressed.
- For example, increase the volume.
evtest
can only observe one volume up event and the code must be
KEY_VOLUME_UP
.
- For example, increase the volume.
evtest
can only observe one volume up event and the code must be
- If there is any interface designed to provide following functionalities, the USB peripheral must support emitting or receiving the corresponding HID events according to USB.org HID specification.
Consumer Page (0x0c)
Key Name | HID usage ID | Usage Type |
---|---|---|
KEY_PLAY |
0x0b0 |
OOC |
KEY_PAUSE |
0x0b1 |
OOC |
KEY_NEXTSONG |
0x0b5 |
OSC |
KEY_PREVIOUSSONG |
0x0b6 |
OSC |
KEY_STOPCD |
0x0b7 |
OSC |
KEY_PLAYPAUSE |
0x0cd |
OSC |
KEY_PREVIOUSSONG |
0x0b6 |
OSC |
KEY_MUTE |
0x0e2 |
OOC |
KEY_VOLUMEUP |
0x0e9 |
RTC |
KEY_VOLUMEDOWN |
0x0ea |
RTC |
Telephony Page (0x0b)
Key Name | HID usage ID | Usage Type |
---|---|---|
Hook Switch | 0x20 |
OOC |
Ringer | 0x9e |
OOC |
LED Page (0x08)
Key Name | HID usage ID | Usage Type |
---|---|---|
Mute | 0x09 |
OOC |
Off-Hook | 0x17 |
OOC |
Ring | 0x18 |
OOC |
Jack Detection
If a USB device does not support USB Audio Class (UAC), it will always show an output node in the ChromeOS system tray. However, if the USB device supports UAC, the system will be able to correctly detect a 3.5mm audio jack when the device is inserted.
- CrOS Must use presence detection for 3.5mm jacks
Audio Format
Playback | Recording | |
---|---|---|
Sample rate | ≥ 16 kHz | ≥ 16 kHz |
Format | S16_LE | S16_LE |
- The channel number and configuration must be correct.
- All sampling rates the headset declares supported must work correctly.
- The deviation between measured rate and sampling rate must be ≤ 0.1% .
- The standard error for linear regression of measured rate must be < 30.
The headset must support playback or capture under different sample rates it asserts to support.
For example, play audio under 44.1 kHz but capture voice under 48 kHz simultaneously.
- Otherwise, it requires ChromeOS to add a specific configuration file to prevent it on the system side.
Audio Quality
Capture Path - Mute
- If there is any interface for users to mute the audio device, it must
- Maintain the mute state in a way that is not affected by:
- Opening and closing the device.
- Switching to another input device.
- Maintain the mute state in a way that is not affected by:
- If the user presses the mute button on the headset or ChromeOS, the mute state must change.
- If the mute state changes, the mute state indicator (eg:LED) on the headset must change.
Audio Latency
Latency
- Output Latency
- Audio playback must begin ≤500 ms after a user action that
initiates playback.
- May request a waiver if the device OEM can prove that no echo is introduced when it fails this requirement.
- Audio playback must begin ≤500 ms after a user action that
initiates playback.
A/V Sync
- Audio playback should be synchronized with video playback. Audio playback may lead the video by ≤25 ms or trail the video by ≤95 ms.
Revision History
Date | Version | Notes |
---|---|---|
2024-06-21 | 1.2.1 | ChromeOS Compatible spec derived. Initial Partner Site Publication. |
2022-09-01 | 1.2 | Related WWCB specification v1.2 |
2022-02-05 | 1.1 | Related WWCB specification v1.1 |
2021-01-12 | 1.0 | Related WWCB specification created. |