mbedをADKクローンにしたい
Page last updated
03 Jun 2011 , by
makoto abe .
12
replies
android
2011/05/26 初版
2011/05/27 read/write両方試しました。
2011/05/28 sendStringの動作についてfutabaさんに修正いただきましたm(_ _)m
その他XOOM(and nexus S)への動作対応を図りました。
2011/06/04 Android Open Accessory のライブラリ化+demokitに。
watanabeさんから頂いたソースを元にしていますm(_ _)m
VIDEO
とりあえずADKが動いたのですが、動作が不安定です(T_T)
修正いただけるとありがたいです。
以下ソースです。
Android Open Accessory Library化してみました。
バルク転送の使い方が分かっていないため、相変わらず動作は不安定。
I do not understand the usage of the bulk transfer.
Please teach someone.
old program
p21〜p23までをスイッチをつなげてみました。
mode(PullUp)にしてます。
動かし方について
nexus oneで完璧に動かす方法を見つけ出しました。w
demokitを起動しているならメニューからQuitを選択し終了しておく こと
android本体をmbedと接続する
mbedのリセットを押してmbedが起動するまで待つ。(10sくらい)
demokitを起動
demokitを遊びきったら必ずメニューからQuitを選択して終了する こと
現在の状況
Nexus One 2.3.4 成功
Nexus S 2.3.4成功!
XOOM XOOMと接続状態でmbedをリセット後、一旦アプリを終了させて再起動で動作。
12 comments on mbedをADKクローンにしたい:
abe00makoto
#
27 May 2011
sendStringが機能してないようです。
仕様通りに値をセットしようとすると以下のようなログが
send_string start(1,0,Google, Inc.) 13
USB_IRQHandler UnrecoverableError Please reset
USB_IRQHandler UnrecoverableError Please reset
abeさんのプログラム試させて頂きました。
僕自信、良く理解していない状態で申し訳ないのですが、
sendStringの const char *str を、そのままUSBControlTransferに渡すのではなく、
バッファを作ってコピーしてから渡すとHOST_TO_DEVICEが動きました。
u8 buffer[255];
strcpy((char*)buffer,str);
USBControlTransfer(device,
HOST_TO_DEVICE |REQUEST_TYPE_VENDOR|RECIPIENT_DEVICE,
ACCESSORY_SEND_STRING,
0,//value
index, //index
buffer,
strlen(str)+1);
こんな感じです。
僕の環境(Nexus One)では、これで安定して接続が出来るようになりました。
abe00makoto
#
27 May 2011
有難うございます。プログラムに反映させていただきました。
NexusSでも起動できましたー.
対応お疲れ様です!
abe00makoto
#
28 May 2011
NexusSでも起動できましたー.
対応お疲れ様です!
試していただいて有難うございます。
動いてよかったです。notebookに反映させていただきました
abe00makoto
#
28 May 2011
現状XOOMがちゃんと動かないっす。
sendString(addr, ACCESSORY_STRING_MANUFACTURER, manufacturer);
sendString(addr, ACCESSORY_STRING_MODEL, model);
sendString(addr, ACCESSORY_STRING_DESCRIPTION, description);
sendString(addr, ACCESSORY_STRING_VERSION, version);
sendString(addr, ACCESSORY_STRING_URI, uri);
sendString(addr, ACCESSORY_STRING_SERIAL, serial);
usb.ctrlReq(addr, 0,
USB_SETUP_HOST_TO_DEVICE |
USB_SETUP_TYPE_VENDOR |
USB_SETUP_RECIPIENT_DEVICE,
ACCESSORY_START, 0, 0, 0, 0, NULL);
while (usb.getUsbTaskState() != USB_DETACHED_SUBSTATE_WAIT_FOR_DEVICE) {
max.Task();
usb.Task();
}
上記のコードはarduinoのソースの抜粋なんですが、
while()のコード部分がmbed上でどう実装すればいいのか解らず放置しているのが原因かと。
現状XOOMがちゃんと動かないっす。
sendString(addr, ACCESSORY_STRING_MANUFACTURER, manufacturer);
sendString(addr, ACCESSORY_STRING_MODEL, model);
sendString(addr, ACCESSORY_STRING_DESCRIPTION, description);
sendString(addr, ACCESSORY_STRING_VERSION, version);
sendString(addr, ACCESSORY_STRING_URI, uri);
sendString(addr, ACCESSORY_STRING_SERIAL, serial);
usb.ctrlReq(addr, 0,
USB_SETUP_HOST_TO_DEVICE |
USB_SETUP_TYPE_VENDOR |
USB_SETUP_RECIPIENT_DEVICE,
ACCESSORY_START, 0, 0, 0, 0, NULL);
while (usb.getUsbTaskState() != USB_DETACHED_SUBSTATE_WAIT_FOR_DEVICE) {
max.Task();
usb.Task();
}
上記のコードはarduinoのソースの抜粋なんですが、
while()のコード部分がmbed上でどう実装すればいいのか解らず放置しているのが原因かと。
USBホストのステータスフラグのポーリングですよね・・・
mbedのUSB HostはDMAとか持っててややこしくなってますよね.コントロール転送の時にDMA使っているとすればDMA割り込みで検知するのが本来なのですが,実際どうやってるんでしょう
僕はその辺で挫折しました...DMA使ってもポーリングで検知していいのかな
abe00makoto
#
03 Jun 2011
XOOMに対応して、ACCESSORY_STARTを送信したタイミングで USB_Initを呼び出すようにしてみました。
バルク転送の使い方が分かっていないので、動作の不安定さは相変わらずです。
I do not understand the usage of the bulk transfer. Please teach someone.
Doesn't work with Galaxy S2 i9100GT with XXKH3 2.3.4
興味津々で試してみました.
実機はHTC Desire (Softbank X06HT改 Rom:CM7 Nightly GRJ90 Gingerbread 2.3.5)です.
mbedのリセット,USBの挿抜,アプリの再起動を何度か繰り返していると数回に一回ですが動作しました.
あきらめずに粘って良かった・・・ ちなみにソースは無改造です.
リセットを使わずに使えるようになったので報告します。まず、端末のアプリケーションの管理でdemokitを選び、「設定を消去」します。起動時にUSBアクセサリのデフォルトとなっているとうまくつながらないようです。ですので、チェックボックスははずしたまま毎回OKボタンを押すようにします。次にmbedのソースでログをprintf出力しているところを全てコメントアウトするか、AndroidAccesory.hのADKLOGを0に変更します。USBHost.cppのUSBLOGも0に変更します。mbedのログ出力をやめるだけです。次に端末のアプリdemokit.apkのソースのDemoKitActivity.javaのopenAccesory()とonResume()でnullとなる場合にすぐにreturnしている部分を修正し、while文で待つようにすると、USBを指したときにdemokitが起動して、動作するようになります。 /media/uploads/androidfun/demokitactivity-changed.txt
Please log in to post comments.
sendStringが機能してないようです。 仕様通りに値をセットしようとすると以下のようなログが