page.title=Accessory Development Kit 2012 Guide
page.tags=adk
@jd:body

<div id="qv-wrapper">
  <div id="qv">
    <h2>In this document</h2>
    <ol>
      <li><a href="#components">Components</a></li>
      <li><a href="#clock">Using the Alarm Clock</a></li>
      <li><a href="#play-audio">Playing Audio</a></li>
      <li><a href="#dev">Developing Accessories with ADK 2012</a>
        <ol>
          <li><a href="#src-download">Downloading the ADK Source</a></li>
          <li><a href="#dev-setup">Setting Up the Development Environment</a></li>
          <li><a href="#alt-build">Using the ADK Alternative Build System</a></li>
        </ol>
      </li>
      <li><a href="#adk-conn">How the ADK Connects with Android Devices</a>
        <ol>
          <li><a href="#adk-conn-bt">ADK Connection over Bluetooth</a></li>
          <li><a href="#adk-conn-usb">ADK Connection over USB</a></li>
        </ol>
      </li>
      <li><a href="#audio-dock">USB Audio Dock Implementation</a></li>
    </ol>

    <h2>See also</h2>
    <ol>
      <li><a href="https://developers.google.com/events/io/sessions/gooio2012/128/">
        Google I/O Session Video</a></li>
      <li><a href="http://source.android.com/tech/accessories/aoap/aoa.html">
        Android Open Accessory Protocol</a></li>
      <li><a href="http://source.android.com/tech/accessories/aoap/aoa2.html">
        Android Open Accessory Protocol 2.0</a></li>
      <li><a href="{@docRoot}guide/topics/connectivity/usb/accessory.html">
        USB Accessory Dev Guide</a></li>
    </ol>
  </div>
</div>

<p>The Android Accessory Development Kit (ADK) for 2012 is the latest reference implementation of an
<a href="http://source.android.com/tech/accessories/index.html">Android Open Accessory</a> device,
designed to help Android hardware accessory builders and software developers create accessories
for Android. The ADK 2012 is based on the <a href="http://arduino.cc">Arduino</a> open source
electronics prototyping platform, with some hardware and software extensions that allow it to
communicate with Android devices.</p>

<p>A limited number of these kits were produced and distributed at the Google I/O 2012 developer
conference. If you did not receive one of these kits, fear not! The specifications and design files
for the hardware were also released for use by manufacturers and hobbyists. You should expect to see
kits with similar features available for purchase, or you can build one yourself!</p>

<p>One of the important new features demonstrated by this ADK is the ability to play audio over a
USB connection. Be sure to check out the <a href="#audio-dock">reference implementation</a> of a USB
audio dock in this ADK if you are interested in making audio-related USB accessories for
Android.</p>

<h2 id="components">Components</h2>

<p>The ADK 2012 is based on the Arduino open source electronics prototyping platform and is an open
hardware design. The hardware design files and firmware source code are included with the ADK
software download. The ADK contains two main physical hardware components:</p>

<ol>
  <li>Main processing board containing the microprocessor, USB connections, power connector and
input/output pins. This board can be removed and used separately from the rest of the hardware.</li>
  <li>Shield containing sensors, LEDs, input controls, audio amplifier and speaker output, contained
in a custom, polygon box enclosure.</li>
</ol>

<p>The main hardware features of the ADK are as follows:</p>

<ul>
  <li>An ARM 32-bit Cortex M3 micro-processor</li>
  <li>Separate USB connections for an Android device and computer connection for programming and
debugging</li>
  <li>Sensors for light, color, proximity, temperature, humidity, barometric pressure, and
acceleration</li>
  <li>Micro SD Card slot</li>
  <li>Bluetooth support</li>
</ul>

<p>The ADK comes preloaded with an alarm clock firmware program that you can use immediately. A
companion Android application, <a
href="https://play.google.com/store/apps/details?id=com.google.android.apps.adk2">ADK 2012</a>, is
available on Google Play. The source code for both the Android application and the ADK firmware (an
Arduino sketch) can be downloaded from this page.</p>

<p>The ADK 2012 also comes with additional parts to help you develop accessories with it,
including:</p>

<ul>
  <li>AC power adapter</li>
  <li>USB A to Micro USB B connector cable</li>
  <li>Micro USB B to Micro USB AB connector (small, rectangular plug)</li>
  <li>Micro SD Card, preinstalled in the ADK SD Card socket</li>
</ul>

<h2 id="clock">Using the Alarm Clock</h2>

<p>An alarm clock program comes preloaded on the ADK. This firmware program allows you to use the
ADK as an alarm clock.</p>

<p>To use the ADK as an alarm clock:</p>

<ol>
  <li>Open up the ADK by gently squeezing the two widest faces of the enclosure.</li>
  <li>Attach the provided AC power adapter (round connector) to the main ADK board, or attach a USB
cable to the port marked <strong>Computer</strong> and a USB port on your computer.</li>
  <li>Place and hold your fingertip over the clock symbol on the control face.
    <p class="note"><strong>Note:</strong> You may need to hold your finger in place for 1-2
seconds.</p>
  </li>
  <li>Use the plus (+) and minus (-) symbols inside the clock digits to set the correct time.</li>
  <li>Place your fingertip over the alarm clock symbol to activate alarm setting.</li>
  <li>Use the plus (+) and minus (-) symbols inside the clock digits to set the alarm time.</li>
  <li>Use the plus (+) and minus (-) symbols inside the last two clock digits to turn the alarm on
({@code on}) or off ({@code oF}).</li>
  <li>To set the alarm tone, place and hold your fingertip over the alarm clock symbol, then tap the
slider control on top of the enclosure.</li>
</ol>

<p>To use the <strong>ADK 2012</strong> companion application for the alarm clock:</p>

<ol>
  <li>Load the companion application on your Android device running Android 3.1 (API Level 12) or
higher:
    <ul>
      <li>Using an NFC-enabled Android device, unlock and hold the device against the left side of
the ADK enclosure. Follow the prompts to install the app.
      <br>- or -</li>
      <li>Start Google Play on your device, search for the <strong>ADK 2012</strong> application and
install it. If you cannot find the app, your device is not compatible. Try installing on another
device.</li>
    </ul>
  </li>
  <li>Connect your Android device to the ADK using one of the following methods:
    <ul>
      <li id="conn-bt">To connect using Bluetooth:
        <ol>
          <li>Plug the AC power adapter into the ADK.</li>
          <li>On your Android device, turn Bluetooth On (<strong>Settings >
Bluetooth</strong>).</li>
          <li>In the <strong>Settings</strong> page, press the <strong>Bluetooth</strong> option to
view paired devices.</li>
          <li>Select <strong>Search for Devices</strong> to locate the ADK 2012 accessory and follow
the on screen instructions to connect.</li>
          <li>After pairing is complete, start the <strong>ADK 2012</strong> app on your Android
device.</li>
          <li>On the start screen, select the <strong>Use Bluetooth</strong> button.</li>
          <li>In the list of paired devices, select the <strong>ADK 2012</strong> device.</li>
          <li>The <strong>ADK 2012</strong> app should switch to the menu screen and you can start
interacting with the ADK accessory.</li>
        </ol>
      </li>

      <li id="conn-usb">To connect using USB:
        <ol>
          <li>Plug the AC power adapter into the ADK.</li>
          <li>Connect the Micro USB AB connector (small, rectangular plug) to the port labeled
<strong>Phone</strong> on the ADK board.</li>
          <li>Unlock your Android device and connect the Micro USB B connector to your device.
            <p class="note"><strong>Note:</strong> Your device must support Android USB accessory
mode. Devices that support this mode include Google Nexus devices.</p>
          </li>
          <li>On the Android device, you should see a prompt to connect to the <strong>ADK DemoKit
2012</strong>, select <strong>OK</strong>.</li>
          <li>The <strong>ADK 2012</strong> app should start automatically and you can start
interacting with the ADK.</li>
        </ol>
      </li>
    </ul>
  </li>
</ol>

<p class="note"><strong>Note:</strong> When using the ADK with a USB connection to an Android
device, make sure the AC power adapter is plugged in. A USB connection to a computer does not
provide sufficient voltage to power both the ADK and a USB connection to a device.</p>


<h2 id="play-audio">Playing Audio</h2>

<p>The ADK 2012 comes with audio output capabilities, including an amplifier and speaker. You can
use it to play audio from your Android device using either a Bluetooth or USB connection.</p>

<p>To play audio over Bluetooth:</p>

<ol>
  <li>Follow the instructions in the <a href="#conn-bt">previous section</a> to connect your Android
device to the ADK over Bluetooth.</li>
  <li>On your Android device, navigate to the <strong>Settings > Bluetooth</strong> page to view the
list of paired devices, and make sure the ADK is connected.</li>
  <li>Select the settings icon next to the <strong>ADK 2012</strong> item.</li>
  <li>Make sure the <strong>Media Audio</strong> option is enabled.</li>
  <li>Navigate to an application that plays music or other audio.</li>
  <li>Play a song or sound and listen to it on the ADK speaker!</li>
</ol>

<p>To play audio over USB, you must use a device running Android 4.1 (API Level 16) or higher:</p>

<ol>
  <li>Plug the AC power adapter into the ADK.</li>
  <li>Connect the Micro USB AB connector (small, rectangular plug) to the Phone port on the ADK
board.</li>
  <li>Unlock your Android device and connect the Micro USB B connector to your device.
    <p class="note"><strong>Note:</strong> Your device must support Android USB accessory
mode. Devices that support this mode include Google Nexus devices.</p>
  </li>
  <li>On the Android device, you should see a prompt to connect to the <strong>ADK DemoKit
2012</strong>, select <strong>Cancel</strong> and allow the ADK to connect as a media device
only.</li>
  <li>Navigate to an application that plays music or other audio.</li>
  <li>Play a song or sound and listen to it on the ADK speaker!</li>
</ol>

<p class="note"><strong>Note:</strong> When using the ADK with a USB connection to an Android
device, make sure the AC power adapter is plugged in. A USB connection to a computer does not
provide sufficient voltage to power both the ADK and a USB connection to a device.</p>


<h2 id="dev">Developing Accessories with ADK 2012</h2>

<p>The ADK 2012 is a hardware platform and a set of software libraries for prototyping Android
accessories. This section discusses how to set up a development environment for programming the ADK
to make it do what you want and to test software for building your own Android accessories.</p>

<h3 id="src-download">Downloading the ADK Source</h3>

<p>The support software and hardware specifications for the ADK 2012 are available from the Android
source repository. Follow the instructions below to obtain the source material for the ADK.</p>

<p>To download the ADK 2012 software, source code and hardware design specifications.</p>

<ol>
  <li>Download and install <a href="http://git-scm.com/download">Git</a> for your development
system.</li>
  <li>Download and setup the {@code repo} tool, as described on the <a
href="http://source.android.com/source/downloading.html#installing-repo">Android open source
project</a> site.
    <p class="note"><strong>Note:</strong> Developers using Windows must use a Linux compatibility
package, such as <a href="http://www.cygwin.com/">cygwin</a>, to install and run {@code repo}.
Within your compatibility environment, you must install {@code curl}, {@code git} and {@code
python} to be able to download and use the {@code repo} tool.</p>
  </li>
  <li>In a terminal window, create a new directory for the downloaded source files, initialize and
synchronize a local repository:
<pre>
$> mkdir android-accessories
$> cd android-accessories
$> repo init -u https://android.googlesource.com/accessories/manifest
$> repo sync
</pre>
  </li>
</ol>

<p>After successfully completing this process, you should have the source code and tools for
working with the ADK 2012:</p>

<ul>
  <li>{@code adk2012/board} - Source code and hardware design files for the ADK 2012</li>
  <li>{@code adk2012/app} - Source code for the ADK 2012 Android companion application</li>
  <li>{@code external/ide} - Source code for the ADK 2012 Integrated Development Environment
(IDE)</li>
  <li>{@code external/toolchain} - The toolchain used by the ADK 2012 IDE</li>
</ul>


<h3 id="dev-setup">Setting Up the Development Environment</h3>

<p>The ADK 2012 comes with an integrated development environment (IDE) that you use to develop
software and program the ADK 2012 accessory. The following instructions explain how to setup and run
the ADK 2012 IDE.</p>

<p>To set up and run the ADK 2012 IDE:</p>

<ol>
  <li>Download and install the Java Development Kit 6 or higher from <a
    href="http://java.oracle.com">java.oracle.com</a>.</li>
  <li>Download the ADK 2012 IDE for your development platform:
    <ul>
      <li><a href="https://dl-ssl.google.com/android/adk/adk2012_ide-win32-20120629.zip">
          Windows</a></li>
      <li><a href="https://dl-ssl.google.com/android/adk/adk2012_ide-macosx-20120626.zip">
          Mac</a></li>
      <li>Linux
        <a href="https://dl-ssl.google.com/android/adk/adk2012_ide-linux32-20120626.tgz">32bit</a>,
        <a href="https://dl-ssl.google.com/android/adk/adk2012_ide-linux64-20120626.tgz">64bit</a>
      </li>
    </ul>
  </li>
  <li>Unpack the downloaded archive.</li>
  <li>Run the application by navigating to the unpacked {@code ADK2012_IDE/} folder and execute
    the {@code arduino} file.</li>
</ol>

<p>After you have successfully installed and run the ADK 2012 IDE, you must configure it to use
the ADK 2012 library.</p>

<p>To configure the ADK 2012 IDE for use with the ADK libraries:</p>

<ol>
  <li>Start the ADK 2012 IDE and choose <strong>File > Preferences</strong>.</li>
  <li>In the <strong>Preferences</strong> dialog, make a note of the <strong>Sketchbook
location</strong> directory.</li>
  <li>Copy the {@code &lt;adk-source-download&gt;/adk2012/board/library/ADK2} directory and its
contents into your {@code sketchbook/libraries/} directory, so that you create a {@code
sketchbook/libraries/ADK2} directory.</li>
  <li>Stop and restart the <strong>ADK 2012 IDE</strong>.</li>
  <li>In the IDE, choose <strong>File > Examples > ADK2</strong> and then choose one of the example
sketches:
    <ul>
      <li><strong>clock</strong> - The sketch that is preloaded onto the ADK 2012.</li>
      <li><strong>BluetoothScan</strong> - An example sketch demonstrating code that connects an
accessory to an Android device over Bluetooth.</li>
      <li><strong>usbaccessory</strong> - An example sketch demonstrating code that connects an
accessory to an Android device through a USB cable.</li>
    </ul>
  </li>
  <li>Connect a Micro USB cable from the <strong>Computer</strong> port on the ADK board to your
development computer.</li>
  <li>In the <strong>ADK 2012 IDE</strong>, establish a serial port connection with the ADK by
selecting <strong>Tools > Serial Port</strong> and selecting the serial port for the ADK.</li>
  <li>In the <strong>ADK 2012 IDE</strong>, choose the ADK by selecting<strong>Tools > Board >
Google ADK2</strong>.</li>
  <li>Modify an example sketch or create your own.</li>
  <li>Upload the sketch to the ADK by choosing <strong>File > Upload</strong>. When the <strong>ADK
2012 IDE</strong> reports <strong>Done uploading</strong>, the sketch is uploaded and the ADK is
ready to communicate with your Android device.</li>
</ol>

<h3 id="alt-build">Using the ADK Alternative Build System</h3>

<p>An alternative, make file-based build and upload system is also available for the ADK 2012. This
system is command line based and intended for production environments where using an IDE environment
to load software onto accessory hardware may be inconvenient or undesirable.</p>

<p>To setup the environment:</p>
<ol>
  <li><a href="#src-download">Download</a> the ADK 2012 source code files.</li>
  <li>In a terminal window, navigate to {@code
&lt;adk-source-download&gt;/adk2012/board/MakefileBasedBuild}.</li>
  <li>Execute the following command and follow the instructions:
    <pre>$> ./setup</pre>
  </li>
</ol>

<p>To build a program for your accessory:</p>
<ol>
  <li>Place your accessory code in the {@code MakefileBasedBuild/app} directory, including all
required library files. See the {@code app/main.c} file for an example of the program format.</li>
  <li>Execute the following command and follow the instructions:
    <pre>$> ./build</pre>
  </li>
</ol>

<p>To load the program on your accessory hardware:</p>
<ol>
  <li>Run the build process above and make sure your program compiled successfully.</li>
  <li>Attach the accessory via USB cable to your development computer.</li>
  <li>Check which port the accessory is attached to and modify the {@code UART} variable in the
{@code flash} script to the correct port address. On linux machines, the port address is typically
{@code /dev/ttyUSB0}.</li>
  <li>Execute the following command to load the program on the accessory:
  <pre>$> ./flash</pre></li>
</ol>

<h2 id="adk-conn">How the ADK Connects with Android Devices</h2>

<p>The essential feature of any Android accessory is its ability to connect and communicate with an
Android device. Creating a fast and reliable connection between your accessory and Android devices
is the first order of business when building software for an accessory. This section describes the
connection and communication essentials used in the ADK 2012 so that you can apply them to
developing your own Android accessories.</p>

<h3 id="adk-conn-bt">ADK Connection over Bluetooth</h3>

<p>The ADK 2012 app and hardware accessory use a Bluetooth Serial Port Profile (SPP) connection to
communicate. This connection allows two way communication between the ADK accessory and Android
devices.</p>

<p class="note"><strong>Note:</strong> The implementation of the ADK hardware allows the use of
other profiles and multiple connections. However, the basic communication between the ADK 2012
accessory and the Android application uses SPP.</p>

<h4 id="acc-bt-code">Accessory Bluetooth Code</h4>

<p>In order to enable Bluetooth communications, the {@code clock.ino} sketch for the ADK 2012
accessory calls a {@code btStart()} method during the {@code setup()} method to enable radio
frequency communications and start listening for Bluetooth connections:</p>

<pre>
ADK L;
void setup() {
 L.adkInit();
 L.btStart();
}
...
void btStart(){
    uint8_t i, dlci;
    int f;

    L.btEnable(adkBtConnectionRequest, adkBtLinkKeyRequest, adkBtLinkKeyCreated,
               adkBtPinRequest, NULL);

    dlci = L.btRfcommReserveDlci(RFCOMM_DLCI_NEED_EVEN);

    if(!dlci) dbgPrintf("BTADK: failed to allocate DLCI\n");
    else{

        //change descriptor to be valid...
        for(i = 0, f = -1; i &lt; sizeof(sdpDescrADK); i++){

            if(sdpDescrADK[i] == MAGIX){
                if(f == -1) f = i;
                else break;
            }
        }

        if(i != sizeof(sdpDescrADK) || f == -1){

            dbgPrintf("BTADK: failed to find a single marker in descriptor\n");
            L.btRfcommReleaseDlci(dlci);
            return;
        }

        sdpDescrADK[f] = dlci >> 1;

        dbgPrintf("BTADK has DLCI %u\n", dlci);

        L.btRfcommRegisterPort(dlci, btAdkPortOpen, btAdkPortClose, btAdkPortRx);
        L.btSdpServiceDescriptorAdd(sdpDescrADK, sizeof(sdpDescrADK));
    }
}
</pre>

<p>Notice that the {@code sdpDescrADK} object contains a Universally Unique Identifier (UUID) in the
variable {@code BT_ADK_UUID}. This identifier <em>must match</em> the device UUID provided in the
{@link android.bluetooth.BluetoothSocket} connection request in the Android application code.</p>

<p>Once Bluetooth is enabled with the code shown above, the accessory listens for connection
requests. The ADK library handles listening and connection details, so the accessory calls
{@code ADK::adkEventProcess()} once during each loop execution:</p>

<pre>
void loop(void)
{
  ...
  L.adkEventProcess(); //let the adk framework do its thing
  ...
}
</pre>

<p>If a Bluetooth connection has been established, any commands are routed to the
{@code btAdkPortRx()} callback method (which was registered with the ADK library as part of the
{@code btStart()} method) and processed accordingly. The ADK accessory sends messages back through
the Bluetooth connection using the {@code ADK::btRfcommPortTx()} method.
For more details, review the implementations of these methods in the {@code clock.ino} sketch.</p>

<h4 id="app-bt-code">Android App Bluetooth Code</h4>

<p>In the ADK 2012 Android app, the code for handling Bluetooth connections is encapsulated in in a
{@code BTConnection} class. In this class, the application requests access to the Bluetooth adapter
and negotiates a connection with the ADK 2012 accessory. Here is a summary of the relevant code:</p>

<pre>
mAdapter = BluetoothAdapter.getDefaultAdapter();
BluetoothDevice device = mAdapter.getRemoteDevice(address);
mSocket = device.createInsecureRfcommSocketToServiceRecord(ADK_UUID);
mSocket.connect();
</pre>

<p>Note the {@code ADK_UUID} parameter in the second line. This identifier must match the identifier
output by the accessory (the {@code BT_ADK_UUID} variable mentioned earlier), otherwise the protocol
negotiation fails and the {@link android.bluetooth.BluetoothSocket} is not created. Once a
connection is established, you obtain {@link java.io.InputStream} and {@link java.io.OutputStream}
objects from the socket to communicate with the accessory:</p>

<pre>
mInStream = mSocket.getInputStream();
mOutStream = mSocket.getOutputStream();
</pre>

<p>Review the {@code BTConnection.java} file provided in the ADK 2012 software download for more
implementation details.</p>

<h3 id="adk-conn-usb">ADK Connection over USB</h3>

<p>The ADK 2012 app and hardware accessory can also use a USB connection to communicate, similar to
the original ADK.</p>

<h4 id="acc-usb-code">Accessory USB Code</h4>

<p>The ADK library takes care of most of the implementation details for a USB connection, the
accessory code must make a few calls to initialize USB connectivity, including setting the accessory
identification strings:</p>

<pre>
ADK L;
void setup() {
  L.adkInit();
  L.usbSetAccessoryStringVendor(...);
  L.usbSetAccessoryStringName(...);
  L.usbSetAccessoryStringLongname(...);
  L.usbSetAccessoryStringVersion(...);
  L.usbSetAccessoryStringUrl(...);
  L.usbSetAccessoryStringSerial(...);

  L.usbStart();
}
</pre>

<p class="note"><strong>Note:</strong> The identification strings must match the USB accessory
filter settings specified in the connecting Android application,otherwise the application cannot
connect with the accessory.</p>

<p>Once USB is enabled with code shown above, the accessory listens for connection requests. The ADK
library handles listening and connection details, so the accessory calls {@code
ADK::adkEventProcess()} once during each loop execution:</p>

<pre>
void loop(void)
{
  ...
  L.adkEventProcess(); //let the adk framework do its thing
  ...
}
</pre>

<p>The accessory must then check for a live USB connection to process commands and send
messages. Here is a summary of the relevant code:</p>

<pre>
void loop() {
  if (L.accessoryConnected()) {
    int recvLen = L.accessoryReceive(msg, sizeof(msg));
    if (recvLen > 0) {
      ... // process message
    }

    L.accessorySend(outmsg, outmsgLen);
  }
  L.adkEventProcess();
}
</pre>

<p>For more details, review the implementations of these methods in the {@code clock.ino}
sketch.</p>

<h4 id="app-usb-code">Android App USB Code</h4>

<p>In the ADK 2012 Android app, the code for handling USB connections is encapsulated in a
{@code UsbConnection} class. This class sets up a {@link android.content.BroadcastReceiver} to
listen for USB events and then attempts to connect when a matching connection event is received.
Here is a summary of the relevant code:</p>

<pre>
import com.android.future.usb.UsbAccessory;
import com.android.future.usb.UsbManager;

mUSBManager = UsbManager.getInstance(this);
UsbAccessory acc = mUSBManager.getAccessoryList()[0];

if (!mUSBManager.hasPermission(acc)) return;
</pre>

<p>The ADK 2012 app uses the support library to implement the USB accessory connections, in order to
support devices running Android 2.3.4 (API Level 10). If you only need to support Android
3.1 (API Level 12) and higher devices, you can replace the first 4 lines the following code:</p>

<pre>
import android.hardware.usb.UsbAccessory
import android.hardware.usb.UsbManager

mUSBManager = (UsbManager) getSystemService(Context.USB_SERVICE);
UsbAccessory acc = (UsbAccessory)
                   intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY);
</pre>

<p>Note that the app only receives events when the USB accessory identification information matches
the information in the {@code res/xml/usb_accessory_filter.xml} file, referenced by the
application’s manifest statement:</p>

<pre>
&lt;meta-data
    android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED"
    android:resource="@xml/usb_accessory_filter" /&gt;
</pre>

<p>Connections from other USB devices are not received by the ADK 2012 accessory.</p>

<p>Once the connection is established, the app can communicate with the accessory through file input
and output streams, as shown in the following example code:</p>

<pre>
ParcelFileDescriptor mFD = mUSBManager.openAccessory(acc);
if (mFD != null) {
  FileDescripter fd = mFD.getFileDescriptor();
  mIS = new FileInputStream(fd);  // use this to receive messages
  mOS = new FileOutputStream(fd); // use this to send commands
}
</pre>

<p>Review the {@code UsbConnection.java} file provided in the ADK 2012 source code for more
implementation details.</p>

<h2 id="audio-dock">USB Audio Dock Implementation</h2>

<p>One of the important new features introduced with the ADK 2012 is the ability to play audio over
a USB connection. This innovation was introduced as an update to Android Open Accessory (AOA)
<a href="http://source.android.com/tech/accessories/aoap/aoa2.html">protocol 2.0</a> and is
available on devices running Android 4.1 (API Level 16) and higher.</p>

<p>The ADK 2012 provides a reference implementation of this functionality for accessory developers.
No software application is required to be installed on the connected Android device, accessory
developers only need to support AOA v2. This implementation demonstrates audio output of 16bit,
44.1kHz stereo PCM source data compressed into a single channel due to the audio hardware available
on the accessory.</p>

<p>Using the audio output features provided by the ADK library requires only a few function calls.
The first few calls are in the accessory {@code setup()} routine, which prepare the accessory for
USB connections and audio output, as summarized in the code example below:</p>

<pre>
ADK L;
void setup() {
  L.audioInit();
  L.usbh_init()
  L.usbStart();
}
</pre>

<p>For more information about the {@code ADK::audioInit()} function, see the {@code
libraries/ADK/Audio.c} library file. For more information about the {@code ADK::usbh_init()}
function, see the {@code libraries/ADK/Usbh.c} library file.</p>

<p>After completing this setup, the {@code loop()} function calls {@code ADK::adkEventProcess()} to
handle audio output and other ADK functions:</p>

<pre>
void loop(void)
{
  ...
  L.adkEventProcess(); //let the adk framework do its thing
  ...
}
</pre>

<p>This call executes task queuing for the ADK and as part of the execution process, the task queue
executes {@code usbh_work()} in {@code libraries/ADK/Usbh.c}, which handles audio output requests.
Review the implementation of this function for details. For additional implementation details on
audio output, see the {@code libraries/ADK/accessory.c} library file.</p>
