2014/11/03

[rpi]Android端末をAccessory Modeにしてみよう

前回Raspberry Piにシリアルをつけたけど、SSHが使えるんだったらそっち経由でよいことに気付いた。
どこら辺の問題かわからないけど、シリアルを取りこぼしているような感じがするのだ。
ばたばた出力が流れていると、いつの間にか1文字分が遅れているような感じだ。
TeraTermからリセットを通知するとうまくいくし、そうでなくても「遅れる」という現象なので、データとしては届いていると思うのだ。
んー、なんだろう?

 

それは忘れて、Raspberry PiとNexus5を接続して、Nexus5をAccessory Modeにしてみよう。
Accessory Modeというのは、USB Host機能を持つ端末にAndroid端末を接続し、データを通信し合うモードだ。
標準?といってよいかわからないが、Arduino MEGA ADKが一般的によく使われるようだ。
Arduino UnoなどにUSB Hostのドータボードを載せればよいとも聞いた。


理屈はそんなに難しいものではなく、USB接続して、Accessory Modeになる手順を通信すればよい。

ドライバを作るとよいのだろうが、あまり手間はかけずにアプリだけで実装した。
libusb 1.0でNexus5のVID/PIDを検索してオープンし、libusb_control_transfer()でACCESSORY_GET_PROTOCOLを送信してNexus5がAccessory Modeをサポートしていることを確認し、ベンダ名、モデル名、ディスクリプション、バージョン、URI、シリアル番号を送信し、最後にACCESSORY_STARTを送信。

そうすると、Nexus5に対応したアプリが入っていないためかURI先に飛ぶ確認画面が出てきた。
Androidアプリはまだ作っていないのだが、セミナーでやった様子からすると、対応したアプリがあればこのタイミングで起動することだろう。

上で出てきたACCESSORY_STARTなどは、f_accessory.hというヘッダファイルに定義してある。
これがどこから持ってきたのか・・・。
gitには入っているようなので、AOSPから落としてくるか、少なくともkernel-headersだけでもcloneすればよいのではなかろうか。

 

むかーし、この辺りは調べていたようだが、もう3年半くらい前になるため記憶がほとんどない。。
BeagleBoardにAOSPであれこれ試しながら進めていたようで、プロトコルを訳しながら調べたドキュメントもあった。
やるなあ、当時の私。

0 件のコメント:

コメントを投稿

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