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

import "inspectable.idl";
import "AsyncInfo.idl";
import "EventToken.idl";
import "windowscontracts.idl";
import "Windows.Foundation.idl";

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

        typedef struct TimeSpan TimeSpan;

        apicontract UniversalApiContract;
    }
}
namespace Windows
{
    namespace Devices
    {
        namespace Sensors
        {
            namespace Custom
            {
                interface ICustomSensor;

                interface ICustomSensor2;

                interface ICustomSensorReading;

                interface ICustomSensorReading2;

                interface ICustomSensorReadingChangedEventArgs;

                interface ICustomSensorStatics;

                runtimeclass CustomSensor;

                runtimeclass CustomSensorReading;

                runtimeclass CustomSensorReadingChangedEventArgs;
            }
        }
    }
}

// Generic instantiations
namespace Windows
{
    namespace Devices
    {
        namespace Sensors
        {
            namespace Custom
            {
                declare
                {
                    interface Windows.Foundation.IAsyncOperation<Windows.Devices.Sensors.Custom.CustomSensor*>;

                    interface Windows.Foundation.TypedEventHandler<Windows.Devices.Sensors.Custom.CustomSensor*, Windows.Devices.Sensors.Custom.CustomSensorReadingChangedEventArgs*>;
                }
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace Devices
    {
        namespace Sensors
        {
            namespace Custom
            {
                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [exclusiveto(Windows.Devices.Sensors.Custom.CustomSensor)]
                [uuid(A136F9AD-4034-4B4D-99DD-531AAC649C09)]
                interface ICustomSensor : IInspectable
                {
                    HRESULT GetCurrentReading([out] [retval] Windows.Devices.Sensors.Custom.CustomSensorReading** value);
                    [propget] HRESULT MinimumReportInterval([out] [retval] UINT32* value);
                    [propput] HRESULT ReportInterval([in] UINT32 value);
                    [propget] HRESULT ReportInterval([out] [retval] UINT32* value);
                    [propget] HRESULT DeviceId([out] [retval] HSTRING* value);
                    [eventadd] HRESULT ReadingChanged([in] Windows.Foundation.TypedEventHandler<Windows.Devices.Sensors.Custom.CustomSensor*, Windows.Devices.Sensors.Custom.CustomSensorReadingChangedEventArgs*>* handler, [out] [retval] EventRegistrationToken* token);
                    [eventremove] HRESULT ReadingChanged([in] EventRegistrationToken token);
                }

                [contract(Windows.Foundation.UniversalApiContract, 5.0)]
                [exclusiveto(Windows.Devices.Sensors.Custom.CustomSensor)]
                [uuid(20DB3111-EC58-4D9F-BFBD-E77825088510)]
                interface ICustomSensor2 : IInspectable
                {
                    [propput] HRESULT ReportLatency([in] UINT32 value);
                    [propget] HRESULT ReportLatency([out] [retval] UINT32* value);
                    [propget] HRESULT MaxBatchSize([out] [retval] UINT32* value);
                }

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [exclusiveto(Windows.Devices.Sensors.Custom.CustomSensorReading)]
                [uuid(64004F4D-446A-4366-A87A-5F963268EC53)]
                interface ICustomSensorReading : IInspectable
                {
                    [propget] HRESULT Timestamp([out] [retval] Windows.Foundation.DateTime* value);
                    [propget] HRESULT Properties([out] [retval] Windows.Foundation.Collections.IMapView<HSTRING, IInspectable*>** value);
                }

                [contract(Windows.Foundation.UniversalApiContract, 5.0)]
                [exclusiveto(Windows.Devices.Sensors.Custom.CustomSensorReading)]
                [uuid(223C98EA-BF73-4992-9A48-D3C897594CCB)]
                interface ICustomSensorReading2 : IInspectable
                {
                    [propget] HRESULT PerformanceCount([out] [retval] Windows.Foundation.IReference<Windows.Foundation.TimeSpan>** value);
                }

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [exclusiveto(Windows.Devices.Sensors.Custom.CustomSensorReadingChangedEventArgs)]
                [uuid(6B202023-CFFD-4CC1-8FF0-E21823D76FCC)]
                interface ICustomSensorReadingChangedEventArgs : IInspectable
                {
                    [propget] HRESULT Reading([out] [retval] Windows.Devices.Sensors.Custom.CustomSensorReading** value);
                }

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [exclusiveto(Windows.Devices.Sensors.Custom.CustomSensor)]
                [uuid(992052CF-F422-4C7D-836B-E7DC74A7124B)]
                interface ICustomSensorStatics : IInspectable
                {
                    HRESULT GetDeviceSelector([in] GUID interfaceId, [out] [retval] HSTRING* result);
                    HRESULT FromIdAsync([in] HSTRING sensorId, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Devices.Sensors.Custom.CustomSensor*>** result);
                }

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [marshaling_behavior(agile)]
                [static(Windows.Devices.Sensors.Custom.ICustomSensorStatics, Windows.Foundation.UniversalApiContract, 1.0)]
                [threading(both)]
                runtimeclass CustomSensor
                {
                    [default] interface Windows.Devices.Sensors.Custom.ICustomSensor;
                    [contract(Windows.Foundation.UniversalApiContract, 5.0)] interface Windows.Devices.Sensors.Custom.ICustomSensor2;
                }

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [marshaling_behavior(agile)]
                [threading(both)]
                runtimeclass CustomSensorReading
                {
                    [default] interface Windows.Devices.Sensors.Custom.ICustomSensorReading;
                    [contract(Windows.Foundation.UniversalApiContract, 5.0)] interface Windows.Devices.Sensors.Custom.ICustomSensorReading2;
                }

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [marshaling_behavior(agile)]
                [threading(both)]
                runtimeclass CustomSensorReadingChangedEventArgs
                {
                    [default] interface Windows.Devices.Sensors.Custom.ICustomSensorReadingChangedEventArgs;
                }
            }
        }
    }
}
