diff --git a/GMap.NET.WindowsMobile/GMap.NET.GPS/GpsDeviceState.cs b/GMap.NET.WindowsMobile/GMap.NET.GPS/GpsDeviceState.cs new file mode 100644 --- /dev/null +++ b/GMap.NET.WindowsMobile/GMap.NET.GPS/GpsDeviceState.cs @@ -0,0 +1,111 @@ +// +// 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); + } + } +}