www.pudn.com > GPSTest.rar > GpsDeviceState.cs


// 
// Copyright (c) Microsoft Corporation.  All rights reserved. 
// 
// 
// Use of this source code is subject to the terms of the Microsoft end-user 
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT. 
// If you did not accept the terms of the EULA, you are not authorized to use 
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your 
// install media. 
// 
#region Using directives 
 
using System; 
using System.Runtime.InteropServices; 
 
#endregion 
 
public enum GpsServiceState : int 
{ 
    Off = 0, 
    On = 1, 
    StartingUp = 2,  
    ShuttingDown = 3, 
    Unloading = 4, 
    Uninitialized = 5, 
    Unknown = -1 
} 
 
namespace Microsoft.WindowsMobile.Samples.Location 
{ 
 
    [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); 
        } 
    } 
}