No Such Blog or Diary

«Prev || 1 | 2 | 3 |...| 1209 | 1210 | 1211 |...| 1313 | 1314 | 1315 || Next»

libusb-win32 を使ってみる

USBデバイスのハード部分が出来上がったので次はソフト部分.どうやら libusb-win32 というフリーのライブラリがあるようなので利用してみる.とりあえず inf ファイル作っとかないとデバイスが使えないので libusb-win32-device-bin-0.1.10.1.tar.gz とかの中にある inf-wizard.exe で生成.プログラム自体は AVR USB のサンプルコードを参考に作成.無事エコーテスト成功.あとはしつこくポーリングするか受信待ちが出来るなら待ちをしてやればおわる.

libusb を使ったプログラムの流れ(簡易版)は以下のとおり.何より先に usb_init(); して libusb を初期化.んで,usb_find_busses(); usb_find_devices(); でデバイスを探して,

for(bus=usb_get_busses(); bus; bus=bus->next){
    for(dev=bus->devices; dev; dev=dev->next){

のネストループで全デバイスを走査する.走査時に,dev->descriptor.idVendor, dev->descriptor.idProduct をチェックして,ベンダIDとプロダクトIDがマッチしたら handle = usb_open(dev); で開けてみて,

usb_control_msg(handle, USB_ENDPOINT_IN, USB_REQ_GET_DESCRIPTOR, (USB_DT_STRING << 8) +  dev->descriptor.iVendor, 0x0409, buffer, sizeof(buffer), 1000);
usb_control_msg(handle, USB_ENDPOINT_IN, USB_REQ_GET_DESCRIPTOR, (USB_DT_STRING << 8) +  dev->descriptor.iProduct, 0x0409, buffer, sizeof(buffer), 1000);

でベンダやプロダクト名を確認する(同一IDに複数のデバイスがあってプロダクト名で識別しないとならないので面倒.usb_get_string でいい気もする).

外れたら usb_close(dev); しとく.

デバイスが見つかったら usb_control_msg でデータのやり取りを.

他の endpoint 開いたほうがいいけど… そんな余裕は無い.

Tiny2313一匹目死亡?

反応が無い,屍のようだ.ISPでほとんど0しか反応が返ってこない.何が原因だったのか特定できてないのが少々不安だけれどもとりあえずまた殺してもいいように秋葉で二つほど購入してきた.プログラムメモリが足りないような気がするので無駄な出費となるかも知れないが…

えー

とりあえず聞かれたので思い出してみた.■アニメの射手座の日の脚本家が、雪山を書くと の元ネタは「悩んでられない八方塞がり?」のpp.147--148 であると.どの話だったかを思い出すのに10分以上はかかったと思われる.あほだ…

あれ…

起きてみたら午後だった.とりあえずレポート書いて投げてみる.変換コードのサイズによる実行時間の変化も調べたいけどコードサイズをうまく変えるの難しいんだよね… どうしようかなやむところ.

ついでに佐川のメール便はもっと速くなれと.

ふつうにおそいらしい

1MB刻みでサイズを変えてみたら線形に時間を食っている.どうやら本質的に遅いらしい.もう少しデータを取ってレポートは明日書こう.ところで世間で使われるXMLのサイズってどのくらいの大きさなのだろう?

XMLでかすぎなのか?

逆向きの変換に3分かかるって… 変更があったかどうかの判定に文字列比較を使っていたら死ねるような気もするが,なにがこんなに遅いのやらよくわからない.とりあえずXMLがでかすぎて極端に遅くなってるのか小さなものでも遅いのか調べる必要がありそうだ.

«Prev || 1 | 2 | 3 |...| 1209 | 1210 | 1211 |...| 1313 | 1314 | 1315 || Next»
Search
Feeds

Page Top