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

GNSS_GEOFENCE_ALERT_DATA

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

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

フィールド

フィールドサイズx64x86説明
SizeDWORD4+0+0この構造体のサイズをバイト単位で示すDWORD。
VersionDWORD4+4+4構造体のバージョンを示すDWORD。
GeofenceIDDWORD4+8+8通知の対象となるジオフェンスを識別するDWORD。
GeofenceStateGNSS_GEOFENCE_STATE4+12+12通知時のジオフェンス状態を示すGNSS_GEOFENCE_STATE。
FixBasicDataGNSS_FIXDATA_BASIC48+16+16通知発生時の基本測位データを保持するGNSS_FIXDATA_BASIC。
FixAccuracyDataGNSS_FIXDATA_ACCURACY64+64+64通知発生時の測位精度データを保持するGNSS_FIXDATA_ACCURACY。
UnusedBYTE512+128+128未使用の予約バイト配列。

各言語での定義

#include <windows.h>

// GNSS_FIXDATA_BASIC  (x64 48 / x86 48 バイト)
typedef struct GNSS_FIXDATA_BASIC {
    DWORD Size;
    DWORD Version;
    DOUBLE Latitude;
    DOUBLE Longitude;
    DOUBLE Altitude;
    DOUBLE Speed;
    DOUBLE Heading;
} GNSS_FIXDATA_BASIC;

// GNSS_FIXDATA_ACCURACY  (x64 64 / x86 64 バイト)
typedef struct GNSS_FIXDATA_ACCURACY {
    DWORD Size;
    DWORD Version;
    DWORD HorizontalAccuracy;
    DWORD HorizontalErrorMajorAxis;
    DWORD HorizontalErrorMinorAxis;
    DWORD HorizontalErrorAngle;
    DWORD HeadingAccuracy;
    DWORD AltitudeAccuracy;
    DWORD SpeedAccuracy;
    DWORD HorizontalConfidence;
    DWORD HeadingConfidence;
    DWORD AltitudeConfidence;
    DWORD SpeedConfidence;
    FLOAT PositionDilutionOfPrecision;
    FLOAT HorizontalDilutionOfPrecision;
    FLOAT VerticalDilutionOfPrecision;
} GNSS_FIXDATA_ACCURACY;

// GNSS_GEOFENCE_ALERT_DATA  (x64 640 / x86 640 バイト)
typedef struct GNSS_GEOFENCE_ALERT_DATA {
    DWORD Size;
    DWORD Version;
    DWORD GeofenceID;
    GNSS_GEOFENCE_STATE GeofenceState;
    GNSS_FIXDATA_BASIC FixBasicData;
    GNSS_FIXDATA_ACCURACY FixAccuracyData;
    BYTE Unused[512];
} GNSS_GEOFENCE_ALERT_DATA;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct GNSS_FIXDATA_BASIC
{
    public uint Size;
    public uint Version;
    public double Latitude;
    public double Longitude;
    public double Altitude;
    public double Speed;
    public double Heading;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct GNSS_FIXDATA_ACCURACY
{
    public uint Size;
    public uint Version;
    public uint HorizontalAccuracy;
    public uint HorizontalErrorMajorAxis;
    public uint HorizontalErrorMinorAxis;
    public uint HorizontalErrorAngle;
    public uint HeadingAccuracy;
    public uint AltitudeAccuracy;
    public uint SpeedAccuracy;
    public uint HorizontalConfidence;
    public uint HeadingConfidence;
    public uint AltitudeConfidence;
    public uint SpeedConfidence;
    public float PositionDilutionOfPrecision;
    public float HorizontalDilutionOfPrecision;
    public float VerticalDilutionOfPrecision;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct GNSS_GEOFENCE_ALERT_DATA
{
    public uint Size;
    public uint Version;
    public uint GeofenceID;
    public int GeofenceState;
    public GNSS_FIXDATA_BASIC FixBasicData;
    public GNSS_FIXDATA_ACCURACY FixAccuracyData;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 512)] public byte[] Unused;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure GNSS_FIXDATA_BASIC
    Public Size As UInteger
    Public Version As UInteger
    Public Latitude As Double
    Public Longitude As Double
    Public Altitude As Double
    Public Speed As Double
    Public Heading As Double
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure GNSS_FIXDATA_ACCURACY
    Public Size As UInteger
    Public Version As UInteger
    Public HorizontalAccuracy As UInteger
    Public HorizontalErrorMajorAxis As UInteger
    Public HorizontalErrorMinorAxis As UInteger
    Public HorizontalErrorAngle As UInteger
    Public HeadingAccuracy As UInteger
    Public AltitudeAccuracy As UInteger
    Public SpeedAccuracy As UInteger
    Public HorizontalConfidence As UInteger
    Public HeadingConfidence As UInteger
    Public AltitudeConfidence As UInteger
    Public SpeedConfidence As UInteger
    Public PositionDilutionOfPrecision As Single
    Public HorizontalDilutionOfPrecision As Single
    Public VerticalDilutionOfPrecision As Single
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure GNSS_GEOFENCE_ALERT_DATA
    Public Size As UInteger
    Public Version As UInteger
    Public GeofenceID As UInteger
    Public GeofenceState As Integer
    Public FixBasicData As GNSS_FIXDATA_BASIC
    Public FixAccuracyData As GNSS_FIXDATA_ACCURACY
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=512)> Public Unused() As Byte
End Structure
import ctypes
from ctypes import wintypes

class GNSS_FIXDATA_BASIC(ctypes.Structure):
    _fields_ = [
        ("Size", wintypes.DWORD),
        ("Version", wintypes.DWORD),
        ("Latitude", ctypes.c_double),
        ("Longitude", ctypes.c_double),
        ("Altitude", ctypes.c_double),
        ("Speed", ctypes.c_double),
        ("Heading", ctypes.c_double),
    ]

class GNSS_FIXDATA_ACCURACY(ctypes.Structure):
    _fields_ = [
        ("Size", wintypes.DWORD),
        ("Version", wintypes.DWORD),
        ("HorizontalAccuracy", wintypes.DWORD),
        ("HorizontalErrorMajorAxis", wintypes.DWORD),
        ("HorizontalErrorMinorAxis", wintypes.DWORD),
        ("HorizontalErrorAngle", wintypes.DWORD),
        ("HeadingAccuracy", wintypes.DWORD),
        ("AltitudeAccuracy", wintypes.DWORD),
        ("SpeedAccuracy", wintypes.DWORD),
        ("HorizontalConfidence", wintypes.DWORD),
        ("HeadingConfidence", wintypes.DWORD),
        ("AltitudeConfidence", wintypes.DWORD),
        ("SpeedConfidence", wintypes.DWORD),
        ("PositionDilutionOfPrecision", ctypes.c_float),
        ("HorizontalDilutionOfPrecision", ctypes.c_float),
        ("VerticalDilutionOfPrecision", ctypes.c_float),
    ]

class GNSS_GEOFENCE_ALERT_DATA(ctypes.Structure):
    _fields_ = [
        ("Size", wintypes.DWORD),
        ("Version", wintypes.DWORD),
        ("GeofenceID", wintypes.DWORD),
        ("GeofenceState", ctypes.c_int),
        ("FixBasicData", GNSS_FIXDATA_BASIC),
        ("FixAccuracyData", GNSS_FIXDATA_ACCURACY),
        ("Unused", ctypes.c_ubyte * 512),
    ]
#[repr(C)]
pub struct GNSS_FIXDATA_BASIC {
    pub Size: u32,
    pub Version: u32,
    pub Latitude: f64,
    pub Longitude: f64,
    pub Altitude: f64,
    pub Speed: f64,
    pub Heading: f64,
}

#[repr(C)]
pub struct GNSS_FIXDATA_ACCURACY {
    pub Size: u32,
    pub Version: u32,
    pub HorizontalAccuracy: u32,
    pub HorizontalErrorMajorAxis: u32,
    pub HorizontalErrorMinorAxis: u32,
    pub HorizontalErrorAngle: u32,
    pub HeadingAccuracy: u32,
    pub AltitudeAccuracy: u32,
    pub SpeedAccuracy: u32,
    pub HorizontalConfidence: u32,
    pub HeadingConfidence: u32,
    pub AltitudeConfidence: u32,
    pub SpeedConfidence: u32,
    pub PositionDilutionOfPrecision: f32,
    pub HorizontalDilutionOfPrecision: f32,
    pub VerticalDilutionOfPrecision: f32,
}

#[repr(C)]
pub struct GNSS_GEOFENCE_ALERT_DATA {
    pub Size: u32,
    pub Version: u32,
    pub GeofenceID: u32,
    pub GeofenceState: i32,
    pub FixBasicData: GNSS_FIXDATA_BASIC,
    pub FixAccuracyData: GNSS_FIXDATA_ACCURACY,
    pub Unused: [u8; 512],
}
import "golang.org/x/sys/windows"

type GNSS_FIXDATA_BASIC struct {
	Size uint32
	Version uint32
	Latitude float64
	Longitude float64
	Altitude float64
	Speed float64
	Heading float64
}

type GNSS_FIXDATA_ACCURACY struct {
	Size uint32
	Version uint32
	HorizontalAccuracy uint32
	HorizontalErrorMajorAxis uint32
	HorizontalErrorMinorAxis uint32
	HorizontalErrorAngle uint32
	HeadingAccuracy uint32
	AltitudeAccuracy uint32
	SpeedAccuracy uint32
	HorizontalConfidence uint32
	HeadingConfidence uint32
	AltitudeConfidence uint32
	SpeedConfidence uint32
	PositionDilutionOfPrecision float32
	HorizontalDilutionOfPrecision float32
	VerticalDilutionOfPrecision float32
}

type GNSS_GEOFENCE_ALERT_DATA struct {
	Size uint32
	Version uint32
	GeofenceID uint32
	GeofenceState int32
	FixBasicData GNSS_FIXDATA_BASIC
	FixAccuracyData GNSS_FIXDATA_ACCURACY
	Unused [512]byte
}
type
  GNSS_FIXDATA_BASIC = record
    Size: DWORD;
    Version: DWORD;
    Latitude: Double;
    Longitude: Double;
    Altitude: Double;
    Speed: Double;
    Heading: Double;
  end;

  GNSS_FIXDATA_ACCURACY = record
    Size: DWORD;
    Version: DWORD;
    HorizontalAccuracy: DWORD;
    HorizontalErrorMajorAxis: DWORD;
    HorizontalErrorMinorAxis: DWORD;
    HorizontalErrorAngle: DWORD;
    HeadingAccuracy: DWORD;
    AltitudeAccuracy: DWORD;
    SpeedAccuracy: DWORD;
    HorizontalConfidence: DWORD;
    HeadingConfidence: DWORD;
    AltitudeConfidence: DWORD;
    SpeedConfidence: DWORD;
    PositionDilutionOfPrecision: Single;
    HorizontalDilutionOfPrecision: Single;
    VerticalDilutionOfPrecision: Single;
  end;

  GNSS_GEOFENCE_ALERT_DATA = record
    Size: DWORD;
    Version: DWORD;
    GeofenceID: DWORD;
    GeofenceState: Integer;
    FixBasicData: GNSS_FIXDATA_BASIC;
    FixAccuracyData: GNSS_FIXDATA_ACCURACY;
    Unused: array[0..511] of Byte;
  end;
const GNSS_FIXDATA_BASIC = extern struct {
    Size: u32,
    Version: u32,
    Latitude: f64,
    Longitude: f64,
    Altitude: f64,
    Speed: f64,
    Heading: f64,
};

const GNSS_FIXDATA_ACCURACY = extern struct {
    Size: u32,
    Version: u32,
    HorizontalAccuracy: u32,
    HorizontalErrorMajorAxis: u32,
    HorizontalErrorMinorAxis: u32,
    HorizontalErrorAngle: u32,
    HeadingAccuracy: u32,
    AltitudeAccuracy: u32,
    SpeedAccuracy: u32,
    HorizontalConfidence: u32,
    HeadingConfidence: u32,
    AltitudeConfidence: u32,
    SpeedConfidence: u32,
    PositionDilutionOfPrecision: f32,
    HorizontalDilutionOfPrecision: f32,
    VerticalDilutionOfPrecision: f32,
};

const GNSS_GEOFENCE_ALERT_DATA = extern struct {
    Size: u32,
    Version: u32,
    GeofenceID: u32,
    GeofenceState: i32,
    FixBasicData: GNSS_FIXDATA_BASIC,
    FixAccuracyData: GNSS_FIXDATA_ACCURACY,
    Unused: [512]u8,
};
type
  GNSS_FIXDATA_BASIC {.bycopy.} = object
    Size: uint32
    Version: uint32
    Latitude: float64
    Longitude: float64
    Altitude: float64
    Speed: float64
    Heading: float64

  GNSS_FIXDATA_ACCURACY {.bycopy.} = object
    Size: uint32
    Version: uint32
    HorizontalAccuracy: uint32
    HorizontalErrorMajorAxis: uint32
    HorizontalErrorMinorAxis: uint32
    HorizontalErrorAngle: uint32
    HeadingAccuracy: uint32
    AltitudeAccuracy: uint32
    SpeedAccuracy: uint32
    HorizontalConfidence: uint32
    HeadingConfidence: uint32
    AltitudeConfidence: uint32
    SpeedConfidence: uint32
    PositionDilutionOfPrecision: float32
    HorizontalDilutionOfPrecision: float32
    VerticalDilutionOfPrecision: float32

  GNSS_GEOFENCE_ALERT_DATA {.bycopy.} = object
    Size: uint32
    Version: uint32
    GeofenceID: uint32
    GeofenceState: int32
    FixBasicData: GNSS_FIXDATA_BASIC
    FixAccuracyData: GNSS_FIXDATA_ACCURACY
    Unused: array[512, uint8]
struct GNSS_FIXDATA_BASIC
{
    uint Size;
    uint Version;
    double Latitude;
    double Longitude;
    double Altitude;
    double Speed;
    double Heading;
}

struct GNSS_FIXDATA_ACCURACY
{
    uint Size;
    uint Version;
    uint HorizontalAccuracy;
    uint HorizontalErrorMajorAxis;
    uint HorizontalErrorMinorAxis;
    uint HorizontalErrorAngle;
    uint HeadingAccuracy;
    uint AltitudeAccuracy;
    uint SpeedAccuracy;
    uint HorizontalConfidence;
    uint HeadingConfidence;
    uint AltitudeConfidence;
    uint SpeedConfidence;
    float PositionDilutionOfPrecision;
    float HorizontalDilutionOfPrecision;
    float VerticalDilutionOfPrecision;
}

struct GNSS_GEOFENCE_ALERT_DATA
{
    uint Size;
    uint Version;
    uint GeofenceID;
    int GeofenceState;
    GNSS_FIXDATA_BASIC FixBasicData;
    GNSS_FIXDATA_ACCURACY FixAccuracyData;
    ubyte[512] Unused;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; GNSS_GEOFENCE_ALERT_DATA サイズ: 640 バイト(x64)
dim st, 160    ; 4byte整数×160(構造体サイズ 640 / 4 切り上げ)
; Size : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; Version : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; GeofenceID : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; GeofenceState : GNSS_GEOFENCE_STATE (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; FixBasicData : GNSS_FIXDATA_BASIC (+16, 48byte)  varptr(st)+16 を基点に操作(48byte:入れ子/配列)
; FixAccuracyData : GNSS_FIXDATA_ACCURACY (+64, 64byte)  varptr(st)+64 を基点に操作(64byte:入れ子/配列)
; Unused : BYTE (+128, 512byte)  varptr(st)+128 を基点に操作(512byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global GNSS_FIXDATA_BASIC
    #field int Size
    #field int Version
    #field double Latitude
    #field double Longitude
    #field double Altitude
    #field double Speed
    #field double Heading
#endstruct

#defstruct global GNSS_FIXDATA_ACCURACY
    #field int Size
    #field int Version
    #field int HorizontalAccuracy
    #field int HorizontalErrorMajorAxis
    #field int HorizontalErrorMinorAxis
    #field int HorizontalErrorAngle
    #field int HeadingAccuracy
    #field int AltitudeAccuracy
    #field int SpeedAccuracy
    #field int HorizontalConfidence
    #field int HeadingConfidence
    #field int AltitudeConfidence
    #field int SpeedConfidence
    #field float PositionDilutionOfPrecision
    #field float HorizontalDilutionOfPrecision
    #field float VerticalDilutionOfPrecision
#endstruct

#defstruct global GNSS_GEOFENCE_ALERT_DATA
    #field int Size
    #field int Version
    #field int GeofenceID
    #field int GeofenceState
    #field GNSS_FIXDATA_BASIC FixBasicData
    #field GNSS_FIXDATA_ACCURACY FixAccuracyData
    #field byte Unused 512
#endstruct

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