// // Copyright (c) Microsoft Corporation. All rights reserved. // // // Use of this sample source code is subject to the terms of the Microsoft // license agreement under which you licensed this sample source code. If // you did not accept the terms of the license agreement, you are not // authorized to use this sample source code. For the terms of the license, // please see the license agreement between you and Microsoft or, if applicable, // see the LICENSE.RTF on your install media or the root of your tools installation. // THE SAMPLE SOURCE CODE IS PROVIDED "AS IS", WITH NO WARRANTIES OR INDEMNITIES. // #region Using directives using System; using System.Runtime.InteropServices; #endregion namespace GMap.NET.GPS { public enum GpsServiceState : int { Off=0, On=1, StartingUp=2, ShuttingDown=3, Unloading=4, Uninitialized=5, Unknown=-1 } [StructLayout(LayoutKind.Sequential)] internal struct FileTime { int dwLowDateTime; int dwHighDateTime; } /// /// GpsDeviceState holds the state of the gps device and the friendly name if the /// gps supports them. /// [StructLayout(LayoutKind.Sequential)] public class GpsDeviceState { public static int GpsMaxFriendlyName = 64; public static int GpsDeviceStructureSize = 216; int serviceState = 0; /// /// State of the GPS Intermediate Driver service /// public GpsServiceState ServiceState { get { return (GpsServiceState) serviceState; } } int deviceState = 0; /// /// Status of the actual GPS device driver. /// public GpsServiceState DeviceState { get { return (GpsServiceState) deviceState; } } string friendlyName = ""; /// /// Friendly name of the real GPS device we are currently using. /// public string FriendlyName { get { return friendlyName; } } /// /// Constructor of GpsDeviceState. It copies values from the native pointer /// passed in. /// /// Native pointer to memory that contains /// the GPS_DEVICE data public GpsDeviceState(IntPtr pGpsDevice) { // make sure our pointer is valid if(pGpsDevice == IntPtr.Zero) { throw new ArgumentException(); } // read in the service state which starts at offset 8 serviceState = Marshal.ReadInt32(pGpsDevice, 8); // read in the device state which starts at offset 12 deviceState = Marshal.ReadInt32(pGpsDevice, 12); // the friendly name starts at offset 88 IntPtr pFriendlyName = (IntPtr) (pGpsDevice.ToInt32() + 88); // marshal the native string into our gpsFriendlyName friendlyName = Marshal.PtrToStringUni(pFriendlyName); } } }