//
// 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";
import "Windows.Storage.idl";
import "Windows.Storage.Streams.idl";

// Forward Declare
namespace Windows
{
    namespace Foundation
    {
        interface IClosable;

        apicontract UniversalApiContract;
    }
}
namespace Windows
{
    namespace Storage
    {
        typedef enum FileAccessMode FileAccessMode;
    }
}
namespace Windows
{
    namespace Storage
    {
        namespace Streams
        {
            interface IBuffer;
        }
    }
}
namespace Windows
{
    namespace Devices
    {
        namespace HumanInterfaceDevice
        {
            typedef enum HidCollectionType HidCollectionType;

            typedef enum HidReportType HidReportType;

            interface IHidBooleanControl;

            interface IHidBooleanControlDescription;

            interface IHidBooleanControlDescription2;

            interface IHidCollection;

            interface IHidDevice;

            interface IHidDeviceStatics;

            interface IHidFeatureReport;

            interface IHidInputReport;

            interface IHidInputReportReceivedEventArgs;

            interface IHidNumericControl;

            interface IHidNumericControlDescription;

            interface IHidOutputReport;

            runtimeclass HidBooleanControl;

            runtimeclass HidBooleanControlDescription;

            runtimeclass HidCollection;

            runtimeclass HidDevice;

            runtimeclass HidFeatureReport;

            runtimeclass HidInputReport;

            runtimeclass HidInputReportReceivedEventArgs;

            runtimeclass HidNumericControl;

            runtimeclass HidNumericControlDescription;

            runtimeclass HidOutputReport;
        }
    }
}

// Generic instantiations
namespace Windows
{
    namespace Devices
    {
        namespace HumanInterfaceDevice
        {
            declare
            {
                interface Windows.Foundation.Collections.IIterable<Windows.Devices.HumanInterfaceDevice.HidBooleanControl*>;

                interface Windows.Foundation.Collections.IIterable<Windows.Devices.HumanInterfaceDevice.HidBooleanControlDescription*>;

                interface Windows.Foundation.Collections.IIterable<Windows.Devices.HumanInterfaceDevice.HidCollection*>;

                interface Windows.Foundation.Collections.IIterable<Windows.Devices.HumanInterfaceDevice.HidNumericControlDescription*>;

                interface Windows.Foundation.Collections.IIterator<Windows.Devices.HumanInterfaceDevice.HidBooleanControl*>;

                interface Windows.Foundation.Collections.IIterator<Windows.Devices.HumanInterfaceDevice.HidBooleanControlDescription*>;

                interface Windows.Foundation.Collections.IIterator<Windows.Devices.HumanInterfaceDevice.HidCollection*>;

                interface Windows.Foundation.Collections.IIterator<Windows.Devices.HumanInterfaceDevice.HidNumericControlDescription*>;

                interface Windows.Foundation.Collections.IVectorView<Windows.Devices.HumanInterfaceDevice.HidBooleanControl*>;

                interface Windows.Foundation.Collections.IVectorView<Windows.Devices.HumanInterfaceDevice.HidBooleanControlDescription*>;

                interface Windows.Foundation.Collections.IVectorView<Windows.Devices.HumanInterfaceDevice.HidCollection*>;

                interface Windows.Foundation.Collections.IVectorView<Windows.Devices.HumanInterfaceDevice.HidNumericControlDescription*>;

                interface Windows.Foundation.IAsyncOperation<Windows.Devices.HumanInterfaceDevice.HidDevice*>;

                interface Windows.Foundation.IAsyncOperation<Windows.Devices.HumanInterfaceDevice.HidFeatureReport*>;

                interface Windows.Foundation.IAsyncOperation<Windows.Devices.HumanInterfaceDevice.HidInputReport*>;

                interface Windows.Foundation.TypedEventHandler<Windows.Devices.HumanInterfaceDevice.HidDevice*, Windows.Devices.HumanInterfaceDevice.HidInputReportReceivedEventArgs*>;
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace Devices
    {
        namespace HumanInterfaceDevice
        {
            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            enum HidCollectionType
            {
                Physical      = 0,
                Application   = 1,
                Logical       = 2,
                Report        = 3,
                NamedArray    = 4,
                UsageSwitch   = 5,
                UsageModifier = 6,
                Other         = 7
            };

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            enum HidReportType
            {
                Input   = 0,
                Output  = 1,
                Feature = 2
            };

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Devices.HumanInterfaceDevice.HidBooleanControl)]
            [uuid(524DF48A-3695-408C-BBA2-E2EB5ABFBC20)]
            interface IHidBooleanControl : IInspectable
            {
                [propget] HRESULT Id([out] [retval] UINT32* value);
                [propget] HRESULT UsagePage([out] [retval] UINT16* value);
                [propget] HRESULT UsageId([out] [retval] UINT16* value);
                [propget] HRESULT IsActive([out] [retval] boolean* value);
                [propput] HRESULT IsActive([in] boolean value);
                [propget] HRESULT ControlDescription([out] [retval] Windows.Devices.HumanInterfaceDevice.HidBooleanControlDescription** value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Devices.HumanInterfaceDevice.HidBooleanControlDescription)]
            [uuid(6196E543-29D8-4A2A-8683-849E207BBE31)]
            interface IHidBooleanControlDescription : IInspectable
            {
                [propget] HRESULT Id([out] [retval] UINT32* value);
                [propget] HRESULT ReportId([out] [retval] UINT16* value);
                [propget] HRESULT ReportType([out] [retval] Windows.Devices.HumanInterfaceDevice.HidReportType* value);
                [propget] HRESULT UsagePage([out] [retval] UINT16* value);
                [propget] HRESULT UsageId([out] [retval] UINT16* value);
                [propget] HRESULT ParentCollections([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Devices.HumanInterfaceDevice.HidCollection*>** value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 3.0)]
            [exclusiveto(Windows.Devices.HumanInterfaceDevice.HidBooleanControlDescription)]
            [uuid(C8EED2EA-8A77-4C36-AA00-5FF0449D3E73)]
            interface IHidBooleanControlDescription2 : IInspectable
            {
                [propget] HRESULT IsAbsolute([out] [retval] boolean* value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Devices.HumanInterfaceDevice.HidCollection)]
            [uuid(7189F5A3-32F1-46E3-BEFD-44D2663B7E6A)]
            interface IHidCollection : IInspectable
            {
                [propget] HRESULT Id([out] [retval] UINT32* value);
                [propget] HRESULT Type([out] [retval] Windows.Devices.HumanInterfaceDevice.HidCollectionType* value);
                [propget] HRESULT UsagePage([out] [retval] UINT32* value);
                [propget] HRESULT UsageId([out] [retval] UINT32* value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Devices.HumanInterfaceDevice.HidDevice)]
            [uuid(5F8A14E7-2200-432E-95DA-D09B87D574A8)]
            interface IHidDevice : IInspectable
                requires
                    Windows.Foundation.IClosable
            {
                [propget] HRESULT VendorId([out] [retval] UINT16* value);
                [propget] HRESULT ProductId([out] [retval] UINT16* value);
                [propget] HRESULT Version([out] [retval] UINT16* value);
                [propget] HRESULT UsagePage([out] [retval] UINT16* value);
                [propget] HRESULT UsageId([out] [retval] UINT16* value);
                [overload("GetInputReportAsync")] HRESULT GetInputReportAsync([out] [retval] Windows.Foundation.IAsyncOperation<Windows.Devices.HumanInterfaceDevice.HidInputReport*>** value);
                [overload("GetInputReportAsync")] HRESULT GetInputReportByIdAsync([in] UINT16 reportId, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Devices.HumanInterfaceDevice.HidInputReport*>** value);
                [overload("GetFeatureReportAsync")] HRESULT GetFeatureReportAsync([out] [retval] Windows.Foundation.IAsyncOperation<Windows.Devices.HumanInterfaceDevice.HidFeatureReport*>** value);
                [overload("GetFeatureReportAsync")] HRESULT GetFeatureReportByIdAsync([in] UINT16 reportId, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Devices.HumanInterfaceDevice.HidFeatureReport*>** value);
                [overload("CreateOutputReport")] HRESULT CreateOutputReport([out] [retval] Windows.Devices.HumanInterfaceDevice.HidOutputReport** outputReport);
                [overload("CreateOutputReport")] HRESULT CreateOutputReportById([in] UINT16 reportId, [out] [retval] Windows.Devices.HumanInterfaceDevice.HidOutputReport** outputReport);
                [overload("CreateFeatureReport")] HRESULT CreateFeatureReport([out] [retval] Windows.Devices.HumanInterfaceDevice.HidFeatureReport** featureReport);
                [overload("CreateFeatureReport")] HRESULT CreateFeatureReportById([in] UINT16 reportId, [out] [retval] Windows.Devices.HumanInterfaceDevice.HidFeatureReport** featureReport);
                HRESULT SendOutputReportAsync([in] Windows.Devices.HumanInterfaceDevice.HidOutputReport* outputReport, [out] [retval] Windows.Foundation.IAsyncOperation<UINT32>** operation);
                HRESULT SendFeatureReportAsync([in] Windows.Devices.HumanInterfaceDevice.HidFeatureReport* featureReport, [out] [retval] Windows.Foundation.IAsyncOperation<UINT32>** operation);
                HRESULT GetBooleanControlDescriptions([in] Windows.Devices.HumanInterfaceDevice.HidReportType reportType, [in] UINT16 usagePage, [in] UINT16 usageId, [out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Devices.HumanInterfaceDevice.HidBooleanControlDescription*>** value);
                HRESULT GetNumericControlDescriptions([in] Windows.Devices.HumanInterfaceDevice.HidReportType reportType, [in] UINT16 usagePage, [in] UINT16 usageId, [out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Devices.HumanInterfaceDevice.HidNumericControlDescription*>** value);
                [eventadd] HRESULT InputReportReceived([in] Windows.Foundation.TypedEventHandler<Windows.Devices.HumanInterfaceDevice.HidDevice*, Windows.Devices.HumanInterfaceDevice.HidInputReportReceivedEventArgs*>* reportHandler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT InputReportReceived([in] EventRegistrationToken token);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Devices.HumanInterfaceDevice.HidDevice)]
            [uuid(9E5981E4-9856-418C-9F73-77DE0CD85754)]
            interface IHidDeviceStatics : IInspectable
            {
                [overload("GetDeviceSelector")] HRESULT GetDeviceSelector([in] UINT16 usagePage, [in] UINT16 usageId, [out] [retval] HSTRING* selector);
                [overload("GetDeviceSelector")] HRESULT GetDeviceSelectorVidPid([in] UINT16 usagePage, [in] UINT16 usageId, [in] UINT16 vendorId, [in] UINT16 productId, [out] [retval] HSTRING* selector);
                HRESULT FromIdAsync([in] HSTRING deviceId, [in] Windows.Storage.FileAccessMode accessMode, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Devices.HumanInterfaceDevice.HidDevice*>** hidDevice);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Devices.HumanInterfaceDevice.HidFeatureReport)]
            [uuid(841D9B79-5AE5-46E3-82EF-1FEC5C8942F4)]
            interface IHidFeatureReport : IInspectable
            {
                [propget] HRESULT Id([out] [retval] UINT16* value);
                [propget] HRESULT Data([out] [retval] Windows.Storage.Streams.IBuffer** value);
                [propput] HRESULT Data([in] Windows.Storage.Streams.IBuffer* value);
                HRESULT GetBooleanControl([in] UINT16 usagePage, [in] UINT16 usageId, [out] [retval] Windows.Devices.HumanInterfaceDevice.HidBooleanControl** value);
                HRESULT GetBooleanControlByDescription([in] Windows.Devices.HumanInterfaceDevice.HidBooleanControlDescription* controlDescription, [out] [retval] Windows.Devices.HumanInterfaceDevice.HidBooleanControl** value);
                HRESULT GetNumericControl([in] UINT16 usagePage, [in] UINT16 usageId, [out] [retval] Windows.Devices.HumanInterfaceDevice.HidNumericControl** value);
                HRESULT GetNumericControlByDescription([in] Windows.Devices.HumanInterfaceDevice.HidNumericControlDescription* controlDescription, [out] [retval] Windows.Devices.HumanInterfaceDevice.HidNumericControl** value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Devices.HumanInterfaceDevice.HidInputReport)]
            [uuid(C35D0E50-F7E7-4E8D-B23E-CABBE56B90E9)]
            interface IHidInputReport : IInspectable
            {
                [propget] HRESULT Id([out] [retval] UINT16* value);
                [propget] HRESULT Data([out] [retval] Windows.Storage.Streams.IBuffer** value);
                [propget] HRESULT ActivatedBooleanControls([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Devices.HumanInterfaceDevice.HidBooleanControl*>** value);
                [propget] HRESULT TransitionedBooleanControls([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Devices.HumanInterfaceDevice.HidBooleanControl*>** value);
                HRESULT GetBooleanControl([in] UINT16 usagePage, [in] UINT16 usageId, [out] [retval] Windows.Devices.HumanInterfaceDevice.HidBooleanControl** value);
                HRESULT GetBooleanControlByDescription([in] Windows.Devices.HumanInterfaceDevice.HidBooleanControlDescription* controlDescription, [out] [retval] Windows.Devices.HumanInterfaceDevice.HidBooleanControl** value);
                HRESULT GetNumericControl([in] UINT16 usagePage, [in] UINT16 usageId, [out] [retval] Windows.Devices.HumanInterfaceDevice.HidNumericControl** value);
                HRESULT GetNumericControlByDescription([in] Windows.Devices.HumanInterfaceDevice.HidNumericControlDescription* controlDescription, [out] [retval] Windows.Devices.HumanInterfaceDevice.HidNumericControl** value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Devices.HumanInterfaceDevice.HidInputReportReceivedEventArgs)]
            [uuid(7059C5CB-59B2-4DC2-985C-0ADC6136FA2D)]
            interface IHidInputReportReceivedEventArgs : IInspectable
            {
                [propget] HRESULT Report([out] [retval] Windows.Devices.HumanInterfaceDevice.HidInputReport** value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Devices.HumanInterfaceDevice.HidNumericControl)]
            [uuid(E38A12A5-35A7-4B75-89C8-FB1F28B10823)]
            interface IHidNumericControl : IInspectable
            {
                [propget] HRESULT Id([out] [retval] UINT32* value);
                [propget] HRESULT IsGrouped([out] [retval] boolean* value);
                [propget] HRESULT UsagePage([out] [retval] UINT16* value);
                [propget] HRESULT UsageId([out] [retval] UINT16* value);
                [propget] HRESULT Value([out] [retval] INT64* value);
                [propput] HRESULT Value([in] INT64 value);
                [propget] HRESULT ScaledValue([out] [retval] INT64* value);
                [propput] HRESULT ScaledValue([in] INT64 value);
                [propget] HRESULT ControlDescription([out] [retval] Windows.Devices.HumanInterfaceDevice.HidNumericControlDescription** value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Devices.HumanInterfaceDevice.HidNumericControlDescription)]
            [uuid(638D5E86-1D97-4C75-927F-5FF58BA05E32)]
            interface IHidNumericControlDescription : IInspectable
            {
                [propget] HRESULT Id([out] [retval] UINT32* value);
                [propget] HRESULT ReportId([out] [retval] UINT16* value);
                [propget] HRESULT ReportType([out] [retval] Windows.Devices.HumanInterfaceDevice.HidReportType* value);
                [propget] HRESULT ReportSize([out] [retval] UINT32* value);
                [propget] HRESULT ReportCount([out] [retval] UINT32* value);
                [propget] HRESULT UsagePage([out] [retval] UINT16* value);
                [propget] HRESULT UsageId([out] [retval] UINT16* value);
                [propget] HRESULT LogicalMinimum([out] [retval] INT32* value);
                [propget] HRESULT LogicalMaximum([out] [retval] INT32* value);
                [propget] HRESULT PhysicalMinimum([out] [retval] INT32* value);
                [propget] HRESULT PhysicalMaximum([out] [retval] INT32* value);
                [propget] HRESULT UnitExponent([out] [retval] UINT32* value);
                [propget] HRESULT Unit([out] [retval] UINT32* value);
                [propget] HRESULT IsAbsolute([out] [retval] boolean* value);
                [propget] HRESULT HasNull([out] [retval] boolean* value);
                [propget] HRESULT ParentCollections([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Devices.HumanInterfaceDevice.HidCollection*>** value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Devices.HumanInterfaceDevice.HidOutputReport)]
            [uuid(62CB2544-C896-4463-93C1-DF9DB053C450)]
            interface IHidOutputReport : IInspectable
            {
                [propget] HRESULT Id([out] [retval] UINT16* value);
                [propget] HRESULT Data([out] [retval] Windows.Storage.Streams.IBuffer** value);
                [propput] HRESULT Data([in] Windows.Storage.Streams.IBuffer* value);
                HRESULT GetBooleanControl([in] UINT16 usagePage, [in] UINT16 usageId, [out] [retval] Windows.Devices.HumanInterfaceDevice.HidBooleanControl** value);
                HRESULT GetBooleanControlByDescription([in] Windows.Devices.HumanInterfaceDevice.HidBooleanControlDescription* controlDescription, [out] [retval] Windows.Devices.HumanInterfaceDevice.HidBooleanControl** value);
                HRESULT GetNumericControl([in] UINT16 usagePage, [in] UINT16 usageId, [out] [retval] Windows.Devices.HumanInterfaceDevice.HidNumericControl** value);
                HRESULT GetNumericControlByDescription([in] Windows.Devices.HumanInterfaceDevice.HidNumericControlDescription* controlDescription, [out] [retval] Windows.Devices.HumanInterfaceDevice.HidNumericControl** value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [marshaling_behavior(agile)]
            runtimeclass HidBooleanControl
            {
                [default] interface Windows.Devices.HumanInterfaceDevice.IHidBooleanControl;
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [marshaling_behavior(agile)]
            runtimeclass HidBooleanControlDescription
            {
                [default] interface Windows.Devices.HumanInterfaceDevice.IHidBooleanControlDescription;
                [contract(Windows.Foundation.UniversalApiContract, 3.0)] interface Windows.Devices.HumanInterfaceDevice.IHidBooleanControlDescription2;
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [marshaling_behavior(agile)]
            runtimeclass HidCollection
            {
                [default] interface Windows.Devices.HumanInterfaceDevice.IHidCollection;
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [marshaling_behavior(agile)]
            [static(Windows.Devices.HumanInterfaceDevice.IHidDeviceStatics, Windows.Foundation.UniversalApiContract, 1.0)]
            runtimeclass HidDevice
            {
                [default] interface Windows.Devices.HumanInterfaceDevice.IHidDevice;
                interface Windows.Foundation.IClosable;
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [marshaling_behavior(agile)]
            runtimeclass HidFeatureReport
            {
                [default] interface Windows.Devices.HumanInterfaceDevice.IHidFeatureReport;
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [marshaling_behavior(agile)]
            runtimeclass HidInputReport
            {
                [default] interface Windows.Devices.HumanInterfaceDevice.IHidInputReport;
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [marshaling_behavior(agile)]
            runtimeclass HidInputReportReceivedEventArgs
            {
                [default] interface Windows.Devices.HumanInterfaceDevice.IHidInputReportReceivedEventArgs;
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [marshaling_behavior(agile)]
            runtimeclass HidNumericControl
            {
                [default] interface Windows.Devices.HumanInterfaceDevice.IHidNumericControl;
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [marshaling_behavior(agile)]
            runtimeclass HidNumericControlDescription
            {
                [default] interface Windows.Devices.HumanInterfaceDevice.IHidNumericControlDescription;
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [marshaling_behavior(agile)]
            runtimeclass HidOutputReport
            {
                [default] interface Windows.Devices.HumanInterfaceDevice.IHidOutputReport;
            }
        }
    }
}
