CC/USB を Windows で使うことを想定してテストプログラムを書いてみた。 なお、USB ドライバーは、前に述べたように、 柏野 政弘氏 による 汎用 USB driver UUSBDで動作確認できたので、これを使うことにした。
プログラムは、なるべく単純で、かつ実際のデータ収集を想定して、 以下のような動作をすることとした。
KEK 回路グループが開発した CAMAC モジュールに、24bit Switch Register なる モジュールがある。パネル上には 24bit の トグルスイッチと 24bit の LED があり、スイッチの読み取りと、 LED を制御するレジスタへの書き込みができる。また、パネル上に 押しボタンがあり、これを押すとLAM が発生する。このモジュールを 使うことにした。すなわち、
テストした時の様子を写真1に示す。また、モジュールと USB アダプタを写真2に、 プログラムの画面を写真3に示す(プログラムは後で述べる)。
写真1:テストの様子。 右下のディスプレーの左上の窓がこのテストのプログラム。USB 接続している PC は画面の右にあるが、写真には写っていない。
左の写真をクリックすると 大きい写真(2560x1920ピクセル)が表示される。写真2:向かって一番左端のモジュールが Switch Register。 モジュールの右下にある黒ボタンを押すと LAM が発生する。この時テストプログラムが トグルスイッチを読み取り、LED に同じ値を表示する。
左の写真をクリックすると大きい写真(2560x1920ピクセル) が表示される。写真3:プログラム実行画面。LAM の発生を検知し、トグルスイッチを 読み取り LED を点灯させると同時にそのデータ値を画面(Data)に表示する。別スレッドで 現在時刻の表示も行っている。
Windows で使いたい理由の一つには GUI(Graphical User Interface) で 使いたいということがあるだろう。一方、デバイスを扱うので、 WIN32API の利用を完全に覆い隠すのは困難であると思われる。 ところが GUI をWIN32APIだけで作り上げていくのは、かなり鬱陶しい 作業である。通常は Microsoft が提供する Visual Studio などの 開発環境を使うことになる。しかしながら、この程度のプログラムに 利用するには、かなり大げさすぎる気がする。
Microsoft は Java によく似た .NET Framework なるものを提供している。 この SDK (Software Development Kit) も無償で配布されている。これを 利用すると、ほとんど Java 感覚でプログラムを書くことができるばかり でなく、WIN32API とのインターフェースも簡単にとることができる。 そこで、今回は .NET Framework 環境下で動く GUI プログラムを SDK のみで 作成することにした。実際に使用した言語は C# である。
常時監視は適当に Sleep() を入れて システムに制御を返してやる必要がある。そうしないと、監視モードに入ったが 最後、LAM が発生するまで応答無しの Window ができることになる。
ここで、最大の問題は、CC/USB Adapter には LAM の発生を通知する機能が 無いことである。つまり、この機能を実現するには LAM を常時監視して おくしかない。この常時監視をドライバーで行うか、ユーザのアプリケーション プログラム側で行うかは考察の余地があるが、ドライバーに手を入れるのは 大変そうなので、ここではユーザのアプリケーションプログラムの中で 監視を行うことにした。
このプログラムを