簡単なサンプルを実行しようとしてみたが、デバイスが出てこない。
おかしいなといろいろ調べたら、既存のドライバがデバイスをつかんでいるため、libusb側には何の情報も来ないということだった。
ドライバを入れなおすことも少しやってみたものの、うまくいかない。
う~ん、困ったぞ。
usbをつかうことをいったんやめて、シリアル通信にしてみるか。。。
それで、ruby-serialport-0.7.0を入れて動かしてみたら、ruby-1.8.xのDLLを要求された。ruby-1.9.1じゃないのか。
ソースをextconf.rbからMakefileを作成して、VC++でコンパイルを試みたが、エラーだらけでさっぱりわからない。
またしても、困った。
それで、仕方なく、wincom.rbというライブラリを使うことに。このライブラリは、windows専用なのだ。プラットフォーム依存バリバリ。でも、仕方ない。
アクエリアスの時代到来、そして新たな時代に合った文明や科学、人のありかたなどを探求してみたい。そして、太陽の国である日本は地球人類のリーダー的存在となる必要があります。その一助を担えれば幸いです。
2009年8月23日日曜日
ruby-usbのコンパイルが出来た

画像のようなエラーが出ていたため、libusb 用のライブラリがコンパイルできないと思っていたのだが、意外と簡単に解決した。
以下に手順を書くことにする。
- はじめに
- ソース入手
それから、libusb-win32も入手しておく。
これらのソースファイルを適当な作業用ディレクトリに展開する。
libsub-win32は、usb.hとlibusb.libは面倒だからruby-usbと同じフォルダーにコピーして配置した。
- Makefile作成
ruby extconf.rb
を実行する。するとMakefileが出来上がる。
このMakefileをエディターで開いて、
LIBS = $(LIBRUBYARG_SHARED) oldnames.lib user32.lib advapi32.lib shell32.lib ws2_32.lib libusb.lib
のように、行の最後にlibusb.libをつける。これで先ほどのエラーが出なくなる。要するにエラーの原因はライブラリが読み込めてなかったということだった。
- コンパイル&インストール
> nmake
> nmake install
最後に、usb.h と libusb.lib を rubyのインストールされているディレクトリ配下のinclude/ruby-1.9.1とlibにそれぞれ手で配置した。
irbを起動して、require 'usb'すると-->trueと返事が返ってきた。
これがつかえるとなると、DLなどを使ったコードを書かなくても済むに違いない。
スペアナGigaSt v5をrubyからコントロール出来るか
GigaSt v5というスペアナはUSBでPCとつながっている。だからrubyがUSBポートをコントロールできれば、スペアナのデータが取り出せるはずだ。
それで調査してみたのだが、WindowsXPのSP3以降には、MS純正のUSBドライバ(WinUSB.DLLとWinUSB.sys)が入っていることがわかった。
参考:
http://www.wdddc.net/node/25
参考URLの記事によると、以下のようなソフトウェア構成になるらしい。
[ユーザーアプリケーション](exe)
↑[ユーザーリンクライブラリ](WinUSB API群を利用するdll)
↑[WinUSB.DLL](Microsoft社提供WinUSB API群)
↑[WinUSB.SYS](Microsoft社提供WinUSB デバイスドライバ)
↑[ユーザーデバイス](ハードウェア)
それで、この絵の下から4番目(上から2番目)の部分にあたるDLLはどうするのかしら・・・とさらに調べた。
すると、libusb というユーザーモードのドライバが存在するらしい。それも、linux, MacOSX, WindowsをサポートしてLGPLで公開されているらしい。Windows版は、LibUsb-Win32。素晴らしい。
すると、あとは、rubyからこのLibUsb-Win32をコントロールできればいいわけだ。
rubyからDLLを呼び出す方法は2つほど存在するようだ。ひとつはWin32APIというライブラリを使う方法。もうひとつは、DLというダイナミックリンクライブラリを呼び出すためのCラッパーライブラリを使う方法。
後者の方が新しいらしく、OSに依存しないようにできるとか。特に、今回はlibusbというライブラリを使うので、このDLを利用したほうがよさそうだ。
ちなみに、rubyからlibusbドライバを呼び出すためのlibusbというライブラリも存在するのだが、こちらはWindowsではコンパイルできなかった。
それで調査してみたのだが、WindowsXPのSP3以降には、MS純正のUSBドライバ(WinUSB.DLLとWinUSB.sys)が入っていることがわかった。
参考:
http://www.wdddc.net/node/25
参考URLの記事によると、以下のようなソフトウェア構成になるらしい。
[ユーザーアプリケーション](exe)
↑[ユーザーリンクライブラリ](WinUSB API群を利用するdll)
↑[WinUSB.DLL](Microsoft社提供WinUSB API群)
↑[WinUSB.SYS](Microsoft社提供WinUSB デバイスドライバ)
↑[ユーザーデバイス](ハードウェア)
それで、この絵の下から4番目(上から2番目)の部分にあたるDLLはどうするのかしら・・・とさらに調べた。
すると、libusb というユーザーモードのドライバが存在するらしい。それも、linux, MacOSX, WindowsをサポートしてLGPLで公開されているらしい。Windows版は、LibUsb-Win32。素晴らしい。
すると、あとは、rubyからこのLibUsb-Win32をコントロールできればいいわけだ。
rubyからDLLを呼び出す方法は2つほど存在するようだ。ひとつはWin32APIというライブラリを使う方法。もうひとつは、DLというダイナミックリンクライブラリを呼び出すためのCラッパーライブラリを使う方法。
後者の方が新しいらしく、OSに依存しないようにできるとか。特に、今回はlibusbというライブラリを使うので、このDLを利用したほうがよさそうだ。
ちなみに、rubyからlibusbドライバを呼び出すためのlibusbというライブラリも存在するのだが、こちらはWindowsではコンパイルできなかった。
登録:
投稿 (Atom)