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

HCD_STAT_COUNTERS

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

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

フィールド

フィールドサイズx64x86説明
BytesTransferredDWORD4+0+0ホストコントローラで転送された総バイト数。
IsoMissedCountWORD2+4+4スケジュールに間に合わずミスしたアイソクロナス転送の回数。
DataOverrunErrorCountWORD2+6+6データオーバーランエラーの発生回数。
CrcErrorCountWORD2+8+8CRCエラーの発生回数。
ScheduleOverrunCountWORD2+10+10スケジュールオーバーランの発生回数。
TimeoutErrorCountWORD2+12+12タイムアウトエラーの発生回数。
InternalHcErrorCountWORD2+14+14ホストコントローラ内部エラーの発生回数。
BufferOverrunErrorCountWORD2+16+16バッファオーバーランエラーの発生回数。
SWErrorCountWORD2+18+18ソフトウェアエラーの発生回数。
StallPidCountWORD2+20+20STALL PIDを受信した回数。エンドポイント停止を示す。
PortDisableCountWORD2+22+22ポートが無効化された回数。

各言語での定義

#include <windows.h>

// HCD_STAT_COUNTERS  (x64 24 / x86 24 バイト)
#pragma pack(push, 1)
typedef struct HCD_STAT_COUNTERS {
    DWORD BytesTransferred;
    WORD IsoMissedCount;
    WORD DataOverrunErrorCount;
    WORD CrcErrorCount;
    WORD ScheduleOverrunCount;
    WORD TimeoutErrorCount;
    WORD InternalHcErrorCount;
    WORD BufferOverrunErrorCount;
    WORD SWErrorCount;
    WORD StallPidCount;
    WORD PortDisableCount;
} HCD_STAT_COUNTERS;
#pragma pack(pop)
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]
public struct HCD_STAT_COUNTERS
{
    public uint BytesTransferred;
    public ushort IsoMissedCount;
    public ushort DataOverrunErrorCount;
    public ushort CrcErrorCount;
    public ushort ScheduleOverrunCount;
    public ushort TimeoutErrorCount;
    public ushort InternalHcErrorCount;
    public ushort BufferOverrunErrorCount;
    public ushort SWErrorCount;
    public ushort StallPidCount;
    public ushort PortDisableCount;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, Pack:=1, CharSet:=CharSet.Unicode)>
Public Structure HCD_STAT_COUNTERS
    Public BytesTransferred As UInteger
    Public IsoMissedCount As UShort
    Public DataOverrunErrorCount As UShort
    Public CrcErrorCount As UShort
    Public ScheduleOverrunCount As UShort
    Public TimeoutErrorCount As UShort
    Public InternalHcErrorCount As UShort
    Public BufferOverrunErrorCount As UShort
    Public SWErrorCount As UShort
    Public StallPidCount As UShort
    Public PortDisableCount As UShort
End Structure
import ctypes
from ctypes import wintypes

class HCD_STAT_COUNTERS(ctypes.Structure):
    _pack_ = 1
    _fields_ = [
        ("BytesTransferred", wintypes.DWORD),
        ("IsoMissedCount", ctypes.c_ushort),
        ("DataOverrunErrorCount", ctypes.c_ushort),
        ("CrcErrorCount", ctypes.c_ushort),
        ("ScheduleOverrunCount", ctypes.c_ushort),
        ("TimeoutErrorCount", ctypes.c_ushort),
        ("InternalHcErrorCount", ctypes.c_ushort),
        ("BufferOverrunErrorCount", ctypes.c_ushort),
        ("SWErrorCount", ctypes.c_ushort),
        ("StallPidCount", ctypes.c_ushort),
        ("PortDisableCount", ctypes.c_ushort),
    ]
#[repr(C, packed(1))]
pub struct HCD_STAT_COUNTERS {
    pub BytesTransferred: u32,
    pub IsoMissedCount: u16,
    pub DataOverrunErrorCount: u16,
    pub CrcErrorCount: u16,
    pub ScheduleOverrunCount: u16,
    pub TimeoutErrorCount: u16,
    pub InternalHcErrorCount: u16,
    pub BufferOverrunErrorCount: u16,
    pub SWErrorCount: u16,
    pub StallPidCount: u16,
    pub PortDisableCount: u16,
}
import "golang.org/x/sys/windows"

type HCD_STAT_COUNTERS struct {
	BytesTransferred uint32
	IsoMissedCount uint16
	DataOverrunErrorCount uint16
	CrcErrorCount uint16
	ScheduleOverrunCount uint16
	TimeoutErrorCount uint16
	InternalHcErrorCount uint16
	BufferOverrunErrorCount uint16
	SWErrorCount uint16
	StallPidCount uint16
	PortDisableCount uint16
}
type
  HCD_STAT_COUNTERS = packed record
    BytesTransferred: DWORD;
    IsoMissedCount: Word;
    DataOverrunErrorCount: Word;
    CrcErrorCount: Word;
    ScheduleOverrunCount: Word;
    TimeoutErrorCount: Word;
    InternalHcErrorCount: Word;
    BufferOverrunErrorCount: Word;
    SWErrorCount: Word;
    StallPidCount: Word;
    PortDisableCount: Word;
  end;
const HCD_STAT_COUNTERS = extern struct {
    BytesTransferred: u32,
    IsoMissedCount: u16,
    DataOverrunErrorCount: u16,
    CrcErrorCount: u16,
    ScheduleOverrunCount: u16,
    TimeoutErrorCount: u16,
    InternalHcErrorCount: u16,
    BufferOverrunErrorCount: u16,
    SWErrorCount: u16,
    StallPidCount: u16,
    PortDisableCount: u16,
};
type
  HCD_STAT_COUNTERS {.packed.} = object
    BytesTransferred: uint32
    IsoMissedCount: uint16
    DataOverrunErrorCount: uint16
    CrcErrorCount: uint16
    ScheduleOverrunCount: uint16
    TimeoutErrorCount: uint16
    InternalHcErrorCount: uint16
    BufferOverrunErrorCount: uint16
    SWErrorCount: uint16
    StallPidCount: uint16
    PortDisableCount: uint16
align(1)
struct HCD_STAT_COUNTERS
{
    uint BytesTransferred;
    ushort IsoMissedCount;
    ushort DataOverrunErrorCount;
    ushort CrcErrorCount;
    ushort ScheduleOverrunCount;
    ushort TimeoutErrorCount;
    ushort InternalHcErrorCount;
    ushort BufferOverrunErrorCount;
    ushort SWErrorCount;
    ushort StallPidCount;
    ushort PortDisableCount;
}

HSP用 定義

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

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

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