前提
- 製品をいじめる試験で、たくさん電源OFF/ONを実施したい!けど手動ではやりたくない。
- 手元にPDS-Aシリーズという安定化電源とIF-70GUという別売りのコントロールボードがある。
- Windows 10で動かしたい。
- コマンドラインから叩きたい。
- msys2でコンパイルすることにした。(シングルバイナリにしたかったのでcygwinは除外)
提供されているドライバのAPI調査
- IF-70GUのドライバのzipファイルが公開されているので中身を眺めてみるが、どうやら、GUIのサンプルしか入っておらず、自作プログラムに組み込むのが面倒くさそう。
- 一応、上記のドライバをインストールすると
C:\Windows\System32\IF_60.dll
がインストールされる模様。
なので、IF_60.dll
の中にあるAPIをコマンドラインから呼べるようにすれば良い。
dll内のAPIはpexports
を使えば、以下のように抜き出すことができる。
# `.def`ファイルを作成 pexports IF_60.dll > IF_60.def # gcc用のライブラリファイルを作成(`dlltool`はmsys2のものを使った) dlltool IF_60.dll -d IF_60.def -l libIF_60.a
これで、あとはgcc実行時に-L. -lif_60
としてdllとリンクすれば良い。
電源ONするサンプル
IF70_on.c
として以下を作成した。(OFFしたいときはOUTPUT 0
とすれば良い)
コンパイルしたIF70_on.exeを実行すれば電源ONできる!捗る!
#include <windows.h> #include <tchar.h> #include <stdio.h> #include "IF70.h" #define ADDR (1) /* msys2でのコンパイルの方法 事前に以下の2つを実行して必要なものをインストールしておく (コンパイルするPCでは後述の.dllファイル以外は不要) PSA_Dr_API310\API\setup64.exe PSA_Dr_API310\Driver\Setup64.exe 以下の.dllファイルから、ライブラリファイルを作る C:\Windows\System32\IF_60.dll ここからpexportsのWindowsバイナリをダウンロード https://sourceforge.net/projects/mingw/files/MinGW/Extension/pexports/ 以下のコマンドで、.defファイルを作る pexports IF_60.dll >IF_60.def 以下コマンドでライブラリファイルを作る dlltool IF_60.dll -d IF_60.def -l libIF_60.a 以下のコマンドで実行ファイルを作る gcc -o IF70_on.exe IF70_on.c -L. -lif_60 */ int main(int argc, char *argv[]) { int ret; // addrを引数に取るが、何を指定するのか不明 ret = USB488_DeviceOpen(ADDR); if (ret <= 0) { printf("USB488_DeviceOpen() Error!\n"); return -1; } ret = USB488_Send(ADDR, "OUTPUT 1\n"); if (ret <= 0) { printf("USB488_Send() Error!\n"); return -1; } ret = USB488_Send(ADDR, "GTL\n"); if (ret <= 0) { printf("USB488_Send() Error!\n"); return -1; } USB488_DeviceClose(ADDR); return 0; }