blob: cd5b36afbe4d889dbc12385725368c3e172a1e52 [file] [log] [blame]
<html devsite>
<head>
<title>USB Headset: Accessory Specification</title>
<meta name="project_path" value="/_project.yaml" />
<meta name="book_path" value="/_book.yaml" />
</head>
<body>
<!--
Copyright 2017 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<p>
This documentation specifies some characteristics of USB headsets, so that
they function uniformly across the Android ecosystem. Only headsets with
digital USB audio interface are permitted. Purely analog headsets with
mechanical adaptation to USB-C are not permitted, as per USB Type-C
specification.
</p>
<p>
This documentation specifies the minimum requirements: accessory manufacturers
are encouraged to add features while keeping these requirements in mind.
</p>
<h2 id="functional-overview">Functional overview</h2>
<p>
USB headsets can implement a variety of basic and advanced features. This
specification only covers mandated basic features:
</p>
<ul>
<li>Stereo output</li>
<li>Optional, but recommended, microphone</li>
<li>Function buttons for volume, playback, and call control</li>
</ul>
<h2 id="terminal-types">USB Audio Class terminal types</h2>
<p>
Headphones and headsets must report these USB Audio Class (UAC) terminal types:
</p>
<ul>
<li><strong>Headphones</strong>. Low impedance transducers, &lt; 100 ohms, no
microphone: 0x0302</li>
<li><strong>Headset</strong>. Low impedance transducers with microphone: 0x0402</li>
</ul>
<h2 id="control-function">Control functions</h2>
<p>Headsets can come with varying number of buttons to control specific
functions, such as volume and play/pause.<p>
<table>
<tr>
<th>Control function</th>
<th>Accessory Support</th>
<th>Description</th>
</tr>
<tr>
<td>A</td>
<td>Required</td>
<td>Play/pause (short press), launch voice command (long press), next (double
press)</td>
</tr>
<tr>
<td>B</td>
<td>Optional</td>
<td>Vol+</td>
</tr>
<tr>
<td>C</td>
<td>Optional</td>
<td>Vol-</td>
</tr>
<tr>
<td>D</td>
<td>Optional</td>
<td>Launch voice command</td>
</tr>
</table>
<p>
<strong>Assign functions to buttons as follows:</strong>
</p>
<ul>
<li>All one-button headsets must implement Function A.</li>
<li>Headsets with multiple buttons must implement functions according to the
following pattern:
<ul>
<li>2 functions: A and D</li>
<li>3 functions: A, B, C</li>
<li>4 functions: A, B, C, D</li>
</ul>
</li>
</ul>
<p class="note">
<strong>Note</strong>: No key latching allowed. Each key press by the end user
must generate the corresponding "down" and "up" key event, matching the end user
action. In other words, the keys for functions A through D are never "latched"
or implemented to be used as a toggle (where the "up" event only follows "down"
on a second key press).
</p>
<h2 id="software-mapping">Software mapping</h2>
<p>
Compatible USB headsets are required to support the following software mappings
for the headset buttons. Devices match these HID mappings with the appropriate
Android keycode.
</p>
<table>
<tr>
<th>Function</th>
<th>Mappings</th>
</tr>
<tr>
<td>A</td>
<td>HID usage page: 0x0C<br>
HID usage: 0x0CD </td>
</tr>
<tr>
<td>B </td>
<td>HID usage page: 0x0C<br>
HID usage: 0x0E9</td>
</tr>
<tr>
<td>C</td>
<td>HID usage page: 0x0C<br>
HID usage: 0x0EA</td>
</tr>
<tr>
<td>D </td>
<td>HID usage page: 0x0C<br>
HID usage: 0x0CF</td>
</tr>
</table>
<p class="note">Key mappings should be declared within a HID application
collection. For accessories without a microphone, use Headphone (Usage
Page: Consumer (0x0C), Usage: Headphone (0x05)). For accesories with a
microphone, use Headset (Usage Page: Telephony (0x0B), Usage: Headset (0x05)).</p>
<h2 id="output-level">Output level</h2>
<p>
The maximum sound pressure level shall comply to any regulatory requirement in
the country of destination.
</p>
<h2 id="mechanical">Mechanical</h2>
<p>
Accessory manufacturers must follow the requirements for USB connectors
as specified by <a href="http://www.usb.org/">USB.org</a>.
</p>
</body>
</html>