Kobe GTUG - Code Sprint成果 NDKからUSB Host APIが使えないか模索してみる

※ざっとまとめたので読みづらく、最終結論もでていません。制限時間内の成果なのでご勘弁を。


今日のCodeSprintの成果

Kobe GTUG - Code Sprintのイベント内容についてはこちら
https://groups.google.com/forum/?fromgroups#!topic/kobe-gtug/xioaw3Suj9k



んでボクが設定した課題は「NDKからUSB Host APIを使えるようにする」

現状わかってること

  • NDK経由でUSB Host APIが叩ける(Android4.0系をビルドしてできたlibusbhost.soとusbhost.hを使用)
  • NDKからUSBを直接オープンしたい->パーミッションではじかれる


てことで他にアクセス方法がないか模索。
改めて、NDKのbulktransferに必要な変数を見てみる。

 [NDK]
 int usb_device_bulk_transfer(struct usb_device *device,
                             int endpoint,
                             void* buffer,
                             int length,
                             unsigned int timeout)

キモは

 [NDK]
 struct usb_device *device


じゃあ usb_device *deviceはどのように定義するのか?

 [NDK]
 struct usb_device* device = usb_device_new(deviceNameStr, fd);
  • deviceNameStrはデバイス
  • fdはファイルデスクリプタ


このファイルデスクリプタはopenしないとゲットできない。


Java側を探してみると以下APIがあることがわかってきた

 [Java]
 UsbDevice Class

 String	 getDeviceName() : Returns the name of the device.


 [Java]
 UsbDeviceConnection Class

 int	 getFileDescriptor() : Returns the native file descriptor for the device, or -1 if the device is not opened.
 byte[]	 getRawDescriptors() : Returns the raw USB descriptors for the device.

この3つのAPIでゲットした値をNDKへパスしてやればいけるんじゃね?


つまり

 [Java]
 strDev = UsbDevice.getDeviceName();
 
 desc = UsbDeviceConnection.getFileDescriptor();
 or
 desc = UsbDeviceConnection.getRawDescriptor();

↓
JNI
↓

 [NDK]
 struct usb_device* device = usb_device_new(strDev, desc);
 usb_device_bulk_transfer(device,1,readbuf,4096,0);

てなかんじでたたいてやればいけるかも!?

んで、試しにFileDescriptorとRawDescriptorを
Logcatへ出してみる。キャラクタで見てなにかわかるかはわからんけども

コード

 [Java]
 Log.d(TAG,"FileDescriptor : "+connection.getFileDescriptor());
 Log.d(TAG,"RawDescriptor  : "+connection.getRawDescriptors());

結果

 [Logcat]
 FileDescriptor : 37
 RawDescriptor  : [B@407a32c8

FileDescriptorは整数
rawDescriptorの方はポインタ?


っていうところまでが今日の成果。


あとは実験してみないとなんともわからん。
肝心のデバイスを会場に持ってくるのを忘れてしまったので
次のCodeSprintか、暇を見て進めます。

FTDIのFIFO機能を使ってAndroidとFPGA間を高速USBデータ転送

AndroidとFTDIシリアル通信ができたできた、ということで
次はFIFO機能を使ってAndroidFPGA間を高速データ転送できるようにしました。
高速といってもFPGAAndroidの転送で今のところ700KByte/sec程度です。


繋ぎはこんな感じ。

秋月の「FT245RL USBパラレル変換モジュール」でテストしてます。
http://akizukidenshi.com/catalog/g/gK-01799/


AndroidのソースとVerilogHDLソースはこちら
github : https://github.com/ksksue/Android-FPGA-FIFO-Transfer
といってもまだ第三者が使えるように整えていません。


詳細は5/19の関西FPGA・DE0勉強会で話す予定。
ATND : http://atnd.org/events/28025

てことでお話しました。(2012/5/19)
http://www.slideshare.net/KeisukeSuzuki1/androidfpgafifo


基本的に更新情報はこのページでしていくつもりです。
twitter: @ksksue で更新するたびにつぶやきます。

Beagleboard-xMのブートローダ(x-loader, u-boot)がrev.Bとrev.Cで処理を分岐しているところを眺めてみる

ネタは古めなんだけどちゃんと調べてなかったので掘り返してみた。


iseroidさんのblog
http://iseroid.blogspot.com/2012/02/beagleboard-xmicsandroid40revb.html
を読んでいると
Beagleboard-xMのrev.A/Bとrev.Cの違いは
Beagleboard-xMの電源を入れた時にUSBハブチップの出力電源がハードウェア的に
ONになっているのがrev.A/B
OFFになっているのがrev.C
ということらしい。
つまりrev.CではUSBハブの電源をONにしてやる処理が必要になる。


このあたりどこで処理を分岐しているのか、ソースコードを眺めてみた。
結論から言うとrev.A/Bとrev.Cの間で処理を分岐させているというよりも、
rev.Cで変更のあった箇所の処理をrev.A/Bでも(問題ないから)かぶせて実行しているようだ。

続きを読む

FTDIシリーズのUSBデバイスデスクリプタ情報出してみた


FTDIシリーズのデバイスデスクリプタの情報を lsusb -v で出してみた。

  • FT232RL
  • FT245RL
  • FT232H ※
  • FT2232C ※
  • FT2232D
  • FT2232HL
  • FT4232HL
  • FT230X

※@yakagawaさんご協力

続きを読む

Android x Beagleboard-xM x USBカメラ で OpenCVリアルタイム画像処理 〜AndroidビルドからOpenCVサンプル実行まで〜


香川高専で開かれる「組込みAndroid入門講座」向けの記事です。
http://www.kagawa-nct.ac.jp/newfile/20120201101107_1.html


だれでも自宅でカンタンにできちゃうので情報公開しておきます。

USBCameraつなげたBeagleboard-xMにAndroidOpenCVな記事です。

Step 1. AndroidBeagleboard-xMへ載せる
Step 1-2. Androidが起動するかチェック
Step 2. USBカメラを使うためKernelのコンフィグを変更しリビルド
Step 2-2. KernelをSDへコピーして起動
Step 3. OpenCVデモ実行


準備するもの

  • PC(以下推奨スペック)
  • Beagleboard-xM(現時点でrev.Cで確認)
  • 4GB以上のmicroSD(xM付属のものは読み込みが極端に遅いため、できれば別で用意する。オススメはVerbatim 4G class 6が安くて速度もそこそこ。Panasonic 4G class 4。ちなみにT社製は当たり外れがあるから避けたほうがいい。)
  • USBシリアル変換ケーブル
  • USBマウス
  • USBカメラ(UVC対応のもの。2000円以下のカメラで十分)
  • HDMI-DVIケーブル
  • USBケーブル(オスA-miniB)
  • microSDカードリーダ


以下、作業手順です。

続きを読む

第0回 関西FPGA・DE0勉強会やってみた

第0回 関西FPGA・DE0勉強会を梅田で開催しました。
ATND跡地:http://atnd.org/events/23410
ATND立てた初日で20人定員がいっぱいに。急遽50人部屋へ変更して最終的に46人となりました。
当日はみなさん楽しんでもらえたようで開催して本当によかったと思います。


みんなどんなところに関心があるのか、なぜこれだけ人が集まったのか
というのはボクが知りたいことの一つだったんですが

そんなかんじです。


さておき、当日の資料をまとめました。


第0回 関西FPGA・DE0勉強会

FPGA・DE0でできること : KSK (@ksksue)

Androidの部
DE0-nanoボードとAndroidを繋げちゃう : @iseroid さん
Xilinx ADK/MicroBridge FPGAボードを設計しちゃう : バサロ(@basaro_k) さん

画像処理の部
Open-source HardwareとOpen-source Softwareで自宅でSoCの開発 : くりへい(@kurihei)さん
嫁にも出来る画像処理スタートアップ : 大中 さん(ブログへのリンク。資料ナシ)

LTの部
てっぺん目指すよ!〜 DE0でLet's Start!! 〜 : アルテラマスターP(@s_osafune) さん
SmartFusion ミックストシグナルFPGAへの誘い : 黒兎(@kurousagi_tsu)さん
FPGAで再現するレトロPC(とりあえず編) : Oh!石 さん(※飛び入りLTのため資料ナシ)
日本橋ものづくり祭り MAID : とびすけ(@tobisuke_r)さん
Androidとの接続技法 〜JAG神戸MLより、概説と今年の方針立て〜 : 吉田(@dietposter)さん


参考:http://www.akiron.com/FPGA/ツイッターで情報寄せてくれた @tako73615 さんの記事)


当日のTogetter : http://togetter.com/li/242080 (黒兎さんがまとめてくれました)


UStream(きむしゅ さんthx)※撮影内容に不都合がある場合は@ksksueまで連絡してください。

「DE0でできること」の最後のデモあたり〜



ラストの写真撮影会〜


最後はみなさんが持ってきたハードを並べて写真撮影会

DE0何枚あるんだw


さいごに会場貸出・準備などしてくださった吉田さん
懇親会担当のバサロさん
そして会場に来てくださったみなさん
楽しい時間をありがとうございました。
次回もよろしくお願いします!


以下、購買情報

続きを読む