Android Open Accessory について調べました。
これは2011年のGoogle IOで発表された技術で、プロトコルを標準化することでAndroidに接続するハードウェア・アクセサリを簡単に作ることができるようにするものです。Androidの成功はアプリ開発を効率化したことにあるので、アクセサリ開発はエコシステムに寄与すると期待されたのでしょう。当初の盛り上がりほどは栄えていないようですが、存外組み込み用Androidでは広く使われているかも知れません。
いろいろな方が精力的に実験したようで、たくさんの興味深い資料を見つけました。
- AOA 2.0を実装してみた
- ADK2012の構造と解析
- ADK互換モジュールで遊ぶAndroid
- ソフトウェア技術ドキュメントを勝手に翻訳 「USBアクセサリ」
AOA 2.0で大幅に拡張されているものの、AOA 1.0で済むなら話は簡単なようです。動作手順は以下のようになっています。
- AOA 1.0ではアクセサリ側がUSBホストとなります。
- アクセサリはAndroid OSがAOAのデバイス・エンドポイントを持っているか確認し、持っているなら接続を確立します。
- アクセサリからはその素性を示すデータがエンドポイントに送られます。
- Android OSはエンドポイントから上記のデータが送られてくると、アプリケーションが登録したデータと突き合わせます。
- 一致するデータがあるならば、対応するアプリケーションを起動します。
- エンドポイントを通してAndroidのアプリケーションとアクセサリが通信します。
つまり、AOAとしてGoogleが提供している枠組みは、アクセサリに対応するアプリケーションを探し出して起動する仕組みです。以降はアプリケーションとアクセサリがUSBバルク転送でメッセージを交換しながら動作します。
アクセサリのLEDをオン・オフするような簡単なサンプルがいくつも提供されています。