ホーム › Devices.Usb › HCD_STAT_COUNTERS
HCD_STAT_COUNTERS
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| BytesTransferred | DWORD | 4 | +0 | +0 | ホストコントローラで転送された総バイト数。 |
| IsoMissedCount | WORD | 2 | +4 | +4 | スケジュールに間に合わずミスしたアイソクロナス転送の回数。 |
| DataOverrunErrorCount | WORD | 2 | +6 | +6 | データオーバーランエラーの発生回数。 |
| CrcErrorCount | WORD | 2 | +8 | +8 | CRCエラーの発生回数。 |
| ScheduleOverrunCount | WORD | 2 | +10 | +10 | スケジュールオーバーランの発生回数。 |
| TimeoutErrorCount | WORD | 2 | +12 | +12 | タイムアウトエラーの発生回数。 |
| InternalHcErrorCount | WORD | 2 | +14 | +14 | ホストコントローラ内部エラーの発生回数。 |
| BufferOverrunErrorCount | WORD | 2 | +16 | +16 | バッファオーバーランエラーの発生回数。 |
| SWErrorCount | WORD | 2 | +18 | +18 | ソフトウェアエラーの発生回数。 |
| StallPidCount | WORD | 2 | +20 | +20 | STALL PIDを受信した回数。エンドポイント停止を示す。 |
| PortDisableCount | WORD | 2 | +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 Structureimport 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: uint16align(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