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

USB_FRAME_NUMBER_AND_QPC_FOR_TIME_SYNC_INFORMATION

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

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

フィールド

フィールドサイズx64x86説明
TimeTrackingHandleHANDLE8/4+0+0時刻同期トラッキングを識別するハンドル。
InputFrameNumberDWORD4+8+4問い合わせ対象のフレーム番号(入力)。
InputMicroFrameNumberDWORD4+12+8問い合わせ対象のマイクロフレーム番号(入力)。
QueryPerformanceCounterAtInputFrameOrMicroFrameLONGLONG8+16+12指定フレーム/マイクロフレーム時点のQPC値。
QueryPerformanceCounterFrequencyLONGLONG8+24+20QueryPerformanceCounterの周波数。
PredictedAccuracyInMicroSecondsDWORD4+32+28予測される精度(マイクロ秒)。
CurrentGenerationIDDWORD4+36+32現在の世代ID。リセット検出に用いる。
CurrentQueryPerformanceCounterLONGLONG8+40+36現在のQPCカウンタ値。
CurrentHardwareFrameNumberDWORD4+48+44現在のハードウェアフレーム番号。
CurrentHardwareMicroFrameNumberDWORD4+52+48現在のハードウェアマイクロフレーム番号。
CurrentUSBFrameNumberDWORD4+56+52現在のUSBフレーム番号。

各言語での定義

#include <windows.h>

// USB_FRAME_NUMBER_AND_QPC_FOR_TIME_SYNC_INFORMATION  (x64 60 / x86 56 バイト)
#pragma pack(push, 1)
typedef struct USB_FRAME_NUMBER_AND_QPC_FOR_TIME_SYNC_INFORMATION {
    HANDLE TimeTrackingHandle;
    DWORD InputFrameNumber;
    DWORD InputMicroFrameNumber;
    LONGLONG QueryPerformanceCounterAtInputFrameOrMicroFrame;
    LONGLONG QueryPerformanceCounterFrequency;
    DWORD PredictedAccuracyInMicroSeconds;
    DWORD CurrentGenerationID;
    LONGLONG CurrentQueryPerformanceCounter;
    DWORD CurrentHardwareFrameNumber;
    DWORD CurrentHardwareMicroFrameNumber;
    DWORD CurrentUSBFrameNumber;
} USB_FRAME_NUMBER_AND_QPC_FOR_TIME_SYNC_INFORMATION;
#pragma pack(pop)
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]
public struct USB_FRAME_NUMBER_AND_QPC_FOR_TIME_SYNC_INFORMATION
{
    public IntPtr TimeTrackingHandle;
    public uint InputFrameNumber;
    public uint InputMicroFrameNumber;
    public long QueryPerformanceCounterAtInputFrameOrMicroFrame;
    public long QueryPerformanceCounterFrequency;
    public uint PredictedAccuracyInMicroSeconds;
    public uint CurrentGenerationID;
    public long CurrentQueryPerformanceCounter;
    public uint CurrentHardwareFrameNumber;
    public uint CurrentHardwareMicroFrameNumber;
    public uint CurrentUSBFrameNumber;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, Pack:=1, CharSet:=CharSet.Unicode)>
Public Structure USB_FRAME_NUMBER_AND_QPC_FOR_TIME_SYNC_INFORMATION
    Public TimeTrackingHandle As IntPtr
    Public InputFrameNumber As UInteger
    Public InputMicroFrameNumber As UInteger
    Public QueryPerformanceCounterAtInputFrameOrMicroFrame As Long
    Public QueryPerformanceCounterFrequency As Long
    Public PredictedAccuracyInMicroSeconds As UInteger
    Public CurrentGenerationID As UInteger
    Public CurrentQueryPerformanceCounter As Long
    Public CurrentHardwareFrameNumber As UInteger
    Public CurrentHardwareMicroFrameNumber As UInteger
    Public CurrentUSBFrameNumber As UInteger
End Structure
import ctypes
from ctypes import wintypes

class USB_FRAME_NUMBER_AND_QPC_FOR_TIME_SYNC_INFORMATION(ctypes.Structure):
    _pack_ = 1
    _fields_ = [
        ("TimeTrackingHandle", ctypes.c_void_p),
        ("InputFrameNumber", wintypes.DWORD),
        ("InputMicroFrameNumber", wintypes.DWORD),
        ("QueryPerformanceCounterAtInputFrameOrMicroFrame", ctypes.c_longlong),
        ("QueryPerformanceCounterFrequency", ctypes.c_longlong),
        ("PredictedAccuracyInMicroSeconds", wintypes.DWORD),
        ("CurrentGenerationID", wintypes.DWORD),
        ("CurrentQueryPerformanceCounter", ctypes.c_longlong),
        ("CurrentHardwareFrameNumber", wintypes.DWORD),
        ("CurrentHardwareMicroFrameNumber", wintypes.DWORD),
        ("CurrentUSBFrameNumber", wintypes.DWORD),
    ]
#[repr(C, packed(1))]
pub struct USB_FRAME_NUMBER_AND_QPC_FOR_TIME_SYNC_INFORMATION {
    pub TimeTrackingHandle: *mut core::ffi::c_void,
    pub InputFrameNumber: u32,
    pub InputMicroFrameNumber: u32,
    pub QueryPerformanceCounterAtInputFrameOrMicroFrame: i64,
    pub QueryPerformanceCounterFrequency: i64,
    pub PredictedAccuracyInMicroSeconds: u32,
    pub CurrentGenerationID: u32,
    pub CurrentQueryPerformanceCounter: i64,
    pub CurrentHardwareFrameNumber: u32,
    pub CurrentHardwareMicroFrameNumber: u32,
    pub CurrentUSBFrameNumber: u32,
}
import "golang.org/x/sys/windows"

type USB_FRAME_NUMBER_AND_QPC_FOR_TIME_SYNC_INFORMATION struct {
	TimeTrackingHandle uintptr
	InputFrameNumber uint32
	InputMicroFrameNumber uint32
	QueryPerformanceCounterAtInputFrameOrMicroFrame int64
	QueryPerformanceCounterFrequency int64
	PredictedAccuracyInMicroSeconds uint32
	CurrentGenerationID uint32
	CurrentQueryPerformanceCounter int64
	CurrentHardwareFrameNumber uint32
	CurrentHardwareMicroFrameNumber uint32
	CurrentUSBFrameNumber uint32
}
type
  USB_FRAME_NUMBER_AND_QPC_FOR_TIME_SYNC_INFORMATION = packed record
    TimeTrackingHandle: Pointer;
    InputFrameNumber: DWORD;
    InputMicroFrameNumber: DWORD;
    QueryPerformanceCounterAtInputFrameOrMicroFrame: Int64;
    QueryPerformanceCounterFrequency: Int64;
    PredictedAccuracyInMicroSeconds: DWORD;
    CurrentGenerationID: DWORD;
    CurrentQueryPerformanceCounter: Int64;
    CurrentHardwareFrameNumber: DWORD;
    CurrentHardwareMicroFrameNumber: DWORD;
    CurrentUSBFrameNumber: DWORD;
  end;
const USB_FRAME_NUMBER_AND_QPC_FOR_TIME_SYNC_INFORMATION = extern struct {
    TimeTrackingHandle: ?*anyopaque,
    InputFrameNumber: u32,
    InputMicroFrameNumber: u32,
    QueryPerformanceCounterAtInputFrameOrMicroFrame: i64,
    QueryPerformanceCounterFrequency: i64,
    PredictedAccuracyInMicroSeconds: u32,
    CurrentGenerationID: u32,
    CurrentQueryPerformanceCounter: i64,
    CurrentHardwareFrameNumber: u32,
    CurrentHardwareMicroFrameNumber: u32,
    CurrentUSBFrameNumber: u32,
};
type
  USB_FRAME_NUMBER_AND_QPC_FOR_TIME_SYNC_INFORMATION {.packed.} = object
    TimeTrackingHandle: pointer
    InputFrameNumber: uint32
    InputMicroFrameNumber: uint32
    QueryPerformanceCounterAtInputFrameOrMicroFrame: int64
    QueryPerformanceCounterFrequency: int64
    PredictedAccuracyInMicroSeconds: uint32
    CurrentGenerationID: uint32
    CurrentQueryPerformanceCounter: int64
    CurrentHardwareFrameNumber: uint32
    CurrentHardwareMicroFrameNumber: uint32
    CurrentUSBFrameNumber: uint32
align(1)
struct USB_FRAME_NUMBER_AND_QPC_FOR_TIME_SYNC_INFORMATION
{
    void* TimeTrackingHandle;
    uint InputFrameNumber;
    uint InputMicroFrameNumber;
    long QueryPerformanceCounterAtInputFrameOrMicroFrame;
    long QueryPerformanceCounterFrequency;
    uint PredictedAccuracyInMicroSeconds;
    uint CurrentGenerationID;
    long CurrentQueryPerformanceCounter;
    uint CurrentHardwareFrameNumber;
    uint CurrentHardwareMicroFrameNumber;
    uint CurrentUSBFrameNumber;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; USB_FRAME_NUMBER_AND_QPC_FOR_TIME_SYNC_INFORMATION サイズ: 56 バイト(x86)
dim st, 14    ; 4byte整数×14(構造体サイズ 56 / 4 切り上げ)
; TimeTrackingHandle : HANDLE (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; InputFrameNumber : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; InputMicroFrameNumber : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; QueryPerformanceCounterAtInputFrameOrMicroFrame : LONGLONG (+12, 8byte)  qpoke st,12,値 / qpeek(st,12)  ※IronHSPのみ。3.7/3.8は lpoke st,12,下位 : lpoke st,16,上位
; QueryPerformanceCounterFrequency : LONGLONG (+20, 8byte)  qpoke st,20,値 / qpeek(st,20)  ※IronHSPのみ。3.7/3.8は lpoke st,20,下位 : lpoke st,24,上位
; PredictedAccuracyInMicroSeconds : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; CurrentGenerationID : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; CurrentQueryPerformanceCounter : LONGLONG (+36, 8byte)  qpoke st,36,値 / qpeek(st,36)  ※IronHSPのみ。3.7/3.8は lpoke st,36,下位 : lpoke st,40,上位
; CurrentHardwareFrameNumber : DWORD (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; CurrentHardwareMicroFrameNumber : DWORD (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; CurrentUSBFrameNumber : DWORD (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; USB_FRAME_NUMBER_AND_QPC_FOR_TIME_SYNC_INFORMATION サイズ: 60 バイト(x64)
dim st, 15    ; 4byte整数×15(構造体サイズ 60 / 4 切り上げ)
; TimeTrackingHandle : HANDLE (+0, 8byte)  qpoke st,0,値 / qpeek(st,0)  ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; InputFrameNumber : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; InputMicroFrameNumber : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; QueryPerformanceCounterAtInputFrameOrMicroFrame : LONGLONG (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; QueryPerformanceCounterFrequency : LONGLONG (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; PredictedAccuracyInMicroSeconds : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; CurrentGenerationID : DWORD (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; CurrentQueryPerformanceCounter : LONGLONG (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; CurrentHardwareFrameNumber : DWORD (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; CurrentHardwareMicroFrameNumber : DWORD (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; CurrentUSBFrameNumber : DWORD (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global USB_FRAME_NUMBER_AND_QPC_FOR_TIME_SYNC_INFORMATION, pack=1
    #field intptr TimeTrackingHandle
    #field int InputFrameNumber
    #field int InputMicroFrameNumber
    #field int64 QueryPerformanceCounterAtInputFrameOrMicroFrame
    #field int64 QueryPerformanceCounterFrequency
    #field int PredictedAccuracyInMicroSeconds
    #field int CurrentGenerationID
    #field int64 CurrentQueryPerformanceCounter
    #field int CurrentHardwareFrameNumber
    #field int CurrentHardwareMicroFrameNumber
    #field int CurrentUSBFrameNumber
#endstruct

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