page.title=Wired Audio Headset Specification (v1.1)
@jd:body

<!--
    Copyright 2015 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.
-->
<div id="qv-wrapper">
  <div id="qv">
    <h2>In this document</h2>
    <ol id="auto-toc">
    </ol>
  </div>
</div>

<p>This section specifies requirements for headsets and mobile devices to
function uniformly across the Android ecosystem.</p>

<h2 id="headset_accessory_plug_specifications">Headset accessory (plug)
specifications</h2>

<p>The following requirements apply to headset accessories.</p>

<h3 id="functions">Functions</h3>

<table style="width:50%">
 <tr>
    <th>Function</th>
    <th>Accessory Support</th>
 </tr>
 <tr>
    <td>Stereo Audio Out</td>
    <td>Required</td>
 </tr>
 <tr>
    <td>Audio in (Mic)</td>
    <td>Required</td>
 </tr>
 <tr>
    <td>Ground</td>
    <td>Required</td>
 </tr>
</table>

<h3 id="control-function_mapping">Control-function mapping</h3>

<table>
 <tr>
    <th style="width:33%">Control Function</th>
    <th style="width:33%">Accessory Support</th>
    <th style="width:33%">Description</th>
 </tr>
 <tr>
    <td>Function A</td>
    <td>Required</td>
    <td>Play/pause/hook (Short Press), Trigger Assist (Long Press), Next
    (Double Press)</td>
 </tr>
 <tr>
    <td>Function B</td>
    <td>Optional</td>
    <td>Vol+</td>
 </tr>
 <tr>
    <td>Function C</td>
    <td>Optional</td>
    <td>Vol-</td>
 </tr>
 <tr>
    <td>Function D</td>
    <td>Optional</td>
    <td>Reserved (Nexus devices use this to launch Voice Assist)
</td>
 </tr>
</table>

<p>Assign functions to buttons as follows:</p>

<ul>
  <li> All one-button headsets must implement Function A.
  <li> Headsets with multiple buttons must implement functions according to the
following pattern:
  <ul>
    <li> 2 functions: A and D
    <li> 3 functions: A, B, C
    <li> 4 functions: A, B, C, D
  </ul>
</ul>

<h3 id="mechanical">Mechanical</h3>

<table>
 <tr>
    <th style="width:33%">Function</th>
    <th style="width:33%">Accessory Support</th>
    <th style="width:33%">Notes</th>
 </tr>
 <tr>
    <td>4 conductor 3.5mm plug</td>
    <td>Required</td>
    <td>Ref: EIAJ-RC5325A standard</td>
 </tr>
 <tr>
    <td>CTIA pinout order (LRGM)</td>
    <td>Required</td>
    <td>Except in regions with legal requirements for OMTP pinout</td>
 </tr>
 <tr>
    <td>OMTP pinout order (LRMG)</td>
    <td>Optional</td>
    <td></td>
 </tr>
 <tr>
    <td>Microphone</td>
    <td>Required</td>
    <td>Must not be obstructed when operating headset controls</td>
 </tr>
</table>

<h3 id="electrical">Electrical</h3>

<table>
 <tr>
    <th style="width:33%">Function</th>
    <th style="width:33%">Accessory Support</th>
    <th style="width:33%">Description</th>
 </tr>
 <tr>
    <td>Ear speaker impedance</td>
    <td>16 ohms or higher</td>
    <td>Recommend 32 - 300 ohms</td>
 </tr>
 <tr>
    <td>Mic DC resistance</td>
    <td>1000 ohms or higher
</td>
    <td>Mic characteristics must be compliant with section 5.4 “Audio
    Recording” of the current
    <a href="{@docRoot}compatibility/android-cdd.pdf">Android CDD</a></td>
 </tr>
 <tr>
    <td rowspan="4">Control Function Equivalent impedance*</td>
    <td>0 ohm</td>
    <td>[Function A] Play/Pause/Hook</td>
 </tr>
 <tr>
    <td>240 ohm +/- 1% resistance</td>
    <td>[Function B]</td>
 </tr>
 <tr>
    <td>470 ohm +/- 1% resistance</td>
    <td>[Function C]</td>
 </tr>
 <tr>
    <td>135 ohm +/- 1% resistance</td>
    <td>[Function D]</td>
 </tr>
</table>

<p><em>*Total impedance from positive mic terminal to GND when button is
pressed with 2.2 V mic bias applied through 2.2 kOhm resistor</em></p>

<p>In the following diagrams, Button A maps to Function A, Button B to
Function B, and so on.</p>

<h3 id="reference_headsets">Reference headset test circuits</h3>

<p>The following diagram for Reference Headset Test Circuit 1 shows the CTIA
pinout for a 4-segment plug. For the OMTP pinout, switch the positions of the
MIC and GND segments.</p>

<img src="images/headset-circuit1.png" alt="Reference Headset Test Circuit 1" />
<p class="img-caption"><strong>Figure 1.</strong> Reference headset test circuit 1</p>

<p>The following diagram for Reference Headset Test Circuit 2 shows how the
actual resistor values (R1 - R4) are altered to meet this specification.</p>

<img src="images/headset-circuit2.png" alt="Reference Headset Test Circuit 2" />
<p class="img-caption"><strong>Figure 2.</strong> Reference headset test circuit 2</p>

<p>The actual resistance of the buttons parallel with the microphone (R1-R4) is
based on the microphone capsule resistance (Rmic) and the equivalent impedance
values (ReqA-ReqD). Use the following formula:</p>

<p><em>Rn=(Rmic*ReqN) / (ReqN-Rmic)</em></p>

<p>Where R<em>n</em> is the actual resistance of a button, Req<em>N</em> is the
equivalent impedance value of that button (provided), and Rmic is the
microphone impedance value.</p>

<p>The example above assumes a 5 kohm microphone impedance (Rmic); to achieve
an equivalent R4 impedance of 135 ohm (ReqD), the actual resistor value (R4)
must be 139 ohms.</p>

<h2 id="mobile_device_jack_specifications">Mobile device (jack) specifications</h2>

<p class="caution"><strong>Caution:</strong> To achieve compatibility with the
headset specification, devices that include a 4 conductor 3.5mm audio jack
must meet the following specifications. For Android compatibility requirements,
refer to the <em>Analog audio ports</em> section of the <a
href="{@docRoot}compatibility/android-cdd.pdf">Android CDD</a>.</p>

<h3 id="headset_jack_functions">Functions</h3>

<table>
 <tr>
    <th>Function</th>
    <th>Device Support</th>
 </tr>
 <tr>
    <td>Stereo Audio Out</td>
    <td>Required</td>
 </tr>
 <tr>
    <td>Audio in (Mic)</td>
    <td>Required</td>
 </tr>
 <tr>
    <td>Ground</td>
    <td>Required</td>
 </tr>
</table>

<h3 id="software_mapping">Software mapping</h3>

<table>
 <tr>
    <th style="width:33%">Function</th>
    <th style="width:33%">Device Support</th>
    <th style="width:33%">Description</th>
 </tr>
 <tr>
    <td>Function A control event</td>
    <td>Required</td>
    <td>input event KEY_MEDIA
<p>Android key KEYCODE_HEADSETHOOK</p></td>
 </tr>
 <tr>
    <td>Function D control event</td>
    <td>Required</td>
    <td>input event KEY_VOICECOMMAND
<p>Android key KEYCODE_VOICE_ASSIST</p></td>
 </tr>
 <tr>
    <td>Function B control event</td>
    <td>Required
</td>
    <td>input event KEY_VOLUMEUP
<p>Android key  VOLUME_UP</p></td>
 </tr>
 <tr>
    <td>Function C control event</td>
    <td>Required</td>
    <td>input event KEY_VOLUMEDOWN
<p>Android key VOLUME_DOWN</p></td>
 </tr>
 <tr>
    <td>Headset insertion detection</td>
    <td>Required</td>
    <td>input event SW_JACK_PHYSICAL_INSERT 7</td>
 </tr>
 <tr>
    <td rowspan="2">Headset type detection</td>
    <td>Mic</td>
    <td>input event SW_MICROPHONE_INSERT 4</td>
 </tr>
 <tr>
    <td>No Mic</td>
    <td>input event SW_HEADPHONE_INSERT 2</td>
 </tr>
 <tr>
    <td rowspan="2">Headset speaker impedance</td>
    <td>Required Headphone (low)</td>
    <td>Failure mode is to indicate headphones so limitation would be on</td>
 </tr>
 <tr>
    <td>Required Line In (high)</td>
    <td>input event SW_LINEOUT_INSERT 6</td>
 </tr>
</table>

<h3 id="mechanical11">Mechanical</h3>

<table>
 <tr>
    <th style="width:33%">Function</th>
    <th style="width:33%">Device Support</th>
    <th style="width:33%">Description</th>
 </tr>
 <tr>
    <td>4 conductor 3.5mm jack</td>
    <td>Required</td>
    <td></td>
 </tr>
 <tr>
    <td>CTIA pinout order (LRGM)</td>
    <td>Required</td>
    <td>3 Pin & Mono Plug Compatible</td>
 </tr>
 <tr>
    <td>OMTP pinout order (LRMG)</td>
    <td>Optional but strongly recommended</td>
    <td></td>
 </tr>
 <tr>
    <td>Headset detect sequence</td>
    <td>Required</td>
    <td>Plug insert notification must be triggered only after all contacts on
    plug are touching their relevant segments (this prevents unreliable headset
    detection due to slow insertion.</td>
 </tr>
</table>

<h3 id="electrical12">Electrical</h3>

<h4 id="general">General</h4>

<table>
 <tr>
    <th style="width:33%">Function</th>
    <th style="width:33%">Device Support</th>
    <th style="width:33%">Notes</th>
 </tr>
 <tr>
    <td>Maximum output voltage drive</td>
    <td>150mV</td>
    <td>&gt;= 150mV on 32 ohm
<p>Test conditions: EN50332-2</p></td>
 </tr>
 <tr>
    <td>Mic bias resistance</td>
    <td>Required</td>
    <td>Flexible on detection method used and microphone bias resistor
    selection. Require that all button resistance value ranges specified below
    be detected and related to their respective function</td>
 </tr>
 <tr>
    <td>Mic bias voltage</td>
    <td>1.8V - 2.9V</td>
    <td>To guarantee compatibility to common microphone capsules.</td>
 </tr>
</table>

<h4 id="function_impedance_and_threshold_detection">Function impedance and
threshold detection</h4>

<p>Devices must detect the following resistor ladder on the accessories. The
accessories will be tested to the standardized circuit diagram in the diagram
illustrated earlier (Reference Headset Test Circuit) where the total impedance
is measured from MIC terminal to GND when a button is pressed with 2.2V mic
bias applied through 2.2 kOhm resistor. This is the same effective resistance
as the button detection circuit with the microphone in parallel with the button
resistor.</p>

<table>
 <tr>
    <th style="width:40%">Button Impedance Level</th>
    <th style="width:20%">Device Support</th>
    <th style="width:40%">Notes</th>
 </tr>
 <tr>
    <td>70 ohm or less</td>
    <td>Required</td>
    <td>[Function A]</td>
 </tr>
 <tr>
    <td>110 - 180 ohm</td>
    <td>Required</td>
    <td>[Function D]</td>
 </tr>
 <tr>
    <td>210 - 290 ohm</td>
    <td>Required</td>
    <td>[Function B]</td>
 </tr>
 <tr>
    <td>360 - 680 ohm</td>
    <td>Required</td>
    <td>[Function C]</td>
 </tr>
 </table>

 <table>
 <tr>
    <th style="width:40%">Headset Speaker Impedance Level</th>
    <th style="width:20%">Device Support</th>
    <th style="width:40%">Notes</th>
 </tr>
 <tr>
    <td>Low Threshold Detection</td>
    <td>Required</td>
    <td>Headphone (low) &lt; 1 Kohm</td>
 </tr>
 <tr>
    <td>High Threshold Detection</td>
    <td>Required</td>
    <td>Line In (high) &gt; 5 Kohm</td>
 </tr>
</table>
