Win32 API 日本語リファレンス
ホームDevices.Usb › WINUSB_PIPE_INFORMATION_EX

WINUSB_PIPE_INFORMATION_EX

構造体
サイズx64: 16 バイト / x86: 16 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
PipeTypeUSBD_PIPE_TYPE4+0+0パイプの種別を示すUSBD_PIPE_TYPE列挙値。
PipeIdBYTE1+4+4パイプの識別子(エンドポイントアドレス相当)。
MaximumPacketSizeWORD2+6+6パイプの最大パケットサイズ(バイト)。
IntervalBYTE1+8+8ポーリング間隔。
MaximumBytesPerIntervalDWORD4+12+121サービス間隔当たりの最大転送バイト数。

各言語での定義

#include <windows.h>

// WINUSB_PIPE_INFORMATION_EX  (x64 16 / x86 16 バイト)
typedef struct WINUSB_PIPE_INFORMATION_EX {
    USBD_PIPE_TYPE PipeType;
    BYTE PipeId;
    WORD MaximumPacketSize;
    BYTE Interval;
    DWORD MaximumBytesPerInterval;
} WINUSB_PIPE_INFORMATION_EX;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WINUSB_PIPE_INFORMATION_EX
{
    public int PipeType;
    public byte PipeId;
    public ushort MaximumPacketSize;
    public byte Interval;
    public uint MaximumBytesPerInterval;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WINUSB_PIPE_INFORMATION_EX
    Public PipeType As Integer
    Public PipeId As Byte
    Public MaximumPacketSize As UShort
    Public Interval As Byte
    Public MaximumBytesPerInterval As UInteger
End Structure
import ctypes
from ctypes import wintypes

class WINUSB_PIPE_INFORMATION_EX(ctypes.Structure):
    _fields_ = [
        ("PipeType", ctypes.c_int),
        ("PipeId", ctypes.c_ubyte),
        ("MaximumPacketSize", ctypes.c_ushort),
        ("Interval", ctypes.c_ubyte),
        ("MaximumBytesPerInterval", wintypes.DWORD),
    ]
#[repr(C)]
pub struct WINUSB_PIPE_INFORMATION_EX {
    pub PipeType: i32,
    pub PipeId: u8,
    pub MaximumPacketSize: u16,
    pub Interval: u8,
    pub MaximumBytesPerInterval: u32,
}
import "golang.org/x/sys/windows"

type WINUSB_PIPE_INFORMATION_EX struct {
	PipeType int32
	PipeId byte
	MaximumPacketSize uint16
	Interval byte
	MaximumBytesPerInterval uint32
}
type
  WINUSB_PIPE_INFORMATION_EX = record
    PipeType: Integer;
    PipeId: Byte;
    MaximumPacketSize: Word;
    Interval: Byte;
    MaximumBytesPerInterval: DWORD;
  end;
const WINUSB_PIPE_INFORMATION_EX = extern struct {
    PipeType: i32,
    PipeId: u8,
    MaximumPacketSize: u16,
    Interval: u8,
    MaximumBytesPerInterval: u32,
};
type
  WINUSB_PIPE_INFORMATION_EX {.bycopy.} = object
    PipeType: int32
    PipeId: uint8
    MaximumPacketSize: uint16
    Interval: uint8
    MaximumBytesPerInterval: uint32
struct WINUSB_PIPE_INFORMATION_EX
{
    int PipeType;
    ubyte PipeId;
    ushort MaximumPacketSize;
    ubyte Interval;
    uint MaximumBytesPerInterval;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; WINUSB_PIPE_INFORMATION_EX サイズ: 16 バイト(x64)
dim st, 4    ; 4byte整数×4(構造体サイズ 16 / 4 切り上げ)
; PipeType : USBD_PIPE_TYPE (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; PipeId : BYTE (+4, 1byte)  poke st,4,値  /  値 = peek(st,4)
; MaximumPacketSize : WORD (+6, 2byte)  wpoke st,6,値  /  値 = wpeek(st,6)
; Interval : BYTE (+8, 1byte)  poke st,8,値  /  値 = peek(st,8)
; MaximumBytesPerInterval : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global WINUSB_PIPE_INFORMATION_EX
    #field int PipeType
    #field byte PipeId
    #field short MaximumPacketSize
    #field byte Interval
    #field int MaximumBytesPerInterval
#endstruct

stdim st, WINUSB_PIPE_INFORMATION_EX        ; NSTRUCT 変数を確保
st->PipeType = 100
mes "PipeType=" + st->PipeType