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

NFC_RF_DISCOVERY_CONFIG

構造体
サイズx64: 24 バイト / x86: 24 バイト

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

フィールド

フィールドサイズx64x86説明
usTotalDurationWORD2+0+0ディスカバリ1サイクルの総時間をミリ秒で表す。
ulPollConfigDWORD4+4+4ポーリング動作を構成するフラグの組み合わせ。
fDisableCardEmulationBOOLEAN1+8+8カードエミュレーションを無効化するか否かを示す。
ucNfcIPModeBYTE1+9+9NFC-IP(P2P)のサポートモードを示す値。
fNfcIPTgtModeDisableBOOLEAN1+10+10NFC-IPターゲットモードを無効化するか否か。
ucNfcIPTgtModeBYTE1+11+11NFC-IPターゲットモードの構成値を示す。
ucNfcCEModeBYTE1+12+12カードエミュレーションモードの構成値を示す。
ucBailoutConfigBYTE1+13+13技術検出時の早期打ち切り(ベイルアウト)設定。
ucSystemCodeBYTE2+14+14FeliCa等で用いるシステムコードを示す値。
ucRequestCodeBYTE1+16+16ポーリング時に送出するリクエストコードを示す値。
ucTimeSlotNumberBYTE1+17+17ポーリングのタイムスロット数を示す値。
eRfDiscoveryModeNFC_RF_DISCOVERY_MODE4+20+20RFディスカバリの動作モードを示す列挙値。

各言語での定義

#include <windows.h>

// NFC_RF_DISCOVERY_CONFIG  (x64 24 / x86 24 バイト)
typedef struct NFC_RF_DISCOVERY_CONFIG {
    WORD usTotalDuration;
    DWORD ulPollConfig;
    BOOLEAN fDisableCardEmulation;
    BYTE ucNfcIPMode;
    BOOLEAN fNfcIPTgtModeDisable;
    BYTE ucNfcIPTgtMode;
    BYTE ucNfcCEMode;
    BYTE ucBailoutConfig;
    BYTE ucSystemCode[2];
    BYTE ucRequestCode;
    BYTE ucTimeSlotNumber;
    NFC_RF_DISCOVERY_MODE eRfDiscoveryMode;
} NFC_RF_DISCOVERY_CONFIG;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct NFC_RF_DISCOVERY_CONFIG
{
    public ushort usTotalDuration;
    public uint ulPollConfig;
    [MarshalAs(UnmanagedType.U1)] public bool fDisableCardEmulation;
    public byte ucNfcIPMode;
    [MarshalAs(UnmanagedType.U1)] public bool fNfcIPTgtModeDisable;
    public byte ucNfcIPTgtMode;
    public byte ucNfcCEMode;
    public byte ucBailoutConfig;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] ucSystemCode;
    public byte ucRequestCode;
    public byte ucTimeSlotNumber;
    public int eRfDiscoveryMode;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure NFC_RF_DISCOVERY_CONFIG
    Public usTotalDuration As UShort
    Public ulPollConfig As UInteger
    <MarshalAs(UnmanagedType.U1)> Public fDisableCardEmulation As Boolean
    Public ucNfcIPMode As Byte
    <MarshalAs(UnmanagedType.U1)> Public fNfcIPTgtModeDisable As Boolean
    Public ucNfcIPTgtMode As Byte
    Public ucNfcCEMode As Byte
    Public ucBailoutConfig As Byte
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=2)> Public ucSystemCode() As Byte
    Public ucRequestCode As Byte
    Public ucTimeSlotNumber As Byte
    Public eRfDiscoveryMode As Integer
End Structure
import ctypes
from ctypes import wintypes

class NFC_RF_DISCOVERY_CONFIG(ctypes.Structure):
    _fields_ = [
        ("usTotalDuration", ctypes.c_ushort),
        ("ulPollConfig", wintypes.DWORD),
        ("fDisableCardEmulation", ctypes.c_byte),
        ("ucNfcIPMode", ctypes.c_ubyte),
        ("fNfcIPTgtModeDisable", ctypes.c_byte),
        ("ucNfcIPTgtMode", ctypes.c_ubyte),
        ("ucNfcCEMode", ctypes.c_ubyte),
        ("ucBailoutConfig", ctypes.c_ubyte),
        ("ucSystemCode", ctypes.c_ubyte * 2),
        ("ucRequestCode", ctypes.c_ubyte),
        ("ucTimeSlotNumber", ctypes.c_ubyte),
        ("eRfDiscoveryMode", ctypes.c_int),
    ]
#[repr(C)]
pub struct NFC_RF_DISCOVERY_CONFIG {
    pub usTotalDuration: u16,
    pub ulPollConfig: u32,
    pub fDisableCardEmulation: u8,
    pub ucNfcIPMode: u8,
    pub fNfcIPTgtModeDisable: u8,
    pub ucNfcIPTgtMode: u8,
    pub ucNfcCEMode: u8,
    pub ucBailoutConfig: u8,
    pub ucSystemCode: [u8; 2],
    pub ucRequestCode: u8,
    pub ucTimeSlotNumber: u8,
    pub eRfDiscoveryMode: i32,
}
import "golang.org/x/sys/windows"

type NFC_RF_DISCOVERY_CONFIG struct {
	usTotalDuration uint16
	ulPollConfig uint32
	fDisableCardEmulation byte
	ucNfcIPMode byte
	fNfcIPTgtModeDisable byte
	ucNfcIPTgtMode byte
	ucNfcCEMode byte
	ucBailoutConfig byte
	ucSystemCode [2]byte
	ucRequestCode byte
	ucTimeSlotNumber byte
	eRfDiscoveryMode int32
}
type
  NFC_RF_DISCOVERY_CONFIG = record
    usTotalDuration: Word;
    ulPollConfig: DWORD;
    fDisableCardEmulation: ByteBool;
    ucNfcIPMode: Byte;
    fNfcIPTgtModeDisable: ByteBool;
    ucNfcIPTgtMode: Byte;
    ucNfcCEMode: Byte;
    ucBailoutConfig: Byte;
    ucSystemCode: array[0..1] of Byte;
    ucRequestCode: Byte;
    ucTimeSlotNumber: Byte;
    eRfDiscoveryMode: Integer;
  end;
const NFC_RF_DISCOVERY_CONFIG = extern struct {
    usTotalDuration: u16,
    ulPollConfig: u32,
    fDisableCardEmulation: u8,
    ucNfcIPMode: u8,
    fNfcIPTgtModeDisable: u8,
    ucNfcIPTgtMode: u8,
    ucNfcCEMode: u8,
    ucBailoutConfig: u8,
    ucSystemCode: [2]u8,
    ucRequestCode: u8,
    ucTimeSlotNumber: u8,
    eRfDiscoveryMode: i32,
};
type
  NFC_RF_DISCOVERY_CONFIG {.bycopy.} = object
    usTotalDuration: uint16
    ulPollConfig: uint32
    fDisableCardEmulation: uint8
    ucNfcIPMode: uint8
    fNfcIPTgtModeDisable: uint8
    ucNfcIPTgtMode: uint8
    ucNfcCEMode: uint8
    ucBailoutConfig: uint8
    ucSystemCode: array[2, uint8]
    ucRequestCode: uint8
    ucTimeSlotNumber: uint8
    eRfDiscoveryMode: int32
struct NFC_RF_DISCOVERY_CONFIG
{
    ushort usTotalDuration;
    uint ulPollConfig;
    ubyte fDisableCardEmulation;
    ubyte ucNfcIPMode;
    ubyte fNfcIPTgtModeDisable;
    ubyte ucNfcIPTgtMode;
    ubyte ucNfcCEMode;
    ubyte ucBailoutConfig;
    ubyte[2] ucSystemCode;
    ubyte ucRequestCode;
    ubyte ucTimeSlotNumber;
    int eRfDiscoveryMode;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; NFC_RF_DISCOVERY_CONFIG サイズ: 24 バイト(x64)
dim st, 6    ; 4byte整数×6(構造体サイズ 24 / 4 切り上げ)
; usTotalDuration : WORD (+0, 2byte)  wpoke st,0,値  /  値 = wpeek(st,0)
; ulPollConfig : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; fDisableCardEmulation : BOOLEAN (+8, 1byte)  poke st,8,値  /  値 = peek(st,8)
; ucNfcIPMode : BYTE (+9, 1byte)  poke st,9,値  /  値 = peek(st,9)
; fNfcIPTgtModeDisable : BOOLEAN (+10, 1byte)  poke st,10,値  /  値 = peek(st,10)
; ucNfcIPTgtMode : BYTE (+11, 1byte)  poke st,11,値  /  値 = peek(st,11)
; ucNfcCEMode : BYTE (+12, 1byte)  poke st,12,値  /  値 = peek(st,12)
; ucBailoutConfig : BYTE (+13, 1byte)  poke st,13,値  /  値 = peek(st,13)
; ucSystemCode : BYTE (+14, 2byte)  varptr(st)+14 を基点に操作(2byte:入れ子/配列)
; ucRequestCode : BYTE (+16, 1byte)  poke st,16,値  /  値 = peek(st,16)
; ucTimeSlotNumber : BYTE (+17, 1byte)  poke st,17,値  /  値 = peek(st,17)
; eRfDiscoveryMode : NFC_RF_DISCOVERY_MODE (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global NFC_RF_DISCOVERY_CONFIG
    #field short usTotalDuration
    #field int ulPollConfig
    #field bool1 fDisableCardEmulation
    #field byte ucNfcIPMode
    #field bool1 fNfcIPTgtModeDisable
    #field byte ucNfcIPTgtMode
    #field byte ucNfcCEMode
    #field byte ucBailoutConfig
    #field byte ucSystemCode 2
    #field byte ucRequestCode
    #field byte ucTimeSlotNumber
    #field int eRfDiscoveryMode
#endstruct

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