Overlapped

2010年03月01日

WinUSB を使おう12~API編(4)最終~

あとはほとんどユーザ固有の使い方になってくると思うので特に記載するない様ではないと思いますが。

とりあえず
Control Transferと
Bulk/Interrupt Transferの使い方だけ

[Control Transfer]
BOOL __stdcall
  WinUsb_ControlTransfer (
    IN WINUSB_INTERFACE_HANDLE  InterfaceHandle,
    IN WINUSB_SETUP_PACKET  SetupPacket,
    IN PUCHAR  Buffer,
    IN ULONG  BufferLength,
    OUT PULONG  LengthTransferred,
    IN LPOVERLAPPED  Overlapped
  );

WinUSBだとPIPE制御系のは別APIで用意されてるので
使うとしたらVendorRequestを使う場合になるのでしょうかね

<引数の説明>
(1)WINUSB_INTERFACE_HANDLE・・・これは初期化で取得した「WinUSB Interface Handle」
(2)WINUSB_SETUP_PACKET・・・これが設定の要です。

typedef struct _WINUSB_SETUP_PACKET {
  UCHAR  RequestType;
  UCHAR  Request;
  USHORT  Value;
  USHORT  Index;
  USHORT  Length;
} WINUSB_SETUP_PACKET, *PWINUSB_SETUP_PACKET;
もともとUSBのSETUP PACKET構造体をラッパーしてるようなものなので入れる内容は準拠してる。
Vendor Requestを送ると仮定すると重要なのは

a)RequestType
・・・これには送受信の向き(Host to Device)や
  タイプStandard、Class、Vendorなのかなどを入れる
  
b)Request
・・・Vendor固有のIOCTLとか入れられるとこと
 
c)Value
d)Index
・・・まぁまぁ設定に必要なものを入れますよ

e)Length
・・・設定するデータがある場合はその送るデータ長になる

3)Buffer・・・設定するデータのポインタ

4)BufferLength・・・設定するデータ長

5)LengthTransferred・・・戻りデータ長

6)Overlapped・・・非同期待ち設定構造体
これはWindows SDKのRead/Writeと同じように使うただし待っているのは
WinUsb_GetOverlappedResultを使う。あとCreateFileのところでFILE_FLAG_OVERLAPPEDにしとかないと使えません

という感じで。

[
Bulk/Interrupt Transfer]
BOOL __stdcall
  WinUsb_ReadPipe (
    IN WINUSB_INTERFACE_HANDLE  InterfaceHandle,
    IN UCHAR  PipeID,
    IN PUCHAR  Buffer,
    IN ULONG  BufferLength,
    OUT PULONG  LengthTransferred,
    IN LPOVERLAPPED  Overlapped
  );

BOOL __stdcall
  WinUsb_WritePipe (
    IN WINUSB_INTERFACE_HANDLE  InterfaceHandle,
    IN UCHAR  PipeID,
    IN PUCHAR  Buffer,
    IN ULONG  BufferLength,
    OUT PULONG  LengthTransferred,
    IN LPOVERLAPPED  Overlapped
  );

(1)InterfaceHandle
(3)Buffer
(4)BufferLength
(5)LengthTransferred
(6)Overlapped
・・・・上のはControl Transferと同じ

(2)PipeID
・・・・は初期化したときにWinUsb_QueryPipeで取得したPipeIDですね

これでInとOutを使い分けするとよいでしょう。

こんなアバウトな感じでWinUSBの忘却メモはおしまいです

苦情は平謝りするしかないので受け付けられませんが、
何かの助けになれば幸いです。


ayuthky_m at 11:30|Permalink