2013/09/01

WindowsでUSBを簡単に扱うのはなにがよいやら

ときどき、WindowsでUSB機器を扱いたいことがある。
まあ、私の場合はPaSoRiなのだが、バルク転送とかしたいわけだ。

そのとき、どうやるのが一番簡単なのか、まだ決め切れていない。
今のところlibusbを使っているのだが、これを他の人に用意してもらうのは、敷居が高いような気がしている。
敷居が高いと、使ってもらえない、ということになり、それは寂しいと思うのだ。


では、もっと容易そうな環境となると、WinUSBが出てくる。
WinUSB自体は、XPの途中から入ったしくみで、アプリからも制御ができる。
うん、これならよいだろう、とC#から使ってみようとしたが、なかなかいいライブラリがない。

winusbnet - WinUSB .NET wrapper library - Google Project Hosting
WinUsbNet: A managed interface to WinUSB.sys - Home

だいたい、この2つが出てくる。
名前も、大文字小文字が違うだけだ。
だから同じものだろうと思い込んでいたのだが、そうではなかった。

そして困ったことに、どちらもビルドできるサンプルプロジェクトがない。
codeplexの方はサンプルソースはあるが、プロジェクトでは提供されていない。
自分で周りを埋めてしまえばいいんだろうけど・・・手間がかかるのでやりたくない。

デバイスをオープンするところまではできたが、これからまたPaSoRiへのアクセスを移植していくかと思うと、その気力がなくなりそうなことに気付いた。


じゃあ、やはりlibusbに戻るか、と思って探すと、これが出てきた。

LibUsbDotNet C# USB Library | Free software downloads at ...

そもそも、WinUSBを使おうとlibusbを使おうと、標準のPaSoRiドライバを差し替える必要があるので、敷居はどっちにしても高そうだ。
じゃあ、もうlibusbでもいいかもしれん。

NuGetではlibusbのパッケージが見つからないので、自分でインストールすることになる。
(ちなみに、codeplexじゃない版はNuGetにある。他にもFTDIのD2XXインターフェースとかあった。)

じゃあ、libusbにしようか、と思ったが、また考え込んでしまった。
さっきまでは、WinUSBからlibusbへの移植が面倒だとだけ考えていたが、今度はC/C++からC#への変換になるから、むしろそちらの方が面倒だ。
ならば・・・C++/CLIでライブラリにしてしまう、というのがよさそうな気がした。


C++からC++/CLIなら楽だろう、と思ったが、そうではなかった。
CLIになると、^とか、マネージ/アンマネージとか、よく知らない単語が出始めた。

うーん、Windowsでばしばしコーディングするなら覚えるけど、めったに使わないのに勉強するのはめんどくさい・・・。

 

そんなわけで、結局Qtを選択しましたとさ。
めでたしめでたし。

2 件のコメント:

  1. ドライバのインストールですが、libusb, WinUSBと書かれているのが libusb0.1, libusb-1.0(WinUSB) に該当するのなら、zadig というソフトでドライバのインストールをすると比較的楽にインストールできます。がどうでしょう?
    http://sourceforge.net/projects/libwdi/files/zadig/

    返信削除
  2. コメントありがとうございます。

    すみません、こちらの記事にはリンクしてなかったですが、
    私もzadigを使っています。
    あれは、いいですよね!

    zadigがものすごくマイナーだったらどうしようかと思っていましたが、
    使われている人がいて、よかったです。

    返信削除

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。