diff --git a/include/Makefile.in b/include/Makefile.in index 48f43dfa372..1f28524adc2 100644 --- a/include/Makefile.in +++ b/include/Makefile.in @@ -809,6 +809,7 @@ SOURCES = \ windot11.h \ windows.devices.bluetooth.idl \ windows.devices.enumeration.idl \ + windows.devices.geolocation.idl \ windows.devices.haptics.idl \ windows.devices.power.idl \ windows.devices.radios.idl \ diff --git a/include/windows.devices.geolocation.idl b/include/windows.devices.geolocation.idl new file mode 100644 index 00000000000..ce4853ffc9d --- /dev/null +++ b/include/windows.devices.geolocation.idl @@ -0,0 +1,226 @@ +/* + * Copyright 2023 Fabian Maurer + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifdef __WIDL__ +#pragma winrt ns_prefix +#endif + +#ifndef DO_NO_IMPORTS +import "inspectable.idl"; +import "asyncinfo.idl"; +import "eventtoken.idl"; +import "windowscontracts.idl"; +import "windows.foundation.idl"; +#endif + +namespace Windows.Devices.Geolocation { + + typedef enum PositionAccuracy PositionAccuracy; + typedef enum PositionStatus PositionStatus; + + interface IGeolocator; + interface IGeoposition; + interface IGeocoordinate; + interface IPositionChangedEventArgs; + interface IStatusChangedEventArgs; + interface ICivicAddress; + + runtimeclass Geolocator; + runtimeclass Geoposition; + runtimeclass Geocoordinate; + runtimeclass PositionChangedEventArgs; + runtimeclass StatusChangedEventArgs; + runtimeclass CivicAddress; + + declare { + interface Windows.Foundation.AsyncOperationCompletedHandler; + interface Windows.Foundation.IAsyncOperation; + interface Windows.Foundation.TypedEventHandler; + interface Windows.Foundation.TypedEventHandler; + } + + [contract(Windows.Foundation.UniversalApiContract, 1.0)] + enum PositionAccuracy + { + Default = 0, + High = 1, + }; + + [contract(Windows.Foundation.UniversalApiContract, 1.0)] + enum PositionStatus + { + Ready = 0, + Initializing = 1, + NoData = 2, + Disabled = 3, + NotInitialized = 4, + NotAvailable = 5, + }; + + /* Interfaces */ + + [ + contract(Windows.Foundation.UniversalApiContract, 1.0), + exclusiveto(Windows.Devices.Geolocation.Geolocator), + uuid(a9c3bf62-4524-4989-8aa9-de019d2e551f) + ] + 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 **value); + [overload("GetGeopositionAsync")] + HRESULT GetGeopositionAsyncWithAgeAndTimeout([in] Windows.Foundation.TimeSpan maximum_age, + [in] Windows.Foundation.TimeSpan timeout, + [out, retval] Windows.Foundation.IAsyncOperation **value); + [eventadd] HRESULT PositionChanged([in] Windows.Foundation.TypedEventHandler *handler, + [out, retval] EventRegistrationToken *token); + [eventremove] HRESULT PositionChanged([in] EventRegistrationToken token); + [eventadd] HRESULT StatusChanged([in] Windows.Foundation.TypedEventHandler *handler, + [out, retval] EventRegistrationToken *token); + [eventremove] HRESULT StatusChanged([in] EventRegistrationToken token); + } + + [ + contract(Windows.Foundation.UniversalApiContract, 1.0), + exclusiveto(Windows.Devices.Geolocation.Geoposition), + uuid(c18d0454-7d41-4ff7-a957-9dffb4ef7f5b) + ] + interface IGeoposition : IInspectable + { + [propget] HRESULT Coordinate([out, retval] Windows.Devices.Geolocation.Geocoordinate **value); + [propget] HRESULT CivicAddress([out, retval] Windows.Devices.Geolocation.CivicAddress **value); + } + + [ + contract(Windows.Foundation.UniversalApiContract, 1.0), + exclusiveto(Windows.Devices.Geolocation.Geocoordinate), + uuid(ee21a3aa-976a-ac70-803d-083ea55bcbc4) + ] + interface IGeocoordinate : IInspectable + { + [deprecated("Use Point.Position.Latitude", deprecate, Windows.Foundation.UniversalApiContract, 1.0)] + [propget] HRESULT Latitude([out, retval] DOUBLE *value); + [deprecated("Use Point.Position.Longitude", deprecate, Windows.Foundation.UniversalApiContract, 1.0)] + [propget] HRESULT Longitude([out, retval] DOUBLE *value); + [deprecated("Use Point.Position.Altitude", deprecate, Windows.Foundation.UniversalApiContract, 1.0)] + [propget] HRESULT Altitude([out, retval] Windows.Foundation.IReference **value); + [propget] HRESULT Accuracy([out, retval] DOUBLE *value); + [propget] HRESULT AltitudeAccuracy([out, retval] Windows.Foundation.IReference **value); + [propget] HRESULT Heading([out, retval] Windows.Foundation.IReference **value); + [propget] HRESULT Speed([out, retval] Windows.Foundation.IReference **value); + [propget] HRESULT Timestamp([out, retval] Windows.Foundation.DateTime *value); + } + + [ + contract(Windows.Foundation.UniversalApiContract, 1.0), + exclusiveto(Windows.Devices.Geolocation.PositionChangedEventArgs), + uuid(37859ce5-9d1e-46c5-bf3b-6ad8cac1a093) + ] + interface IPositionChangedEventArgs : IInspectable + { + [propget] HRESULT Position([out, retval] Windows.Devices.Geolocation.Geoposition **value); + } + + [ + contract(Windows.Foundation.UniversalApiContract, 1.0), + exclusiveto(Windows.Devices.Geolocation.StatusChangedEventArgs), + uuid(3453d2da-8c93-4111-a205-9aecfc9be5c0) + ] + interface IStatusChangedEventArgs : IInspectable + { + [propget] HRESULT Status([out, retval] Windows.Devices.Geolocation.PositionStatus *value); + } + + [ + contract(Windows.Foundation.UniversalApiContract, 1.0), + exclusiveto(Windows.Devices.Geolocation.CivicAddress), + uuid(a8567a1a-64f4-4d48-bcea-f6b008eca34c) + ] + 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); + } + + /* Runtime Classes */ + + [ + activatable(Windows.Foundation.UniversalApiContract, 1.0), + contract(Windows.Foundation.UniversalApiContract, 1.0), + marshaling_behavior(agile), + threading(both) + ] + runtimeclass Geolocator + { + [default] interface Windows.Devices.Geolocation.IGeolocator; + } + + [ + contract(Windows.Foundation.UniversalApiContract, 1.0), + marshaling_behavior(agile) + ] + runtimeclass Geoposition + { + [default] interface Windows.Devices.Geolocation.IGeoposition; + } + + [ + contract(Windows.Foundation.UniversalApiContract, 1.0), + marshaling_behavior(agile) + ] + runtimeclass Geocoordinate + { + [default] interface Windows.Devices.Geolocation.IGeocoordinate; + } + + [ + contract(Windows.Foundation.UniversalApiContract, 1.0), + marshaling_behavior(agile) + ] + runtimeclass PositionChangedEventArgs + { + [default] interface Windows.Devices.Geolocation.IPositionChangedEventArgs; + } + + [ + marshaling_behavior(agile) + ] + runtimeclass StatusChangedEventArgs + { + [default] interface Windows.Devices.Geolocation.IStatusChangedEventArgs; + } + + [ + contract(Windows.Foundation.UniversalApiContract, 1.0), + marshaling_behavior(agile) + ] + runtimeclass CivicAddress + { + [default] interface Windows.Devices.Geolocation.ICivicAddress; + } +}