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

HCD_ISO_STAT_COUNTERS

構造体
サイズx64: 72 バイト / x86: 72 バイトパッキング1

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

フィールド

フィールドサイズx64x86説明
LateUrbsWORD2+0+0提出が遅れたアイソクロナスURBの回数。
DoubleBufferedPacketsWORD2+2+2二重バッファ処理されたパケット数。
TransfersCF_5msWORD2+4+4完了フレーム余裕5msで転送された回数。
TransfersCF_2msWORD2+6+6完了フレーム余裕2msで転送された回数。
TransfersCF_1msWORD2+8+8完了フレーム余裕1msで転送された回数。
MaxInterruptLatencyWORD2+10+10観測された最大割り込みレイテンシ。
BadStartFrameWORD2+12+12開始フレームが不正だった回数。
StaleUrbsWORD2+14+14陳腐化(期限切れ)したURBの回数。
IsoPacketNotAccesedWORD2+16+16アクセスされなかったアイソクロナスパケット数。
IsoPacketHWErrorWORD2+18+18ハードウェアエラーとなったアイソクロナスパケット数。
SmallestUrbPacketCountWORD2+20+201URB当たり最小パケット数。
LargestUrbPacketCountWORD2+22+221URB当たり最大パケット数。
IsoCRC_ErrorWORD2+24+24アイソクロナス転送でのCRCエラー回数。
IsoOVERRUN_ErrorWORD2+26+26アイソクロナス転送でのオーバーランエラー回数。
IsoINTERNAL_ErrorWORD2+28+28アイソクロナス転送での内部エラー回数。
IsoUNKNOWN_ErrorWORD2+30+30アイソクロナス転送での不明エラー回数。
IsoBytesTransferredDWORD4+32+32アイソクロナス転送の総バイト数。
LateMissedCountWORD2+36+36遅延によりミスしたアイソクロナス転送の回数。
HWIsoMissedCountWORD2+38+38ハードウェア由来でミスしたアイソクロナス転送の回数。
Reserved7DWORD32+40+40将来拡張用の予約フィールド。

各言語での定義

#include <windows.h>

// HCD_ISO_STAT_COUNTERS  (x64 72 / x86 72 バイト)
#pragma pack(push, 1)
typedef struct HCD_ISO_STAT_COUNTERS {
    WORD LateUrbs;
    WORD DoubleBufferedPackets;
    WORD TransfersCF_5ms;
    WORD TransfersCF_2ms;
    WORD TransfersCF_1ms;
    WORD MaxInterruptLatency;
    WORD BadStartFrame;
    WORD StaleUrbs;
    WORD IsoPacketNotAccesed;
    WORD IsoPacketHWError;
    WORD SmallestUrbPacketCount;
    WORD LargestUrbPacketCount;
    WORD IsoCRC_Error;
    WORD IsoOVERRUN_Error;
    WORD IsoINTERNAL_Error;
    WORD IsoUNKNOWN_Error;
    DWORD IsoBytesTransferred;
    WORD LateMissedCount;
    WORD HWIsoMissedCount;
    DWORD Reserved7[8];
} HCD_ISO_STAT_COUNTERS;
#pragma pack(pop)
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]
public struct HCD_ISO_STAT_COUNTERS
{
    public ushort LateUrbs;
    public ushort DoubleBufferedPackets;
    public ushort TransfersCF_5ms;
    public ushort TransfersCF_2ms;
    public ushort TransfersCF_1ms;
    public ushort MaxInterruptLatency;
    public ushort BadStartFrame;
    public ushort StaleUrbs;
    public ushort IsoPacketNotAccesed;
    public ushort IsoPacketHWError;
    public ushort SmallestUrbPacketCount;
    public ushort LargestUrbPacketCount;
    public ushort IsoCRC_Error;
    public ushort IsoOVERRUN_Error;
    public ushort IsoINTERNAL_Error;
    public ushort IsoUNKNOWN_Error;
    public uint IsoBytesTransferred;
    public ushort LateMissedCount;
    public ushort HWIsoMissedCount;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] public uint[] Reserved7;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, Pack:=1, CharSet:=CharSet.Unicode)>
Public Structure HCD_ISO_STAT_COUNTERS
    Public LateUrbs As UShort
    Public DoubleBufferedPackets As UShort
    Public TransfersCF_5ms As UShort
    Public TransfersCF_2ms As UShort
    Public TransfersCF_1ms As UShort
    Public MaxInterruptLatency As UShort
    Public BadStartFrame As UShort
    Public StaleUrbs As UShort
    Public IsoPacketNotAccesed As UShort
    Public IsoPacketHWError As UShort
    Public SmallestUrbPacketCount As UShort
    Public LargestUrbPacketCount As UShort
    Public IsoCRC_Error As UShort
    Public IsoOVERRUN_Error As UShort
    Public IsoINTERNAL_Error As UShort
    Public IsoUNKNOWN_Error As UShort
    Public IsoBytesTransferred As UInteger
    Public LateMissedCount As UShort
    Public HWIsoMissedCount As UShort
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=8)> Public Reserved7() As UInteger
End Structure
import ctypes
from ctypes import wintypes

class HCD_ISO_STAT_COUNTERS(ctypes.Structure):
    _pack_ = 1
    _fields_ = [
        ("LateUrbs", ctypes.c_ushort),
        ("DoubleBufferedPackets", ctypes.c_ushort),
        ("TransfersCF_5ms", ctypes.c_ushort),
        ("TransfersCF_2ms", ctypes.c_ushort),
        ("TransfersCF_1ms", ctypes.c_ushort),
        ("MaxInterruptLatency", ctypes.c_ushort),
        ("BadStartFrame", ctypes.c_ushort),
        ("StaleUrbs", ctypes.c_ushort),
        ("IsoPacketNotAccesed", ctypes.c_ushort),
        ("IsoPacketHWError", ctypes.c_ushort),
        ("SmallestUrbPacketCount", ctypes.c_ushort),
        ("LargestUrbPacketCount", ctypes.c_ushort),
        ("IsoCRC_Error", ctypes.c_ushort),
        ("IsoOVERRUN_Error", ctypes.c_ushort),
        ("IsoINTERNAL_Error", ctypes.c_ushort),
        ("IsoUNKNOWN_Error", ctypes.c_ushort),
        ("IsoBytesTransferred", wintypes.DWORD),
        ("LateMissedCount", ctypes.c_ushort),
        ("HWIsoMissedCount", ctypes.c_ushort),
        ("Reserved7", wintypes.DWORD * 8),
    ]
#[repr(C, packed(1))]
pub struct HCD_ISO_STAT_COUNTERS {
    pub LateUrbs: u16,
    pub DoubleBufferedPackets: u16,
    pub TransfersCF_5ms: u16,
    pub TransfersCF_2ms: u16,
    pub TransfersCF_1ms: u16,
    pub MaxInterruptLatency: u16,
    pub BadStartFrame: u16,
    pub StaleUrbs: u16,
    pub IsoPacketNotAccesed: u16,
    pub IsoPacketHWError: u16,
    pub SmallestUrbPacketCount: u16,
    pub LargestUrbPacketCount: u16,
    pub IsoCRC_Error: u16,
    pub IsoOVERRUN_Error: u16,
    pub IsoINTERNAL_Error: u16,
    pub IsoUNKNOWN_Error: u16,
    pub IsoBytesTransferred: u32,
    pub LateMissedCount: u16,
    pub HWIsoMissedCount: u16,
    pub Reserved7: [u32; 8],
}
import "golang.org/x/sys/windows"

type HCD_ISO_STAT_COUNTERS struct {
	LateUrbs uint16
	DoubleBufferedPackets uint16
	TransfersCF_5ms uint16
	TransfersCF_2ms uint16
	TransfersCF_1ms uint16
	MaxInterruptLatency uint16
	BadStartFrame uint16
	StaleUrbs uint16
	IsoPacketNotAccesed uint16
	IsoPacketHWError uint16
	SmallestUrbPacketCount uint16
	LargestUrbPacketCount uint16
	IsoCRC_Error uint16
	IsoOVERRUN_Error uint16
	IsoINTERNAL_Error uint16
	IsoUNKNOWN_Error uint16
	IsoBytesTransferred uint32
	LateMissedCount uint16
	HWIsoMissedCount uint16
	Reserved7 [8]uint32
}
type
  HCD_ISO_STAT_COUNTERS = packed record
    LateUrbs: Word;
    DoubleBufferedPackets: Word;
    TransfersCF_5ms: Word;
    TransfersCF_2ms: Word;
    TransfersCF_1ms: Word;
    MaxInterruptLatency: Word;
    BadStartFrame: Word;
    StaleUrbs: Word;
    IsoPacketNotAccesed: Word;
    IsoPacketHWError: Word;
    SmallestUrbPacketCount: Word;
    LargestUrbPacketCount: Word;
    IsoCRC_Error: Word;
    IsoOVERRUN_Error: Word;
    IsoINTERNAL_Error: Word;
    IsoUNKNOWN_Error: Word;
    IsoBytesTransferred: DWORD;
    LateMissedCount: Word;
    HWIsoMissedCount: Word;
    Reserved7: array[0..7] of DWORD;
  end;
const HCD_ISO_STAT_COUNTERS = extern struct {
    LateUrbs: u16,
    DoubleBufferedPackets: u16,
    TransfersCF_5ms: u16,
    TransfersCF_2ms: u16,
    TransfersCF_1ms: u16,
    MaxInterruptLatency: u16,
    BadStartFrame: u16,
    StaleUrbs: u16,
    IsoPacketNotAccesed: u16,
    IsoPacketHWError: u16,
    SmallestUrbPacketCount: u16,
    LargestUrbPacketCount: u16,
    IsoCRC_Error: u16,
    IsoOVERRUN_Error: u16,
    IsoINTERNAL_Error: u16,
    IsoUNKNOWN_Error: u16,
    IsoBytesTransferred: u32,
    LateMissedCount: u16,
    HWIsoMissedCount: u16,
    Reserved7: [8]u32,
};
type
  HCD_ISO_STAT_COUNTERS {.packed.} = object
    LateUrbs: uint16
    DoubleBufferedPackets: uint16
    TransfersCF_5ms: uint16
    TransfersCF_2ms: uint16
    TransfersCF_1ms: uint16
    MaxInterruptLatency: uint16
    BadStartFrame: uint16
    StaleUrbs: uint16
    IsoPacketNotAccesed: uint16
    IsoPacketHWError: uint16
    SmallestUrbPacketCount: uint16
    LargestUrbPacketCount: uint16
    IsoCRC_Error: uint16
    IsoOVERRUN_Error: uint16
    IsoINTERNAL_Error: uint16
    IsoUNKNOWN_Error: uint16
    IsoBytesTransferred: uint32
    LateMissedCount: uint16
    HWIsoMissedCount: uint16
    Reserved7: array[8, uint32]
align(1)
struct HCD_ISO_STAT_COUNTERS
{
    ushort LateUrbs;
    ushort DoubleBufferedPackets;
    ushort TransfersCF_5ms;
    ushort TransfersCF_2ms;
    ushort TransfersCF_1ms;
    ushort MaxInterruptLatency;
    ushort BadStartFrame;
    ushort StaleUrbs;
    ushort IsoPacketNotAccesed;
    ushort IsoPacketHWError;
    ushort SmallestUrbPacketCount;
    ushort LargestUrbPacketCount;
    ushort IsoCRC_Error;
    ushort IsoOVERRUN_Error;
    ushort IsoINTERNAL_Error;
    ushort IsoUNKNOWN_Error;
    uint IsoBytesTransferred;
    ushort LateMissedCount;
    ushort HWIsoMissedCount;
    uint[8] Reserved7;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; HCD_ISO_STAT_COUNTERS サイズ: 72 バイト(x64)
dim st, 18    ; 4byte整数×18(構造体サイズ 72 / 4 切り上げ)
; LateUrbs : WORD (+0, 2byte)  wpoke st,0,値  /  値 = wpeek(st,0)
; DoubleBufferedPackets : WORD (+2, 2byte)  wpoke st,2,値  /  値 = wpeek(st,2)
; TransfersCF_5ms : WORD (+4, 2byte)  wpoke st,4,値  /  値 = wpeek(st,4)
; TransfersCF_2ms : WORD (+6, 2byte)  wpoke st,6,値  /  値 = wpeek(st,6)
; TransfersCF_1ms : WORD (+8, 2byte)  wpoke st,8,値  /  値 = wpeek(st,8)
; MaxInterruptLatency : WORD (+10, 2byte)  wpoke st,10,値  /  値 = wpeek(st,10)
; BadStartFrame : WORD (+12, 2byte)  wpoke st,12,値  /  値 = wpeek(st,12)
; StaleUrbs : WORD (+14, 2byte)  wpoke st,14,値  /  値 = wpeek(st,14)
; IsoPacketNotAccesed : WORD (+16, 2byte)  wpoke st,16,値  /  値 = wpeek(st,16)
; IsoPacketHWError : WORD (+18, 2byte)  wpoke st,18,値  /  値 = wpeek(st,18)
; SmallestUrbPacketCount : WORD (+20, 2byte)  wpoke st,20,値  /  値 = wpeek(st,20)
; LargestUrbPacketCount : WORD (+22, 2byte)  wpoke st,22,値  /  値 = wpeek(st,22)
; IsoCRC_Error : WORD (+24, 2byte)  wpoke st,24,値  /  値 = wpeek(st,24)
; IsoOVERRUN_Error : WORD (+26, 2byte)  wpoke st,26,値  /  値 = wpeek(st,26)
; IsoINTERNAL_Error : WORD (+28, 2byte)  wpoke st,28,値  /  値 = wpeek(st,28)
; IsoUNKNOWN_Error : WORD (+30, 2byte)  wpoke st,30,値  /  値 = wpeek(st,30)
; IsoBytesTransferred : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; LateMissedCount : WORD (+36, 2byte)  wpoke st,36,値  /  値 = wpeek(st,36)
; HWIsoMissedCount : WORD (+38, 2byte)  wpoke st,38,値  /  値 = wpeek(st,38)
; Reserved7 : DWORD (+40, 32byte)  varptr(st)+40 を基点に操作(32byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global HCD_ISO_STAT_COUNTERS, pack=1
    #field short LateUrbs
    #field short DoubleBufferedPackets
    #field short TransfersCF_5ms
    #field short TransfersCF_2ms
    #field short TransfersCF_1ms
    #field short MaxInterruptLatency
    #field short BadStartFrame
    #field short StaleUrbs
    #field short IsoPacketNotAccesed
    #field short IsoPacketHWError
    #field short SmallestUrbPacketCount
    #field short LargestUrbPacketCount
    #field short IsoCRC_Error
    #field short IsoOVERRUN_Error
    #field short IsoINTERNAL_Error
    #field short IsoUNKNOWN_Error
    #field int IsoBytesTransferred
    #field short LateMissedCount
    #field short HWIsoMissedCount
    #field int Reserved7 8
#endstruct

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