FTD2XX.DLL FT_GetDeviceInfoList の戻り値に違いあるか Visual C++ で再確認

スクリーンショット 2015-07-11 20.02.35
スクリーンショット 2015-07-12 06.22.49

先週、C# で FTD2XX.DLL FT_GetDeviceInfoList を試したところ、最新のドライバ(2.12.04) とひとつ前のドライバ(2.12.00) と結果が違うと書きました。C++ でドライバを直接使って C# と同様の結果になるか確認。同じ結果なら、C# 用の Wrapper は問題ないということになります。
2014-09-29 2.12.00 WHQL Certified のドライバで動かすと最初のスクリーンショットのようにちゃんと値が帰ってきます。
2015-07-03 2.12.04 WHQL Certified では、serialnumber にゴミが入るのと、Description のところにシリアル番号らしきものが入っています。

FTDI のサイトにあるサンプルコードで FT_GetDeviceInfoList でシリアル番号・デスクリプションを参照する場合は 2014-09-29 2.12.00 WHQL Certified 使ったほうがいいです。

2015-07-12 06.44.08

プログラムを動かす時には、
FT_STATUS FT_Open (int iDevice, FT_HANDLE *ftHandle)
FT_STATUS FT_OpenEx (PVOID pvArg1, DWORD dwFlags, FT_HANDLE *ftHandle)
のどちらかでオープンしますが、写真のように複数デバイスを接続したときの FT_GetDeviceInfoList の結果は次のスクリーンショットのようになりました。

スクリーンショット 2015-07-12 06.44.11

2014-09-29 2.12.00 WHQL Certified ならシリアル番号などはハッキリわかるので、デバイス選択するときに間違いが減ると思います。ドライバのバージョンに気をつければ C++, C# どちらでも開発出来るというはわかりました。次余裕あれば、Raspberry Pi + FTD2XX ドライバ + python で動くかやってみたいと思います。(頒布物がらみの調べものに移行するかも)

デジット 32×16 赤緑 LED マトリクス基板の制御をどうしようか思案中2

スクリーンショット 2015-07-04 14.00.29

自宅の Windows 7 PC で、FT2232D のテストプログラムの続きをやろうとして環境作成。デバイス一覧を拾ってくるメソッドがエラーになって動きません状態。FTD2XX_NET という C# 用 Wrapper のソースも FTDI のサイトからダウンロードして DLL 作成しなおして、テストプログラムから呼出すよう設定変更してどこで止まるか確認。

確認の結果、デバイス情報のシリアル番号 String 中にある NULL 文字を削除する所でトラップ発生していました。この事象は Windows update サイトから自動インストールされる2014年9月のドライバでは発生しませんが、FTDI のサイトから最新版のドライバを入れると発生します。
ということで、C# 用 Wrapper はしばらくメンテされていない感じなので、他のメソッドというかクラスも大丈夫かちょっと心配になったりもします。

ドライバの DLL を直接使う方向にするか、ラッパーの虫取りするかどうしようかと考えているところですが、出鼻を挫かれた感じなのでちょっと棚上げすることにしました。もうちょっと調べてみましょう。

デジット 32×16 赤緑 LED マトリクス基板の制御をどうしようか思案中

2015-07-01 17.24.40

デジット 32×16 赤緑 LED マトリクス基板の制御入力コネクタは 12 ピンあります。このうち 1 本は GND なので制御に必要な信号は 11 本必要です。最初は Raspberry Pi で制御する?とか思っていたのですが、途中で気が変わってノート PC から動かしたほうがいいような気がしてきました。

ということで、秋月で FT2232D の変換基板を購入してきました。PIC を使った HID デバイス - 12 GPIO の変換基板もあったのですが、今回はなんとなく FTDI のチップ使ったほうをえらびました。

20150702195700

Visual Studio 2013 Express を出張用タブレットパソコンにインストールして C# で、FT2232D の情報がとれるところまでテスト。無事うまくいきました。
表示された内容では、2個デバイスがあるように見えて、デフォルトはシリアルポートになっているようです。最初からパラレルモードとかにしておく場合は シリアルEEPROMかなんかに設定をセーブしておかないといけないようです。次は、この見つかったデバイスをオープンして、パラレルモードにする設定をやってみたいと思います。