ホーム › Devices.Usb › HCD_ISO_STAT_COUNTERS
HCD_ISO_STAT_COUNTERS
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| LateUrbs | WORD | 2 | +0 | +0 | 提出が遅れたアイソクロナスURBの回数。 |
| DoubleBufferedPackets | WORD | 2 | +2 | +2 | 二重バッファ処理されたパケット数。 |
| TransfersCF_5ms | WORD | 2 | +4 | +4 | 完了フレーム余裕5msで転送された回数。 |
| TransfersCF_2ms | WORD | 2 | +6 | +6 | 完了フレーム余裕2msで転送された回数。 |
| TransfersCF_1ms | WORD | 2 | +8 | +8 | 完了フレーム余裕1msで転送された回数。 |
| MaxInterruptLatency | WORD | 2 | +10 | +10 | 観測された最大割り込みレイテンシ。 |
| BadStartFrame | WORD | 2 | +12 | +12 | 開始フレームが不正だった回数。 |
| StaleUrbs | WORD | 2 | +14 | +14 | 陳腐化(期限切れ)したURBの回数。 |
| IsoPacketNotAccesed | WORD | 2 | +16 | +16 | アクセスされなかったアイソクロナスパケット数。 |
| IsoPacketHWError | WORD | 2 | +18 | +18 | ハードウェアエラーとなったアイソクロナスパケット数。 |
| SmallestUrbPacketCount | WORD | 2 | +20 | +20 | 1URB当たり最小パケット数。 |
| LargestUrbPacketCount | WORD | 2 | +22 | +22 | 1URB当たり最大パケット数。 |
| IsoCRC_Error | WORD | 2 | +24 | +24 | アイソクロナス転送でのCRCエラー回数。 |
| IsoOVERRUN_Error | WORD | 2 | +26 | +26 | アイソクロナス転送でのオーバーランエラー回数。 |
| IsoINTERNAL_Error | WORD | 2 | +28 | +28 | アイソクロナス転送での内部エラー回数。 |
| IsoUNKNOWN_Error | WORD | 2 | +30 | +30 | アイソクロナス転送での不明エラー回数。 |
| IsoBytesTransferred | DWORD | 4 | +32 | +32 | アイソクロナス転送の総バイト数。 |
| LateMissedCount | WORD | 2 | +36 | +36 | 遅延によりミスしたアイソクロナス転送の回数。 |
| HWIsoMissedCount | WORD | 2 | +38 | +38 | ハードウェア由来でミスしたアイソクロナス転送の回数。 |
| Reserved7 | DWORD | 32 | +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 Structureimport 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