« stm32でさらにWinUSBも試す | トップページ | windowsでtrac 0.12を試す »

2010年7月13日 (火)

BCB6でWinUSB

uusbdもlibusbもbcb6で動かしたので
その延長でwinusbも動かそうとしたのですが
やっぱりbcb6はかなり古いものになってしまったので
対応できてない部分があるようでした。
(私が知らない設定もあるのかもしれません。)

かなり無理やりで信頼性がないですが
とりあえず下のようにすると動きました。
interface2010年2月号「第5章 WinUSBを使ったUSBターゲット機器の制御プログラミング」も参考。

---

・bcb用ライブラリを作り直す
implib winusb.lib winusb.dll
で。これはwinusbに限らずuusbd/LibUsbでも必要。

・bcb6そのままではsetupapi関連がうまく動作しないので、
update4を適用する。

・_tcscpy_s()はbcb6にはないので_tcsnccpy()にとりあえず置きかえ。
引数に注意。

・BCB6では宣言が無いためにエラーになるものがある。とりあえず

#define __in
#define __out
#define __out_bcount_part_opt(a,b)
#define __inout
#define __out_bcount(a)
#define __in_bcount(a)
#define __out_opt
#define __in_opt

として、消す。

・WinUsb_QueryPipe()で受け取ったEndpointの情報pipeInfoの
メンバーの値がおかしい。
なぜか
PipeId→pipeInfo.Interval,0→pipeInfo.PipeId,0→pipeInfo.MaximumPacketSize
のようになる。

winusb.dllを動的にロードするようにしてみても全く同じ。
とりあえずpipeInfo.IntervalをPipeIdとして扱うように修正すれば
とりあえずなんとかなるけど他のパラメータは使えないので注意。
私はConfiguration Descriptorを取り直してpipeInfoをつくる
関数を作って使うようにしてみた。

---
ちなみに、C++BUILDER 2010をインストールしてみて
ためしたら、上記のうち、ライブラリの作り直し以外のことは
不要で、普通にコンパイルでき、普通に動作しました。

|

« stm32でさらにWinUSBも試す | トップページ | windowsでtrac 0.12を試す »

usb」カテゴリの記事

コメント

はじめまして。

私もここで詰まったので、非常に参考になりました。

Pipe情報のデータがずれるのは、
WINUSB_PIPE_INFORMATION構造体のPipeTypeメンバが
本来4byteなのに、なぜか1byteとして解釈されることに原因がありますね。

私は以下のように構造体を定義して、
bcb_WINUSB_PIPE_INFORMATION{
unsigned long PipeType;
unsigned char PipeId;
unsigned short MaximumPacketSize;
unsigned char Interval;
};
WinUsb_QueryPipe()にキャストしてアドレスを渡すようにしました。

投稿: mickey | 2012年7月21日 (土) 11時03分

> Pipe情報のデータがずれるのは、
> WINUSB_PIPE_INFORMATION構造体のPipeTypeメンバが
> 本来4byteなのに、なぜか1byteとして解釈されることに原因がありますね。

> WinUsb_QueryPipe()にキャストしてアドレスを渡すようにしました。
そちらのほうがスマートですね。
ご連絡ありがとうございました。

投稿: tag | 2012年7月22日 (日) 14時25分

はじめまして。
私もC++Builder5で同じ事をやっていて、この問題に気付きました。

いろいろやってみた結果、
プロジェクト→オプション→[コンパイラ]タブで

・enum型をint型として扱う

のチェックボックスをONにしたことで解決しました。
もしC++Builder6で同じようなオプションがあれば試してみてください。


投稿: Ta-Mori | 2015年3月12日 (木) 18時41分

ありがとうございます。
PC環境がかわってしまってからやってないのですが
そのうち試してみたいと思います。

投稿: tag | 2015年5月 1日 (金) 05時58分

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: BCB6でWinUSB:

« stm32でさらにWinUSBも試す | トップページ | windowsでtrac 0.12を試す »