2011年11月19日土曜日

ADKの学習

Androidは USBホスト と USBデバイス の両方になる事が出来る。

下側のUSBデバイスとして動作する為のライブラリが
Android USB Accessory Development Kit ADKとして提供されている。
そしてこのときのUSBホストがArduinoという構成だ。

ADKにはDemoKitというアプリが入っているので読んでみよう。

まずはAndroidManifest.xml。
アクティビティ
・.DemoKitLaunch    <ーー"android.intent.action.MAIN"
・.DemoKitActivity
・.DemoKitPhone
・.DemoKitTablet
・UsbAccessoryActivity

次にMAINのDemoKitLaunchクラス。
ここではactivity.getWindowManager().getDefaultDisplay()から
画面サイズを取り出している。
画面サイズが閾値以上ならDemoKitTablet、以下ならDemoKitPhoneを
IntentにつめてstartActivityしている。
タブレットかスマートフォンかの識別子が無いのだろう。

Xperiaで動かすのでDemoKitPhoneクラスを見ていこう。
ここは画面上のIN/OUTタブの切り替えを管理しているだけ。

DemoKitPhoneが継承しているのはBaseActivityクラス。
ここはUSBホストへの入力信号を受け取ったハンドラに合わせて
処理実行クラスのメソッドを呼び出している。

さらにBaseActivityが継承しているのはDemoKitActivityクラス。
ここでUsbManagerが生成されるいわば実装クラス。
UsbManagerのFileInputStreamとFileOutputStreamを使って
入力信号受信スレッドと、出力信号生成メソッドを実装している。


DemoKitLaunch
            |__ DemoKitPhone ー BaseActivity ー DemoKitActivity
                                                                  |         |
                                                        InputController ColorWheelLEDController
                                                        RelayController
                                                        ServoController


AndroidManifest.xmlにはUsbAccessoryActivityが記述されている。
<intent-filter>、<meta-data>に
"android.hardware.usb.action.USB_ACCESSORY_ATTACHED"
が指定されているので、このクラスはソースから明示的に呼ばれるのではなく、
USBホストにAndoroid端末が接続された際に呼び出される。
このクラスがDemoKitLaunchをIntentにつめてstartActivityしている。


0 件のコメント:

コメントを投稿