Accessory Modeに対応したAndroid端末にADK端末を接続すると、Android端末はAccessory Modeになる。
Accessory Modeにする主導権は、ADK端末側にある。
AAP(Android Accessory Protocol)を使って、Android端末とやりとりする。
私は今回、ADK側をこう作った。
- GET_DESCRIPTORリクエストを出して、デバイスディスクリプタを取得(18byte)。
- デバイスディスクリプタの中にVIDとPIDがあるので、Accessory Modeになっているときの値かどうか比較。
- Accessory Modeの値だったら、正常ということで処理終わり。
- AAP:ACCESSORY_GET_PROTOCOLリクエストを出して、プロトコルバージョンを取得(2byte)。
- プロトコルバージョンが0だったり、2byte取得できなかったりしたら、Accessory Mode対応外ということで終了。
- AAP:ACCESSORY_SEND_STRINGリクエストを出して、文字列を送信。
・ACCESSORY_STRING_MANUFACTURER
・ACCESSORY_STRING_MODEL
・ACCESSORY_STRING_DESCRIPTION
・ACCESSORY_STRING_VERSION
・ACCESSORY_STRING_URI
・ACCESSORY_STRING_SERIAL - AAP:ACCESSORY_STARTリクエストを出して、Android端末にAccessory Modeになってもらう。
まあ、Android Developerに書いてある通りだ。
LPC2388基板ではうまくいってないけど、PCからこの制御をすると、A500側に画面が出てきた。
ACCESSORY_STRING_DESCRIPTIONで指定したアプリがないので、ACCESSORY_STRING_URIに指定してあるサイトに飛びますか?みたいな画面だった。
「はい」にすると、単にブラウザが起動してサイトに飛んでいった。
もしかするとmailtoなんかもいけるかもしれんが、試してない。
気になったのは、既にAndroid端末がAccessory Modeになっていたときだ。
説明通りだと、ACCESSORY_STRING_URIみたいな文字列を送信するタイミングがない。
これは「最初からAccessory Modeになっている端末なんかない」ということなのだろうか。
A500では、USBケーブルを外したらVID/PIDが元に戻ったので、それがトリガとなってAccessory Modeから抜けているのだろう。
だから、Android端末側がそういう風に作ってあるのなら、Accessory Modeになりっぱなしってことはないんだろう。
BeagleBoardとかで実際に試してみればいいんだけど、めんどくさいからやらない。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。