2012年7月20日金曜日

AndroidのUSBホスト機能

Androidの3.1以降ではUSBホスト機能がサポートされたので、比較的簡単にUSB機器と通信するプログラムが書けるようになっています。
http://developer.android.com/guide/topics/connectivity/usb/host.html

FSUSB2がLinuxで使えるのは確認出来たので、今度はAndroidアプリから認識出来るか試してみたら、ハマってしまい何時間か無駄にしたのでメモしておきます。

ポイントは2つ。
  1. 本体でUSBホスト機能が有効になっていなかった。

    カーネルはUSB機器が接続されたことを認識しているのに、Android側に何もメッセージが飛んでないので、原因を調べるのに随分かかりました。わかってしまえばなんのこともない。

    これはD70Wがそうだっただけなのかもしれませんが、Android 3.1以降でもUSBホスト機能が有効になっていないことがあるみたいです。

    下記の内容のファイルを android.hardware.usb.host.xml という名前で作成しておいて 、
    <?xml version="1.0" encoding="utf-8"?>
    <permissions>
        <feature name="android.hardware.usb.host" />
    </permissions>
    このファイルをAndroidの /system/etc/permission ディレクトリに置いてからリブートすれば、USBホスト機能を有効に出来ます。

  2. USB機器を特定するためのIDの指定が10進数だった。

    AndroidアプリがFSUSB2に特定して反応するように device_filter でベンダーIDとプロダクトIDを指定するわけですが、ここに16進数でIDを指定していたのでメッセージが受け取れていませんでした。

    lsusbの出力にしろ、あちこちに出てくるメッセージにしろ、IDは16進数で表示されているので、それをそのまま設定していたのが敗因でした。
    これは16進数を10進数になおして設定すれば良いです。
以上で、AndroidアプリからFSUSB2を認識するところまでは確認出来ました。

1 件のコメント:

  1. ありがとうございます!今まで全然手応えがなかったのが、これで前進しそうです。EKEN T01Aという中華パッドを使っています。android.hardware.usb.host.xml というファイル自体が存在していませんでした。

    返信削除