EZ-USB FX3のCyAPIをBorland C++ Builderで開発する
EZ-USB FX3のパソコン側のコントロールソフトはCyAPI.dllを使って制御するのが一般的ですがこのCyAPI.dllは、どうやら古いBorland C++ Builder 2006では使えないようなのです。depwalkerで見ると、何もエクスポートしている関数がありません。これが噂の.NETのクラスライブラリというものなのかもしれません。
Visual Studio 2010では開発できても、使い慣れたBorland C++ Builder 2006で開発できないのは不便です。そこで、CyAPI.dllを普通のWindowsのネイティブDLLにラッパするためのDLLをVisual Studio 2010で作ることにしました。
Visual Studio 2010で普通にDLLを作るのですが、プロジェクトにCyAPI.h、CyApi.lib、cyioctl.h、CyUSB30_def.h、setupapi.lib、usb100.h、usb200.h、UsbdStatus.hを追加しておきます。これらのファイルはEZ-USB FX3 SDKの中にあります。setupapi.libだけはWindows DDKの中から持ってきます。
プロジェクトはこんな感じ。CyAPI.hとcyioctl.hをインクルードして、CyApi.libとsetupapi.libを追加すればビルドは通ります。
ヘッダファイルには次の関数を定義しておきます。
extern "C" { TXUSBFX3_API bool TKUSBFX3Open(int num,unsigned short *vid,unsigned short *pid,char *DeviceName,int MaxDevnameLength); TXUSBFX3_API void TKUSBFX3Close(void); TXUSBFX3_API int TKUSBFX3DeviceCount(void); TXUSBFX3_API bool TKUSBFX3WriteToRAM(const char *ImageFileName,char *ErrorReason, int ErrorReasonLength); TXUSBFX3_API bool TKUSBFX3WriteToSPIROM(const char *ImageFileName,char *ErrorReason, int ErrorReasonLength); TXUSBFX3_API int TKUSBFX3BulkOut(int ep,unsigned char *data,int length); TXUSBFX3_API int TKUSBFX3BulkIn(int ep,unsigned char *data,int length); }
これで普通にプロジェクトが出来て関数がEXPORTできますが、VCで開発したDLLをBCCで使うには、BCCでimplibをしなければなりません。VCのプロジェクトのプロパティで、ビルド後イベントに、
"C:\Program Files\Borland\CBuilder6\Bin\implib.exe" -a "$(OutDir)$(TargetName).lib" "$(OutDir)$(TargetName).dll"
と書いておけば、自動的にBorlandC++用のlibに変換されるので便利です。
こうして、CyAPIをBorland C++ Builderで使うことができるようになりました。
デバイスのOpen、Close、BulkIn、BulkOutはもちろん、EZ-USB FX3の内蔵RAMへのファームウェアダウンロードや、SPI ROMへのファームウェア書き込みにも対応しました。
速度は今のところ110MByte/secくらいです。前回の高速化実験ではデータバス16bit接続の場合でも130MB/secくらいはでていましたので、それよりは遅めです。
マネージドなDLLを呼び出しているところで少しオーバーヘッドが生じてしまったのかもしれません。
| 固定リンク
コメント
コンパイル環境や必要なライブラリー等は揃えられそうなのですが、
具体的なプロジェクトを置いて頂くことは出来ないでしょうか。
CyAPIをBorland C++ Builderで使いたくて、
投稿: nagu | 2015.03.09 19:21
特電のwebサイトにログインすればダウンロードできますよ
投稿: なひたふ | 2015.03.09 19:36