2012/06/02

[adk]最初からAccessory Modeだったらどうするんだろう?

Accessory Modeに対応したAndroid端末にADK端末を接続すると、Android端末はAccessory Modeになる。

Accessory Modeにする主導権は、ADK端末側にある。
AAP(Android Accessory Protocol)を使って、Android端末とやりとりする。

私は今回、ADK側をこう作った。

  1. GET_DESCRIPTORリクエストを出して、デバイスディスクリプタを取得(18byte)。
  2. デバイスディスクリプタの中にVIDとPIDがあるので、Accessory Modeになっているときの値かどうか比較。
  3. Accessory Modeの値だったら、正常ということで処理終わり。
  4. AAP:ACCESSORY_GET_PROTOCOLリクエストを出して、プロトコルバージョンを取得(2byte)。
  5. プロトコルバージョンが0だったり、2byte取得できなかったりしたら、Accessory Mode対応外ということで終了。
  6. AAP:ACCESSORY_SEND_STRINGリクエストを出して、文字列を送信。
    ・ACCESSORY_STRING_MANUFACTURER
    ・ACCESSORY_STRING_MODEL
    ・ACCESSORY_STRING_DESCRIPTION
    ・ACCESSORY_STRING_VERSION
    ・ACCESSORY_STRING_URI
    ・ACCESSORY_STRING_SERIAL
  7. 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 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。

注: コメントを投稿できるのは、このブログのメンバーだけです。