2011年08月04日

素のAndroid端末を外部のキーにより操作する実験

Android端末にはいろいろなハードウェアボタン、ソフトウェアボタンがついており、そのボタンを使って操作します。
日本Androidの会・神戸支部のMLでたろサさんが、ADBなら好きなキーイベント発行できますよね、と発言されていたので実際に実現してみることにしました。
IMG_20110804_232153.jpg

ADBを使用してPCからキーイベントを発行する方法は、ここに詳しく載っています。
TechBooster : adbを使って端末にキーイベントを送る
http://techbooster.jpn.org/andriod/environment/6422/

これを今回はMicrobridge/PICでやってみます。実際にADBから送る場合には、以下のような文字列を送ればキーイベントが発行されます。
shell:exec input keyevent 23
コード23はセンターボタンの押下です。
キーイベントと対応するキーコードはここでわかります。
http://developer.android.com/reference/android/view/KeyEvent.html

昔作成したATARI仕様ボタンとPIC ADK Miniboard(のプロト版)を接続し、ボタンの操作でDOWNキーとCENTERキーを発行してみました。
うまくいきました〜。
動画二本立てでIS01編、NexusS編です。どちらも標準OS状態で専用のアプリ等インストールしていません。








Android NDKネイティブプログラミング―Native Development Kit
出村 成和
秀和システム
売り上げランキング: 725



Arduino Uno
Arduino Uno
posted with amazlet at 11.08.02
スイッチサイエンス
売り上げランキング: 10101


posted by いしいっち at 23:33| Comment(0) | TrackBack(1) | Android開発関連 | このブログの読者になる | 更新情報をチェックする

2011年07月26日

Microbridge/PICでAndroid端末のスクリーンショットを取得するテスト

非ルートの殆どの端末では、標準では本体のみでスクリーンショットを取得する機能はありませんが、 PCと接続した場合には、Android SDKに付いているDDMSというツールを使用すればスクリーンショット を取得する事が出来ます。内部ではADBを使用しているはずです。

従って、組み込み機器から、具体的にはMicrobridge/PICでもって、このAndroidの画面を引っ張り出せ ないかなと思いまして、実験してみました。
また、取得したデータを簡易的に表示する手段として、ドットマトリクス表示器の、ノリタケ伊勢電子製の VFDパネル SCK25616L-A http://www.noritake-itron.jp/kit/sck25616l/ を接続しました。マイコンボードはPIC ADK Miniboardと同じICですが、手作り版です。

Android端末側には一切、表示制御や画面キャプチャに関連するソフトをインストールしたりはしていません。

R1205981.JPG Android端末フレームバッファ取得装置
実際にスクリーンのデータをDDMSで取得した時内部でどのようなコマンドがやりとりされているかを調査すると、 "framebuffer:."でオープンするだけのようです。もしかしたらパラメータ等あるかもしれません。後ほどADBデーモンの ソースは調査してみたいと思います。

従って、Microbridge/PICでオープンするには、
 Connection* c;
 c = ADB_addConnection("framebuffer:.",false);
とすればOKです。
Nexus Sで検証してみると、32BPPのRGBA8888っぽいデータが一気に降ってきました。
Nexus Sのスクリーンサイズで1.5MBにも及びますので正直この規模のマイコンには取り扱いにくいです。

とりあえず、マイコン側で受信の度に必要な領域の2値ビットマップ化して、VFDに反映させてみました。
表示内容は、@titoi2 さんのAndroid用青空文庫リーダーアプリ「A・文庫」です。
Android端末画面の右上のフリガナ部がVFDに取り込まれて表示されています。

R1205979.JPG
というわけで、こんな遊び方もできるかなーと。


Android NDKネイティブプログラミング―Native Development Kit
出村 成和
秀和システム
売り上げランキング: 725

Arduino Uno
Arduino Uno
posted with amazlet at 11.08.02
スイッチサイエンス
売り上げランキング: 10101
ラベル:android DDMS ADB PIC
posted by いしいっち at 20:55| Comment(2) | TrackBack(0) | Android開発関連 | このブログの読者になる | 更新情報をチェックする

2011年07月23日

LuaridaUIサーバとMicrobridge/PICでAndroid側制御アプリレスで機器を作る

先週はAndroid Bazaar and Conference 2011 Summerに行かせていただきました。そのあたりの記事是非書きたいんですけど、なかなか手が回ってなくて。。。

ところで、たろサさん作のAndroid用Lua言語実行環境LuaridaはUIとインタプリタがソケット接続で実現されています。UI側がサーバなので、例えばLuaインタプリタ以外からUIサーバとして接続されることもありなんじゃないか、Microbridgeからの接続もアリなんじゃないかとたろサさんが仰っていたので、実験してみました。

P1080597.JPG

たろサさんから、LuaridaからUIサーバ部だけに切り出された Marida と、ソケット通信のコマンドセットの一覧をいただいていたので、実験はスムースに進みました。
Luaridaは内部で60081番ポートを使用しているようです(netstatによると)。Maridaも同様、TCPの60081番で待ち受けしています。そこに対して接続し、規定のコマンドセットを投げるわけです。

今回は、実験にAndroid 1.6端末のIS01を使用しています。制御対象は、過去の記事でも使用したサーボを連結したロボットもどきです。マイコンボードは日本Androidの会神戸支部オリジナルマイコンボードである、「PIC ADK Miniboard」を使用しています。もちろん神戸支部でポーティングしているMicrobridge/PICが焼いてあります。

PIC側実装としては、まずAndroid端末と接続した後、ADB shellを使用し、Maridaのメインアクティビティを起動するインテントを投げます。Marida起動後は上述の60081ポートと繋ぐようADB daemonにお願いして、あとはMaridaと繋ぎます。

シーケンス図、軽く書いたレベルですみませんが、貼り付けます。
Marida-connection.png

動画はこちら。





Android NDKネイティブプログラミング―Native Development Kit
出村 成和
秀和システム
売り上げランキング: 725



Arduino Uno
Arduino Uno
posted with amazlet at 11.08.02
スイッチサイエンス
売り上げランキング: 10101

posted by いしいっち at 19:07| Comment(0) | TrackBack(0) | Android開発関連 | このブログの読者になる | 更新情報をチェックする