ラベル ruby の投稿を表示しています。 すべての投稿を表示
ラベル ruby の投稿を表示しています。 すべての投稿を表示

2009年8月30日日曜日

SnoopyPro

USBのパケットをキャプチャするソフト。

PC上のアプリは、USBシリアル通信ドライバを使って、見かけ上シリアル通信を行っている。

一方、GigaStのマニュアルには、送・受信内容のドキュメントがひとつある。このドキュメント以外に何らかの通信を行っていたら、ソフト開発そのものが無理になってしまう。その心配を解消するため、USBのパケットをキャプチャすることにした。

SnoopyProはフリーソフト。

早速、使い方が書いてあるサイトを見ながらパケットを見てみた。

解析の結果、他の通信は見つからなかった。ドキュメントに書かれたデータを単純に送信・受信しているだけのようだ。

これでひと安心。ソフトの続きをつくってみるか。

ruby-usbが使えない

簡単なサンプルを実行しようとしてみたが、デバイスが出てこない。

おかしいなといろいろ調べたら、既存のドライバがデバイスをつかんでいるため、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 用のライブラリがコンパイルできないと思っていたのだが、意外と簡単に解決した。


以下に手順を書くことにする。

  • はじめに
まずは、VisualC++が動くように /bin/vcvars32.bat を実行して環境変数を設定する。

  • ソース入手
ruby-usb - libusb binding for Ruby のサイトから ruby-usb-0.2.tar.gz をダウンロードする。


それから、libusb-win32も入手しておく。

これらのソースファイルを適当な作業用ディレクトリに展開する。

libsub-win32は、usb.hとlibusb.libは面倒だからruby-usbと同じフォルダーにコピーして配置した。

  • Makefile作成
READMEに書いてあるとおり、

ruby extconf.rb

を実行する。するとMakefileが出来上がる。

このMakefileをエディターで開いて、

LIBS = $(LIBRUBYARG_SHARED) oldnames.lib user32.lib advapi32.lib shell32.lib ws2_32.lib libusb.lib

のように、行の最後にlibusb.libをつける。これで先ほどのエラーが出なくなる。要するにエラーの原因はライブラリが読み込めてなかったということだった。

  • コンパイル&インストール
READMEの続きを実行する。ただし、VCなのでmakeじゃなく、nmakeとなる。

> 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ではコンパイルできなかった。

2009年8月17日月曜日

スペアナ(GigaSt v5)の画面表示ソフト



以前、購入したスペアナGigaSt v5(画像はステップアッテネータ製作時のもの)の画面表示ソフトを先日コンパイルしたRuby1.9.1+Shoesで作れないかなーと考えている。

http://www.wa.commufa.jp/gigast/GigaSt5/GigaSt-v5.html

スペアナというすごく高級なものをアマチュアレベルで購入できるほどすごく安価に提供されている青山さんという方はとても素晴らしいと思う。でも、表示ソフトは.Net系のもの(VBかな?)で、ソースは非公開なのだ。

このスペアナを自動化してみたり、もっともっといろいろと活用できないものかと考えると、画面をカスタマイズしたり、データを加工したりする必要がでてくる。だから、オープンソースじゃないのがとても残念。

しかし、幸いにも、USBとのインターフェース仕様が公開されているので、このデータを拾って画面に表示するぐらいなら出来るかなー、、、プログラマーとして、やってみる価値はあるかなー、、、、と考えている。作ってみたら、いろいろとスペアナについても勉強できることだろうし。


言語はRuby。これは今お気に入りだから。

このRubyは、困ったことに標準のGUIがTkぐらいしかついていない。なので、たいした物はつくれないのだ。それで何か良いGUIライブラリーはないものかと探してみた。

参考サイト:
http://www.pressure.to/ruby_gui_survey/index-ja.html
http://www.infoq.com/jp/news/2007/09/ruby-shoes

候補はいくつかあったのだが、Shoesというのが目についた。

http://www.shoooes.net/

比較的新しいRuby用のフリーのGUIで他に比べて活発に活動しているみたいだった。欧米では人気があるらしいが、日本語ではあまり知られていないようだ。日本語の情報源がほとんど見当たらないのが若干ネック。しかし、画面のソースの書き方が非常にシンプルな感じ。Cで書かれているらしいし、Windows、MacOS、Linux用が提供されている。スペアナがLinux上で動くというのもなかなか面白いかなとも思う。

ただ、リアルタイムで画面を更新するものだけに、どれだけ使えるのかは、実際に作ってみなければわからない。

2009年8月1日土曜日

Visual C++ 2008 Express Editionでruby1.9.1をコンパイル

今日は、このBlogのテーマとは少し脱線。

仕事でrubyを使ってツールを作っているのだけれど、どうもJava使いの人から不安定だとかいろいろとクレームをいただいている。環境は、Windowsなのでmswin版を使っている。それで、最新のパッチを適用したいのだけれども、mswin版のコンパイル済みが頻繁に更新されていないのだ。ということは、自分でコンパイルするしかないなぁと。

ググッてみたら、意外とコンパイルされている方がいることがわかった。

http://d.hatena.ne.jp/anon_193/20090110/1231556310

http://d.hatena.ne.jp/Kazzz/20090313/p1

ありがたいことに、MSがVisual C++ 2008 Express Edition を無料で提供してくれている。さっそくインストール。

つぎにRubyの1.9.1の最新バージョンをGET。ついでにzlibも。zlibはrubygemsに必要なので。

Rubyのソースを展開して、コンパイル。約30分ほどで終わった。
nmake test を実行すると、いくつかエラーがでているようだったが、最後まで通ったので無視。
nmake install を実行。ライブラリも生成されていく。


約1時間ほどで作業が終わった。

このあとrubygemsをいれて、win32-apiなどをチェックしてみようと思う。