Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Leveraging the Android Open Accessory Protocol

2,393 views

Published on

Presentation from the Android Builder Summit 2013.

Published in: Engineering
  • I need to implement AOAP on a windows platform in C# in order to communicated with an android device. Do you have the link for a sample code?
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Leveraging the Android Open Accessory Protocol

  1. 1. 1Gary Bisson - ABS2013 Leveraging the Android Open Accessory Protocol Gary Bisson Adeneo Embedded gbisson@adeneo-embedded.com Android Builders Summit 2013
  2. 2. 2Gary Bisson - ABS2013 Session Overview • Introduction to Android Open Accessory • Protocol specifications • Accessory Development Kit • Software implementation • Demonstrations
  3. 3. 3Gary Bisson - ABS2013 Who am I? • Software engineer at Adeneo Embedded (Bellevue, WA) – Linux, Android – Main activities: • BSP adaptation • Driver development • System integration
  4. 4. 4Gary Bisson - ABS2013 Introduction to AOA • Allows USB hardware to interact with an Android-powered device – No need for the Android device to act as USB Host – Standard API • Introduced in Android 3.1 (API level 12) – Backported to Android 2.3.4 (API level 10) • Version 2.0 released with Android 4.1
  5. 5. 5Gary Bisson - ABS2013 Introduction to AOA Accessory USB Android Device USB Connection USB Device USB Host ADK Hardware
  6. 6. 6Gary Bisson - ABS2013 AOA 1.0 Protocol • Android Open Accessory 1.0 is a protocol that allows an Android device to interact with an Android USB accessory in a special accessory mode. • Basically there are four steps to initiate the communication.
  7. 7. 7Gary Bisson - ABS2013 AOA 1.0 Protocol 1. Wait for and detect connected devices Accessory Android Device USB Enumeration Vendor ID Product ID
  8. 8. 8Gary Bisson - ABS2013 AOA 1.0 Protocol 2. Determine the device’s accessory mode support Accessory Android Device Get Protocol #51 AOA 1.0/2.0
  9. 9. 9Gary Bisson - ABS2013 AOA 1.0 Protocol • The accessory must check the Vendor & Product ID’s of the connected device – Possibility to target some devices – Detection of devices already in Accessory mode • If it is already in accessory mode then: – Vendor ID = 0x18D1 (Google) – Product ID = 0x2D00 | | 0x2D01
  10. 10. 10Gary Bisson - ABS2013 AOA 1.0 Protocol • Accessory mode product IDs – 0x2D00 – Supports Accessory Mode • 1 interface with 2 bulk endpoints – 0x2D01 – Supports Accessory Mode + ADB • 2 interfaces with 2 bulk endpoints each • If it is not in accessory mode then Accessory mode support can be asked: – Send a “Get Protocol” request (51) on endpoint 0 • AOA Version (1.0 or 2.0) is returned by Android device
  11. 11. 11Gary Bisson - ABS2013 AOA 1.0 Protocol 3. Attempt to start the device in accessory mode Accessory Android Device Identity Strings #52 Start Accessory #53
  12. 12. 12Gary Bisson - ABS2013 AOA 1.0 Protocol • If the AOA Version # is okay, then send string’s identifying our ADK to the device – Send “Identity” request (52) for each identifier: • Manufacturer • Model Name • Description • Version • URL • Serial Number – Send “Start Accessory” request (53) to request the Android device re-introduce itself on the bus in accessory mode
  13. 13. 13Gary Bisson - ABS2013 AOA 1.0 Protocol 4. Establish communications Accessory Android Device CMD / RESPONSE
  14. 14. 14Gary Bisson - ABS2013 AOA 1.0 Protocol • The accessory must obtain the Bulk endpoints and be prepared to initiate communication with the device. From this point the communication is defined by the ADK Developer
  15. 15. 15Gary Bisson - ABS2013 AOA 2.0 Protocol • AOA 2.0 was released at Google I/O end of June 2012 alongside Jelly Bean • Two new features: – Audio Output – Accessory as HID
  16. 16. 16Gary Bisson - ABS2013 AOA Protocol version 2.0 • Audio output: – From an Android device to an accessory – Standard USB audio class interface (ISO) – Only supports 2 Channel, 16-bit PCM @ 44100KHz • To enable the audio support, the accessory must send a new USB control request: – “Audio Support” request (58)
  17. 17. 17Gary Bisson - ABS2013 AOA Protocol version 2.0 • HID support: – Registers one or more USB HID with to the Android device. – Reverses the direction of communication for typical USB HID (Host <-> Device). – Uses USB control requests: • ACCESSORY_REGISTER_HID • ACCESSORY_UNREGISTER_HID • ACCESSORY_SET_HID_REPORT_DESC • ACCESSORY_SEND_HID_EVENT
  18. 18. 18Gary Bisson - ABS2013 AOA Protocol version 2.0 • Compatible with original AOA 1.0 protocol • Also adds Bluetooth support – Not the focus of this presentation… – Example available in ADK source code
  19. 19. 19Gary Bisson - ABS2013 AOA 2.0 Protocol • New Product ID’s – 0x2D02 – Supports Audio • 2 Audio interfaces (control + streaming) – 0x2D03 – Supports Audio + ADB • 3 interfaces: 2 Audio + 1 Bulk – 0x2D04 – Supports AOA 1.0 + Audio • 3 interfaces: 2 Audio + 1 Bulk – 0x2D05 – Supports AOA 1.0 + Audio + ADB • 4 interfaces: 2 Audio + 2 Bulk
  20. 20. 20Gary Bisson - ABS2013 Accessory Development Kit • Hardware for ADK 2011 is based on a Arduino Mega2560 • Hardware for the ADK 2012 is based on an ARM Cortex M3 • ADK 2012 Guide
  21. 21. 21Gary Bisson - ABS2013 What part of AOA do you Control? • ADK HW – Schematics provided for the alarm clock
  22. 22. 22Gary Bisson - ABS2013 ADK Hardware • Other solutions? – Any USB Host capable device that can provide power to the Android device. – This is what makes it easy to port the ADK SW to any ARM-based board • e.g. Raspberry Pi • Brings more capabilities (video control…)
  23. 23. 23Gary Bisson - ABS2013 What part of AOA do you Control? • ADK SW – Developer controls what runs on the ADK HW and what runs on the Android device • Google provides sample software: – Source code repo: • http://android.googlesource.com/accessories/manifest – Android device application can apply on any device with API level > 10 • Android Application presents UI for control, and communication
  24. 24. 24Gary Bisson - ABS2013 ADK Software • Accessory side: – Full-featured: • Accessory – Basic controls (LEDs, GPIOs) • Audio • Bluetooth – Code is Arduino-specific • For other solutions, need for a “portable” Accessory sample code
  25. 25. 25Gary Bisson - ABS2013 ADK Software • Android device side: – Hardware control
  26. 26. 26Gary Bisson - ABS2013 Software implementation 1. Software on the ADK HW – Handles communication with Android device – Controls sensors, displays, etc. on the ADK HW 2. Software on the Android device – Can be installed automatically via pop-up URL on connection – Handles communication with ADK HW – Presents a GUI for control, data input/output from ADK
  27. 27. 27Gary Bisson - ABS2013 Software implementation In case the software is not already installed:
  28. 28. 28Gary Bisson - ABS2013 Software implementation Otherwise the user must authorize the execution of the Accessory app:
  29. 29. 29Gary Bisson - ABS2013 Application on the Android Device • Must discover the accessory when it is attached • Communicate with the accessory via ADK Developer defined commands over USB • Utilizes the USB API in Android
  30. 30. 30Gary Bisson - ABS2013 Application on the Android Device • Android contains two different packages to support AOA protocol: – android.hardware.usb • Works with no add-on library for Android 3.1 or higher – com.android.future.usb • From Google API add-on library for Android 2.3.4 or higher • Wrapper around android.hardware.usb • Better choice to support the widest range of devices
  31. 31. 31Gary Bisson - ABS2013 Discovering the Accessory • First add an intent-filter to the application’s manifest (AndroidManifest.xml)
  32. 32. 32Gary Bisson - ABS2013 Discovering the Accessory • Then define a resource file that details which USB Accessory this Application communicates with (accessory_filter.xml)
  33. 33. 33Gary Bisson - ABS2013 Communication with the Accessory • Grab the UsbAccessory handle from the Intent received • Open up input/output file streams with the Accessory (myactivity.java)
  34. 34. 34Gary Bisson - ABS2013 Accessory software • Accessory transfers – Bulk transfers:
  35. 35. 35Gary Bisson - ABS2013 Accessory software • Audio streaming – Arduino ADK: • DMA to DAC • Simple solution – Linux implementation? • ALSA
  36. 36. 36Gary Bisson - ABS2013 Accessory software Circular Buffer Isochronous USB Transfer Callback Audio write() Thread Audio Track API Audio Hardware
  37. 37. 37Gary Bisson - ABS2013 Accessory software • HID support: – 4-step process: • Register HID device • Set HID report – Defines capabilities of the Human Interface • Send HID reports • Unregister HID device
  38. 38. 38Gary Bisson - ABS2013 Accessory software • Tool to create your HID report structure: – HID Descriptor Tool
  39. 39. 39Gary Bisson - ABS2013 Demonstrations • Android Device: – Stock Nexus 7 Tablet running Android Jellybean (v4.2.1) • Custom ARM-based accessory – Raspberry Pi model B – Running Linux
  40. 40. 40Gary Bisson - ABS2013 Demonstrations • Why were these particular platforms chosen? – Raspberry Pi is a very cheap & popular board nowadays – Wanted to show ease of using libusb-based code – Nexus 7 is a recent stock device that needs no modification • Any Jellybean device would work the same
  41. 41. 41Gary Bisson - ABS2013 Demonstration #1 • Create an accessory device that: – Displays pictures – Allows control of the slideshow from Android • Shows AOA v1.0 capabilities
  42. 42. 42Gary Bisson - ABS2013 Demonstration #2 • Create an accessory device that: – Get ADK app data – Plays audio • Shows AOA v2.0 capabilities – Audio streaming
  43. 43. 43Gary Bisson - ABS2013 Demonstration #3 • Create an accessory device that: – Runs Android as well! • From Jesse Dannenbring’s presentation: https://github.com/jdannenbring/android-arm-accessory • Shows AOA v2.0 capabilities – Audio streaming
  44. 44. 44Gary Bisson - ABS2013 Conclusion • Interesting standard – Great flexibility – Can overcome HW access issues – Compatibility v2.0 / v1.0 • Limitations • Full code sources soon available at: http://github.com/gibsson
  45. 45. 45Gary Bisson - ABS2013 Questions?
  46. 46. 46Gary Bisson - ABS2013 References • Based on Jesse Dannenbring’s presentation: – https://speakerdeck.com/jdannenbring/ad- 2002slides-dannenbring – https://github.com/jdannenbring/android-arm- accessory – https://github.com/jdannenbring/android-arm- accessory-app • “Android Developers”. http://developer.android.com/index.html. 1 February 2013.
  47. 47. 47Gary Bisson - ABS2013 References • Di Cerbo, Manuel. “Turn your Linux computer into a huge Android USB Accessory” Using Android in Industrial Automation. 5-13-2011. http://android.serverbox.ch/?p=262 • “libusb”. http://www.libusb.org/. 1 February 2013. • “monaka / libusb-android / overview”. https://bitbucket.org/monaka/libusb-android/. 1 February 2013. Portions of these slides are reproduced from work created and shared by the Android Open Source Project and used according to terms described in the Creative Commons 2.5 Attribution License.
  48. 48. 48Gary Bisson - ABS2013

×