ChromeOS Compatible - Speakermic Specification v1.3
Stay organized with collections
Save and categorize content based on your preferences.
Version: 1.3
Last updated: 2024-09-06
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+Bluetooth
speaker-mic 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
- If it has any button, it has to be declared as an HID.
- The headset must meet the WWCB Firmware and Connector
requirements.
Software
Please refer to Audio Format.
For device have both input and output Audio Interface Descriptor.
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
.
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
.
- 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
- Must perform insert detect via one of:
General Bluetooth Requirements
Refer to ChromeOS Compatible - Bluetooth Specification.
| 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.
- 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.
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-09-06 |
1.3 |
ChromeOS Compatible spec derived. Initial Partner Site Publication. |
2022-09-14 |
1.2 |
Updated to v1.2. |
2022-08-19 |
1.1 |
Updated to v1.1. |
2022-08-18 |
1.0 |
Related WWCB specification created. |
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.
Last updated 2024-12-18 UTC.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2024-12-18 UTC."],[[["\u003cp\u003eThis specification outlines the requirements for ChromeOS Compatible USB+Bluetooth speaker-mics, excluding WWCB products and products certified with a Chromebook.\u003c/p\u003e\n"],["\u003cp\u003eUSB speaker-mics must adhere to security protocols for 2.4 GHz wireless dongles, firmware, connectors, audio formats, HID codes, and jack detection as detailed in the document.\u003c/p\u003e\n"],["\u003cp\u003eBluetooth speaker-mics should follow the guidelines in the ChromeOS Compatible - Bluetooth Specification.\u003c/p\u003e\n"],["\u003cp\u003eAll speaker-mics must meet audio quality standards, including mute functionality, latency requirements for playback, and A/V synchronization.\u003c/p\u003e\n"],["\u003cp\u003eSupported audio formats for playback and recording include a sample rate of 16 kHz or higher and S16_LE format.\u003c/p\u003e\n"]]],[],null,["Version: 1.3 \n\nLast updated: 2024-09-06\n\nLegend\n\n| Product Verb | Development Action |\n|--------------|-------------------------------|\n| \"MUST\" | Mandatory product requirement |\n| \"SHOULD\" | Optional recommendation |\n| \"MAY\" | Nice to have |\n\nOverview\n\nThis document describes the requirements a ChromeOS Compatible USB+Bluetooth\nspeaker-mic meets. This specification is not for WWCB products, nor for a\nproduct designed and certified together with a Chromebook.\n\nUSB\n\nSecurity\n\n2.4 GHz Wireless Dongle\n\n- The 2.4 GHz wireless device only auto-pairs with the receiver (dongle) that comes with the box.\n- 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.\n- 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.\n- If the pairing is implemented via an extension, the extension must *only* have access to USB ports. Content scripts are explicitly disallowed.\n\nFirmware and Connector\n\n- Headset must be declared as an audio device with a correct audio interface (0x01) descriptor.\n - There must be one corresponding descriptor for both input and output terminal.\n - It is recommended to report the USB Audio Class (UAC) terminal type\n - Headset [(0x0402)](https://www.usb.org/sites/default/files/termt10.pdf)\n - SpeakerPhone [(0x0403-0x0405)](https://www.usb.org/sites/default/files/termt10.pdf) .\n- If it has any button, it has to be declared as an HID.\n- The headset must meet the [WWCB Firmware and Connector\n requirements](https://drive.google.com/file/d/1vBuBlQCnYwEGMn36qVtz1TW05QTdSMUm/view?usp=sharing).\n\nSoftware\n\nFormat\n\nPlease refer to [Audio Format](#audio_format).\n\nFor device have both input and output Audio Interface Descriptor.\n\n- Example of Audio Interface Descriptor\n\n Interface Descriptor:\n bLength 9\n bDescriptorType 4\n bInterfaceNumber 2\n bAlternateSetting 0\n bNumEndpoints 0\n bInterfaceClass 1 Audio\n bInterfaceSubClass 2 Streaming\n bInterfaceProtocol 0\n iInterface 0\n\nIf the sample rates of the input and output are different, the device must be\nable to support playback and capture at different sample rates at the same time.\nOtherwise, the device must reflect the same value in the AudioStreaming\nInterface Descriptor -\\\u003e `tSamFreq`.\n\n- Example of 48k USB audio output sample rate\n\n AudioStreaming Interface Descriptor:\n bLength 11\n bDescriptorType 36\n bDescriptorSubtype 2 (FORMAT_TYPE)\n bFormatType 1 (FORMAT_TYPE_I)\n bNrChannels 2\n bSubframeSize 2\n bBitResolution 16\n bSamFreqType 1 Discrete\n tSamFreq[ 0] 48000\n Endpoint Descriptor:\n bLength 9\n bDescriptorType 5\n bEndpointAddress 0x02 EP 2 OUT(Output)\n bmAttributes 9\n Transfer Type Isochronous\n Synch Type Adaptive\n Usage Type Data\n\n- Example of 44.1k USB audio input sample rate\n\n AudioStreaming Interface Descriptor:\n bLength 11\n bDescriptorType 36\n bDescriptorSubtype 2 (FORMAT_TYPE)\n bFormatType 1 (FORMAT_TYPE_I)\n bNrChannels 2\n bSubframeSize 2\n bBitResolution 16\n bSamFreqType 1 Discrete\n tSamFreq[ 0] 44100\n Endpoint Descriptor:\n bLength 9\n bDescriptorType 5\n bEndpointAddress 0x81 EP 1 In(Input)\n bmAttributes 9\n Transfer Type Isochronous\n Synch Type Adaptive\n Usage Type Data\n\nHID Codes\n\n- For each HID event, it can only transmit one event once a time.\n- The correct event code and corresponding event code should be received when the button is pressed.\n - For example, increase the volume. [evtest](https://manpages.ubuntu.com/manpages/trusty/man1/evtest.1.html) can only observe one volume up event and the code must be `KEY_VOLUME_UP`.\n- 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\n specification](https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf).\n\nConsumer Page (0x0c)\n\n| Key Name | HID usage ID | Usage Type |\n|--------------------|--------------|------------|\n| `KEY_PLAY` | `0x0b0` | OOC |\n| `KEY_PAUSE` | `0x0b1` | OOC |\n| `KEY_NEXTSONG` | `0x0b5` | OSC |\n| `KEY_PREVIOUSSONG` | `0x0b6` | OSC |\n| `KEY_STOPCD` | `0x0b7` | OSC |\n| `KEY_PLAYPAUSE` | `0x0cd` | OSC |\n| `KEY_PREVIOUSSONG` | `0x0b6` | OSC |\n| `KEY_MUTE` | `0x0e2` | OOC |\n| `KEY_VOLUMEUP` | `0x0e9` | RTC |\n| `KEY_VOLUMEDOWN` | `0x0ea` | RTC |\n\nTelephony Page (0x0b)\n\n| Key Name | HID usage ID | Usage Type |\n|-------------|--------------|------------|\n| Hook Switch | `0x20` | OOC |\n| Ringer | `0x9e` | OOC |\n\nLED Page (0x08)\n\n| Key Name | HID usage ID | Usage Type |\n|----------|--------------|------------|\n| Mute | `0x09` | OOC |\n| Off-Hook | `0x17` | OOC |\n| Ring | `0x18` | OOC |\n\nJack Detection\n\nIf a USB device does not support USB Audio Class (UAC), it will always show an\noutput node in the ChromeOS system tray. However, if the USB device supports\nUAC, the system will be able to correctly detect a 3.5mm audio jack when the\ndevice is inserted.\n\n- CrOS Must use presence detection for 3.5mm jacks\n - Must perform insert detect via one of:\n - [UAC1](https://www.usb.org/document-library/audio-device-class-spec-basic-audio-devices-v10-and-adopters-agreement)\n - [UAC2](https://www.usb.org/document-library/audio-devices-rev-20-and-adopters-agreement)\n - [UAC3](https://www.usb.org/document-library/usb-audio-devices-rev-30-and-adopters-agreement)\n\nGeneral Bluetooth Requirements\n\nRefer to [ChromeOS Compatible - Bluetooth Specification](/chromeos/peripherals/cc-bluetooth-v1).\n\nAudio Format\n\n| | Playback | Recording |\n| Sample rate | ≥ 16 kHz | ≥ 16 kHz |\n| Format | S16_LE | S16_LE |\n|-------------|----------|-----------|\n\n- The channel number and configuration must be correct.\n- All sampling rates the headset declares supported must work correctly.\n - The deviation between measured rate and sampling rate must be ≤ 0.1% .\n - The standard error for linear regression of measured rate must be \\\u003c 30.\n- The headset must support playback or capture under different sample rates it\n asserts to support.\n\n For example, play audio under 44.1 kHz but capture voice under 48 kHz\n simultaneously.\n - Otherwise, it requires ChromeOS to add a specific configuration file to prevent it on the system side.\n\nAudio Quality\n\nCapture Path - Mute\n\n- If there is any interface for users to mute the audio device, it must\n - Maintain the mute state in a way that is not affected by:\n - Opening and closing the device.\n - Switching to another input device.\n- If the user presses the mute button on the headset or ChromeOS, the mute state must change.\n- If the mute state changes, the mute state indicator (eg:LED) on the headset must change.\n\nAudio Latency\n\nLatency\n\n- Output Latency\n - Audio playback must begin ≤500 ms after a user action that initiates playback.\n - May request a waiver if the device OEM can prove that no echo is introduced when it fails this requirement.\n\nA/V Sync\n\n- Audio playback should be synchronized with video playback. Audio playback may lead the video by ≤25 ms or trail the video by ≤95 ms.\n\nRevision History\n\n| Date | Version | Notes |\n|------------|---------|---------------------------------------------------------------------|\n| 2024-09-06 | 1.3 | ChromeOS Compatible spec derived. Initial Partner Site Publication. |\n| 2022-09-14 | 1.2 | Updated to v1.2. |\n| 2022-08-19 | 1.1 | Updated to v1.1. |\n| 2022-08-18 | 1.0 | Related WWCB specification created. |"]]