//
// Copyright (c) Microsoft Corporation. All rights reserved.
// 
//
// File generated by WinMDIDL version 8.00.0008
//

import "inspectable.idl";
import "AsyncInfo.idl";
import "EventToken.idl";
import "Windows.Foundation.idl";
// Additional imports to ensure that all required headers are included
cpp_quote("#if defined(__cplusplus)")
cpp_quote("}")
cpp_quote("#endif // defined(__cplusplus)")
cpp_quote("#include <Windows.Foundation.h>")
cpp_quote("#if defined(__cplusplus)")
cpp_quote("extern \"C\" {")
cpp_quote("#endif // defined(__cplusplus)")

// Forward Declare
namespace Windows
{
    namespace Foundation
    {
        typedef struct DateTime DateTime;

        typedef struct TimeSpan TimeSpan;
    }
}
namespace Windows
{
    namespace Devices
    {
        namespace Geolocation
        {
            typedef enum PositionAccuracy PositionAccuracy;

            typedef enum PositionStatus PositionStatus;

            interface IGeocoordinate;

            interface ICivicAddress;

            interface IGeoposition;

            interface IPositionChangedEventArgs;

            interface IStatusChangedEventArgs;

            interface IGeolocator;

            runtimeclass Geocoordinate;

            runtimeclass CivicAddress;

            runtimeclass Geoposition;

            runtimeclass PositionChangedEventArgs;

            runtimeclass StatusChangedEventArgs;

            runtimeclass Geolocator;
        }
    }
}

// Generic instantiations
namespace Windows
{
    namespace Devices
    {
        namespace Geolocation
        {
            declare
            {
                interface Windows.Foundation.IAsyncOperation<Windows.Devices.Geolocation.Geoposition*>;

                interface Windows.Foundation.TypedEventHandler<Windows.Devices.Geolocation.Geolocator*, Windows.Devices.Geolocation.PositionChangedEventArgs*>;

                interface Windows.Foundation.TypedEventHandler<Windows.Devices.Geolocation.Geolocator*, Windows.Devices.Geolocation.StatusChangedEventArgs*>;
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace Devices
    {
        namespace Geolocation
        {
            [version(0x06020000)]
            enum PositionAccuracy
            {
                Default = 0,
                High    = 1
            };

            [version(0x06020000)]
            enum PositionStatus
            {
                Ready          = 0,
                Initializing   = 1,
                NoData         = 2,
                Disabled       = 3,
                NotInitialized = 4,
                NotAvailable   = 5
            };

            [uuid(EE21A3AA-976A-4C70-803D-083EA55BCBC4)]
            [version(0x06020000)]
            [exclusiveto(Windows.Devices.Geolocation.Geocoordinate)]
            interface IGeocoordinate : IInspectable
            {
                [propget] HRESULT Latitude([out] [retval] DOUBLE* value);
                [propget] HRESULT Longitude([out] [retval] DOUBLE* value);
                [propget] HRESULT Altitude([out] [retval] Windows.Foundation.IReference<DOUBLE>** value);
                [propget] HRESULT Accuracy([out] [retval] DOUBLE* value);
                [propget] HRESULT AltitudeAccuracy([out] [retval] Windows.Foundation.IReference<DOUBLE>** value);
                [propget] HRESULT Heading([out] [retval] Windows.Foundation.IReference<DOUBLE>** value);
                [propget] HRESULT Speed([out] [retval] Windows.Foundation.IReference<DOUBLE>** value);
                [propget] HRESULT Timestamp([out] [retval] Windows.Foundation.DateTime* value);
            }

            [uuid(A8567A1A-64F4-4D48-BCEA-F6B008ECA34C)]
            [version(0x06020000)]
            [exclusiveto(Windows.Devices.Geolocation.CivicAddress)]
            interface ICivicAddress : IInspectable
            {
                [propget] HRESULT Country([out] [retval] HSTRING* value);
                [propget] HRESULT State([out] [retval] HSTRING* value);
                [propget] HRESULT City([out] [retval] HSTRING* value);
                [propget] HRESULT PostalCode([out] [retval] HSTRING* value);
                [propget] HRESULT Timestamp([out] [retval] Windows.Foundation.DateTime* value);
            }

            [uuid(C18D0454-7D41-4FF7-A957-9DFFB4EF7F5B)]
            [exclusiveto(Windows.Devices.Geolocation.Geoposition)]
            [version(0x06020000)]
            interface IGeoposition : IInspectable
            {
                [propget] HRESULT Coordinate([out] [retval] Windows.Devices.Geolocation.Geocoordinate** value);
                [propget] HRESULT CivicAddress([out] [retval] Windows.Devices.Geolocation.CivicAddress** value);
            }

            [uuid(37859CE5-9D1E-46C5-BF3B-6AD8CAC1A093)]
            [exclusiveto(Windows.Devices.Geolocation.PositionChangedEventArgs)]
            [version(0x06020000)]
            interface IPositionChangedEventArgs : IInspectable
            {
                [propget] HRESULT Position([out] [retval] Windows.Devices.Geolocation.Geoposition** value);
            }

            [uuid(3453D2DA-8C93-4111-A205-9AECFC9BE5C0)]
            [exclusiveto(Windows.Devices.Geolocation.StatusChangedEventArgs)]
            [version(0x06020000)]
            interface IStatusChangedEventArgs : IInspectable
            {
                [propget] HRESULT Status([out] [retval] Windows.Devices.Geolocation.PositionStatus* value);
            }

            [uuid(A9C3BF62-4524-4989-8AA9-DE019D2E551F)]
            [exclusiveto(Windows.Devices.Geolocation.Geolocator)]
            [version(0x06020000)]
            interface IGeolocator : IInspectable
            {
                [propget] HRESULT DesiredAccuracy([out] [retval] Windows.Devices.Geolocation.PositionAccuracy* value);
                [propput] HRESULT DesiredAccuracy([in] Windows.Devices.Geolocation.PositionAccuracy value);
                [propget] HRESULT MovementThreshold([out] [retval] DOUBLE* value);
                [propput] HRESULT MovementThreshold([in] DOUBLE value);
                [propget] HRESULT ReportInterval([out] [retval] UINT32* value);
                [propput] HRESULT ReportInterval([in] UINT32 value);
                [propget] HRESULT LocationStatus([out] [retval] Windows.Devices.Geolocation.PositionStatus* value);
                [overload("GetGeopositionAsync")] HRESULT GetGeopositionAsync([out] [retval] Windows.Foundation.IAsyncOperation<Windows.Devices.Geolocation.Geoposition*>** value);
                [overload("GetGeopositionAsync")] HRESULT GetGeopositionAsyncWithAgeAndTimeout([in] Windows.Foundation.TimeSpan maximumAge, [in] Windows.Foundation.TimeSpan timeout, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Devices.Geolocation.Geoposition*>** value);
                [eventadd] HRESULT PositionChanged([in] Windows.Foundation.TypedEventHandler<Windows.Devices.Geolocation.Geolocator*, Windows.Devices.Geolocation.PositionChangedEventArgs*>* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT PositionChanged([in] EventRegistrationToken token);
                [eventadd] HRESULT StatusChanged([in] Windows.Foundation.TypedEventHandler<Windows.Devices.Geolocation.Geolocator*, Windows.Devices.Geolocation.StatusChangedEventArgs*>* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT StatusChanged([in] EventRegistrationToken token);
            }

            [marshaling_behavior(agile)]
            [version(0x06020000)]
            runtimeclass Geocoordinate
            {
                [default] interface Windows.Devices.Geolocation.IGeocoordinate;
            }

            [marshaling_behavior(agile)]
            [version(0x06020000)]
            runtimeclass CivicAddress
            {
                [default] interface Windows.Devices.Geolocation.ICivicAddress;
            }

            [version(0x06020000)]
            [marshaling_behavior(agile)]
            runtimeclass Geoposition
            {
                [default] interface Windows.Devices.Geolocation.IGeoposition;
            }

            [marshaling_behavior(agile)]
            [version(0x06020000)]
            runtimeclass PositionChangedEventArgs
            {
                [default] interface Windows.Devices.Geolocation.IPositionChangedEventArgs;
            }

            [version(0x06020000)]
            [marshaling_behavior(agile)]
            runtimeclass StatusChangedEventArgs
            {
                [default] interface Windows.Devices.Geolocation.IStatusChangedEventArgs;
            }

            [activatable(0x06020000)]
            [version(0x06020000)]
            [marshaling_behavior(agile)]
            [threading(both)]
            runtimeclass Geolocator
            {
                [default] interface Windows.Devices.Geolocation.IGeolocator;
            }
        }
    }
}
