コンテンツ一覧

Mahout | Solr | Android | Environment

2011年11月14日月曜日

Android Open Accessory Development Kit

AndroidのADKについて開発者の皆さんと話をする機会があり、分かったことをまとめます。「Androidアプリの開発経験はあるがADKを知らない」開発者の人たちにも参考になればと思います。

・はじめに
Android関連の技術やビジネスに興味を持っている人であれば、ADKと呼ばれるキーワードを良く耳にしていると思います。しかし、ADKの正体がはっきり分からない人も多いことでしょう。ADKの理解については様々な解釈があるようです。本家Googleがどのように考えているのかは、Android DevelopersのサイトにあるADKの部分に書かれているはずなので、そこを読み解いていきたいと思います。

Android Open Accessory Development Kit
http://developer.android.com/intl/ja/guide/topics/usb/adk.html

・ADKとは?
Android関連でADKと言えば「Open Accessory Development Kit」のことを指します。ADKAは、AndroidではなくAccessoryの頭文字です。Android3.1以降(Android2.3.4はバックポートが用意されている)に追加された周辺機器用のAPIを利用するためのソフトウェアやドキュメント、Accessory Demo Kitと呼ばれるハードウェアを合わせてADKと呼ばれています。ADKの動作を試すことができる基板は、Accessory Demo Kitと呼ばれており、こちらも略すとADKになってしまいます。違うものが同じ略語になってしまうことも、ADKの正体がはっきりしない理由の一つかもしれません。

・host modeとaccessory mode
現在のADKUSB(Universal Serial Bus)を前提としています。USBは各種周辺機器を接続するためのバス規格であり、NPOであるUSB-IF(USB Implementers Forum, Inc.)が仕様の策定や管理を行なっています。

Android搭載デバイスは、USB接続をすると2つのモードで動作することが想定されています。1つ目はhost modeです。これはAndroid搭載デバイスがUSB Hostとなり、Android搭載デバイスに接続されている機器(USB Device)への電力供給元となります。2つ目がaccessory modeです。この場合は、Android搭載デバイスがUS Deviceとして動作して、接続先の機器(USB Host)から電源を供給して貰います。

host mode
[Android端末(USB Host)]<=>[外部機器(USB Device)]

accessory mode
[外部機器(USB Host)]<=>[Android端末(USB Device)] 

・USB Host APIsUSB Accessory APIs
USBホストやUSBデバイスとして動作するアプリを開発するためのAPIは、以下のサイトに記載されています。これらのAPIは、ADKが登場するタイミングで整理されたもので、厳密にはADKではありません。しかし、ADKはAndroid端末がaccessory modeで動作することが前提なっているので、USB Accessory APIはADKにとって必須コンポーネントと言えます。

USB Host
http://developer.android.com/intl/ja/guide/topics/usb/host.html

USB Accessory
http://developer.android.com/intl/ja/guide/topics/usb/accessory.html

・ADK Component
ADKを構成するコンポーネントは下記の6点です。リファレンスとなるハードウェアと、実際にADK互換デバイスを開発する際に必要となるライブラリやサンプルソースコードが含まれています。accessory modeで動作するAndroid端末と連動するハードウェアを作成するために必要なものをセットしたものがADKです。

1:ADK board
USB micro-controller board(Arduino Mega2560 と Circuits@Home USB Host Shield design に基づく)

2:ADK shield
Android Demo Shield(Joystick,LED,temperature,light等の入出力)

3:ADK boardがUSB Hostとして振る舞うためのlibrary
Arduino USB Host Shield libraryをベースしたもの

4:Arduino Sketch
ADK board上で動作するfirmware(Android accessory protocol libraryを呼び出す)

5:Android accessory protocol library
accessory modeをサポートするAndroid端末との接続処理を行うもの

6:ADK boradの機能を実現するための各種ライブラリ
CapSence library,I2C / TWI (Two-Wire Interface) library,Servo library,Spi library,Wire library

・ADKの可能性
ADKで何が変わったのでしょうか。それは、Android DevelopersサイトのADKページの「Attempt to start the device in accessory mode」の項目にあるように、外部接続デバイスからAndroid端末をaccessory modeへ移行させて、任意のアプリを実行できるようになった点です。冷蔵庫や電子レンジなどの電源が確保されているハードウェアと接続する場合は、USBデバイスとして動作した方が電源を供給して貰えるので、バッテリーを消費抑えて(充電をしながら)任意のアプリを実行することができます。

以上です。特にまとめることもありませんが、ADKについて出来るだけ正確に書いたつもりです。間違いなどあれば、コメント等でご連絡・ご指摘いただければと思います。