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

import "inspectable.idl";
import "AsyncInfo.idl";
import "EventToken.idl";
import "Windows.Foundation.idl";
import "Windows.Storage.Streams.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(__windows2Estorage2Estreams_h__)")
cpp_quote("#include <Windows.Storage.Streams.h>")
cpp_quote("#endif // !defined(__windows2Estorage2Estreams_h__)")
cpp_quote("#if defined(__cplusplus)")
cpp_quote("extern \"C\" {")
cpp_quote("#endif // defined(__cplusplus)")

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

        interface IClosable;

        typedef struct TimeSpan TimeSpan;
    }
}
namespace Windows
{
    namespace Storage
    {
        namespace Streams
        {
            interface IBuffer;

            interface IInputStream;

            interface IOutputStream;
        }
    }
}
namespace Windows
{
    namespace Devices
    {
        namespace Usb
        {
            typedef enum UsbTransferDirection UsbTransferDirection;

            typedef enum UsbEndpointType UsbEndpointType;

            typedef enum UsbControlRecipient UsbControlRecipient;

            typedef enum UsbControlTransferType UsbControlTransferType;

            typedef enum UsbReadOptions UsbReadOptions;

            typedef enum UsbWriteOptions UsbWriteOptions;

            interface IUsbControlRequestType;

            interface IUsbSetupPacketFactory;

            interface IUsbSetupPacket;

            interface IUsbDeviceClass;

            interface IUsbDeviceClassesStatics;

            interface IUsbDeviceClasses;

            interface IUsbDeviceStatics;

            interface IUsbDeviceDescriptor;

            interface IUsbConfigurationDescriptor;

            interface IUsbConfigurationDescriptorStatics;

            interface IUsbInterfaceDescriptor;

            interface IUsbInterfaceDescriptorStatics;

            interface IUsbEndpointDescriptor;

            interface IUsbEndpointDescriptorStatics;

            interface IUsbDescriptor;

            interface IUsbInterruptInEventArgs;

            interface IUsbBulkInPipe;

            interface IUsbInterruptInPipe;

            interface IUsbBulkOutPipe;

            interface IUsbInterruptOutPipe;

            interface IUsbConfiguration;

            interface IUsbInterface;

            interface IUsbInterfaceSetting;

            interface IUsbBulkInEndpointDescriptor;

            interface IUsbInterruptInEndpointDescriptor;

            interface IUsbBulkOutEndpointDescriptor;

            interface IUsbInterruptOutEndpointDescriptor;

            interface IUsbDevice;

            runtimeclass UsbControlRequestType;

            runtimeclass UsbSetupPacket;

            runtimeclass UsbDeviceClass;

            runtimeclass UsbDeviceClasses;

            runtimeclass UsbDevice;

            runtimeclass UsbInterface;

            runtimeclass UsbDeviceDescriptor;

            runtimeclass UsbConfiguration;

            runtimeclass UsbDescriptor;

            runtimeclass UsbConfigurationDescriptor;

            runtimeclass UsbInterfaceDescriptor;

            runtimeclass UsbBulkInEndpointDescriptor;

            runtimeclass UsbInterruptInEndpointDescriptor;

            runtimeclass UsbBulkOutEndpointDescriptor;

            runtimeclass UsbInterruptOutEndpointDescriptor;

            runtimeclass UsbEndpointDescriptor;

            runtimeclass UsbInterruptInEventArgs;

            runtimeclass UsbInterruptInPipe;

            runtimeclass UsbBulkInPipe;

            runtimeclass UsbBulkOutPipe;

            runtimeclass UsbInterruptOutPipe;

            runtimeclass UsbInterfaceSetting;
        }
    }
}

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

                interface Windows.Foundation.Collections.IIterable<Windows.Devices.Usb.UsbBulkInPipe*>;

                interface Windows.Foundation.Collections.IIterable<Windows.Devices.Usb.UsbBulkOutEndpointDescriptor*>;

                interface Windows.Foundation.Collections.IIterable<Windows.Devices.Usb.UsbBulkOutPipe*>;

                interface Windows.Foundation.Collections.IIterable<Windows.Devices.Usb.UsbDescriptor*>;

                interface Windows.Foundation.Collections.IIterable<Windows.Devices.Usb.UsbInterface*>;

                interface Windows.Foundation.Collections.IIterable<Windows.Devices.Usb.UsbInterfaceSetting*>;

                interface Windows.Foundation.Collections.IIterable<Windows.Devices.Usb.UsbInterruptInEndpointDescriptor*>;

                interface Windows.Foundation.Collections.IIterable<Windows.Devices.Usb.UsbInterruptInPipe*>;

                interface Windows.Foundation.Collections.IIterable<Windows.Devices.Usb.UsbInterruptOutEndpointDescriptor*>;

                interface Windows.Foundation.Collections.IIterable<Windows.Devices.Usb.UsbInterruptOutPipe*>;

                interface Windows.Foundation.Collections.IIterator<Windows.Devices.Usb.UsbBulkInEndpointDescriptor*>;

                interface Windows.Foundation.Collections.IIterator<Windows.Devices.Usb.UsbBulkInPipe*>;

                interface Windows.Foundation.Collections.IIterator<Windows.Devices.Usb.UsbBulkOutEndpointDescriptor*>;

                interface Windows.Foundation.Collections.IIterator<Windows.Devices.Usb.UsbBulkOutPipe*>;

                interface Windows.Foundation.Collections.IIterator<Windows.Devices.Usb.UsbDescriptor*>;

                interface Windows.Foundation.Collections.IIterator<Windows.Devices.Usb.UsbInterface*>;

                interface Windows.Foundation.Collections.IIterator<Windows.Devices.Usb.UsbInterfaceSetting*>;

                interface Windows.Foundation.Collections.IIterator<Windows.Devices.Usb.UsbInterruptInEndpointDescriptor*>;

                interface Windows.Foundation.Collections.IIterator<Windows.Devices.Usb.UsbInterruptInPipe*>;

                interface Windows.Foundation.Collections.IIterator<Windows.Devices.Usb.UsbInterruptOutEndpointDescriptor*>;

                interface Windows.Foundation.Collections.IIterator<Windows.Devices.Usb.UsbInterruptOutPipe*>;

                interface Windows.Foundation.Collections.IVectorView<Windows.Devices.Usb.UsbBulkInEndpointDescriptor*>;

                interface Windows.Foundation.Collections.IVectorView<Windows.Devices.Usb.UsbBulkInPipe*>;

                interface Windows.Foundation.Collections.IVectorView<Windows.Devices.Usb.UsbBulkOutEndpointDescriptor*>;

                interface Windows.Foundation.Collections.IVectorView<Windows.Devices.Usb.UsbBulkOutPipe*>;

                interface Windows.Foundation.Collections.IVectorView<Windows.Devices.Usb.UsbDescriptor*>;

                interface Windows.Foundation.Collections.IVectorView<Windows.Devices.Usb.UsbInterface*>;

                interface Windows.Foundation.Collections.IVectorView<Windows.Devices.Usb.UsbInterfaceSetting*>;

                interface Windows.Foundation.Collections.IVectorView<Windows.Devices.Usb.UsbInterruptInEndpointDescriptor*>;

                interface Windows.Foundation.Collections.IVectorView<Windows.Devices.Usb.UsbInterruptInPipe*>;

                interface Windows.Foundation.Collections.IVectorView<Windows.Devices.Usb.UsbInterruptOutEndpointDescriptor*>;

                interface Windows.Foundation.Collections.IVectorView<Windows.Devices.Usb.UsbInterruptOutPipe*>;

                interface Windows.Foundation.IAsyncOperation<Windows.Devices.Usb.UsbDevice*>;

                interface Windows.Foundation.TypedEventHandler<Windows.Devices.Usb.UsbInterruptInPipe*, Windows.Devices.Usb.UsbInterruptInEventArgs*>;
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace Devices
    {
        namespace Usb
        {
            [version(0x0A000000)]
            enum UsbTransferDirection
            {
                Out = 0,
                In  = 1
            };

            [version(0x0A000000)]
            enum UsbEndpointType
            {
                Control     = 0,
                Isochronous = 1,
                Bulk        = 2,
                Interrupt   = 3
            };

            [version(0x0A000000)]
            enum UsbControlRecipient
            {
                Device             = 0,
                SpecifiedInterface = 1,
                Endpoint           = 2,
                Other              = 3,
                DefaultInterface   = 4
            };

            [version(0x0A000000)]
            enum UsbControlTransferType
            {
                Standard = 0,
                Class    = 1,
                Vendor   = 2
            };

            [flags]
            [version(0x0A000000)]
            enum UsbReadOptions
            {
                None                              = 0x0,
                AutoClearStall                    = 0x1,
                OverrideAutomaticBufferManagement = 0x2,
                IgnoreShortPacket                 = 0x4,
                AllowPartialReads                 = 0x8
            };

            [flags]
            [version(0x0A000000)]
            enum UsbWriteOptions
            {
                None                 = 0x0,
                AutoClearStall       = 0x1,
                ShortPacketTerminate = 0x2
            };

            [exclusiveto(Windows.Devices.Usb.UsbControlRequestType)]
            [uuid(8E9465A6-D73D-46DE-94BE-AAE7F07C0F5C)]
            [version(0x0A000000)]
            interface IUsbControlRequestType : IInspectable
            {
                [propget] HRESULT Direction([out] [retval] Windows.Devices.Usb.UsbTransferDirection* value);
                [propput] HRESULT Direction([in] Windows.Devices.Usb.UsbTransferDirection value);
                [propget] HRESULT ControlTransferType([out] [retval] Windows.Devices.Usb.UsbControlTransferType* value);
                [propput] HRESULT ControlTransferType([in] Windows.Devices.Usb.UsbControlTransferType value);
                [propget] HRESULT Recipient([out] [retval] Windows.Devices.Usb.UsbControlRecipient* value);
                [propput] HRESULT Recipient([in] Windows.Devices.Usb.UsbControlRecipient value);
                [propget] HRESULT AsByte([out] [retval] BYTE* value);
                [propput] HRESULT AsByte([in] BYTE value);
            }

            [exclusiveto(Windows.Devices.Usb.UsbSetupPacket)]
            [uuid(C9257D50-1B2E-4A41-A2A7-338F0CEF3C14)]
            [version(0x0A000000)]
            interface IUsbSetupPacketFactory : IInspectable
            {
                HRESULT CreateWithEightByteBuffer([in] Windows.Storage.Streams.IBuffer* eightByteBuffer, [out] [retval] Windows.Devices.Usb.UsbSetupPacket** value);
            }

            [exclusiveto(Windows.Devices.Usb.UsbSetupPacket)]
            [uuid(104BA132-C78F-4C51-B654-E49D02F2CB03)]
            [version(0x0A000000)]
            interface IUsbSetupPacket : IInspectable
            {
                [propget] HRESULT RequestType([out] [retval] Windows.Devices.Usb.UsbControlRequestType** value);
                [propput] HRESULT RequestType([in] Windows.Devices.Usb.UsbControlRequestType* value);
                [propget] HRESULT Request([out] [retval] BYTE* value);
                [propput] HRESULT Request([in] BYTE value);
                [propget] HRESULT Value([out] [retval] UINT32* value);
                [propput] HRESULT Value([in] UINT32 value);
                [propget] HRESULT Index([out] [retval] UINT32* value);
                [propput] HRESULT Index([in] UINT32 value);
                [propget] HRESULT Length([out] [retval] UINT32* value);
                [propput] HRESULT Length([in] UINT32 value);
            }

            [exclusiveto(Windows.Devices.Usb.UsbDeviceClass)]
            [uuid(051942F9-845E-47EB-B12A-38F2F617AFE7)]
            [version(0x0A000000)]
            interface IUsbDeviceClass : IInspectable
            {
                [propget] HRESULT ClassCode([out] [retval] BYTE* value);
                [propput] HRESULT ClassCode([in] BYTE value);
                [propget] HRESULT SubclassCode([out] [retval] Windows.Foundation.IReference<BYTE>** value);
                [propput] HRESULT SubclassCode([in] Windows.Foundation.IReference<BYTE>* value);
                [propget] HRESULT ProtocolCode([out] [retval] Windows.Foundation.IReference<BYTE>** value);
                [propput] HRESULT ProtocolCode([in] Windows.Foundation.IReference<BYTE>* value);
            }

            [exclusiveto(Windows.Devices.Usb.UsbDeviceClasses)]
            [uuid(B20B0527-C580-4599-A165-981B4FD03230)]
            [version(0x0A000000)]
            interface IUsbDeviceClassesStatics : IInspectable
            {
                [propget] HRESULT CdcControl([out] [retval] Windows.Devices.Usb.UsbDeviceClass** value);
                [propget] HRESULT Physical([out] [retval] Windows.Devices.Usb.UsbDeviceClass** value);
                [propget] HRESULT PersonalHealthcare([out] [retval] Windows.Devices.Usb.UsbDeviceClass** value);
                [propget] HRESULT ActiveSync([out] [retval] Windows.Devices.Usb.UsbDeviceClass** value);
                [propget] HRESULT PalmSync([out] [retval] Windows.Devices.Usb.UsbDeviceClass** value);
                [propget] HRESULT DeviceFirmwareUpdate([out] [retval] Windows.Devices.Usb.UsbDeviceClass** value);
                [propget] HRESULT Irda([out] [retval] Windows.Devices.Usb.UsbDeviceClass** value);
                [propget] HRESULT Measurement([out] [retval] Windows.Devices.Usb.UsbDeviceClass** value);
                [propget] HRESULT VendorSpecific([out] [retval] Windows.Devices.Usb.UsbDeviceClass** value);
            }

            [exclusiveto(Windows.Devices.Usb.UsbDeviceClasses)]
            [uuid(686F955D-9B92-4B30-9781-C22C55AC35CB)]
            [version(0x0A000000)]
            interface IUsbDeviceClasses : IInspectable
            {
            }

            [exclusiveto(Windows.Devices.Usb.UsbDevice)]
            [uuid(066B85A2-09B7-4446-8502-6FE6DCAA7309)]
            [version(0x0A000000)]
            interface IUsbDeviceStatics : IInspectable
            {
                [overload("GetDeviceSelector")] HRESULT GetDeviceSelector([in] UINT32 vendorId, [in] UINT32 productId, [in] GUID winUsbInterfaceClass, [out] [retval] HSTRING* value);
                [overload("GetDeviceSelector")] HRESULT GetDeviceSelectorGuidOnly([in] GUID winUsbInterfaceClass, [out] [retval] HSTRING* value);
                [overload("GetDeviceSelector")] HRESULT GetDeviceSelectorVidPidOnly([in] UINT32 vendorId, [in] UINT32 productId, [out] [retval] HSTRING* value);
                HRESULT GetDeviceClassSelector([in] Windows.Devices.Usb.UsbDeviceClass* usbClass, [out] [retval] HSTRING* value);
                HRESULT FromIdAsync([in] HSTRING deviceId, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Devices.Usb.UsbDevice*>** operation);
            }

            [exclusiveto(Windows.Devices.Usb.UsbDeviceDescriptor)]
            [uuid(1F48D1F6-BA97-4322-B92C-B5B189216588)]
            [version(0x0A000000)]
            interface IUsbDeviceDescriptor : IInspectable
            {
                [propget] HRESULT BcdUsb([out] [retval] UINT32* value);
                [propget] HRESULT MaxPacketSize0([out] [retval] BYTE* value);
                [propget] HRESULT VendorId([out] [retval] UINT32* value);
                [propget] HRESULT ProductId([out] [retval] UINT32* value);
                [propget] HRESULT BcdDeviceRevision([out] [retval] UINT32* value);
                [propget] HRESULT NumberOfConfigurations([out] [retval] BYTE* value);
            }

            [exclusiveto(Windows.Devices.Usb.UsbConfigurationDescriptor)]
            [uuid(F2176D92-B442-407A-8207-7D646C0385F3)]
            [version(0x0A000000)]
            interface IUsbConfigurationDescriptor : IInspectable
            {
                [propget] HRESULT ConfigurationValue([out] [retval] BYTE* value);
                [propget] HRESULT MaxPowerMilliamps([out] [retval] UINT32* value);
                [propget] HRESULT SelfPowered([out] [retval] boolean* value);
                [propget] HRESULT RemoteWakeup([out] [retval] boolean* value);
            }

            [exclusiveto(Windows.Devices.Usb.UsbConfigurationDescriptor)]
            [uuid(424CED93-E740-40A1-92BD-DA120EA04914)]
            [version(0x0A000000)]
            interface IUsbConfigurationDescriptorStatics : IInspectable
            {
                HRESULT TryParse([in] Windows.Devices.Usb.UsbDescriptor* descriptor, [out] Windows.Devices.Usb.UsbConfigurationDescriptor** parsed, [out] [retval] boolean* success);
                HRESULT Parse([in] Windows.Devices.Usb.UsbDescriptor* descriptor, [out] [retval] Windows.Devices.Usb.UsbConfigurationDescriptor** parsed);
            }

            [exclusiveto(Windows.Devices.Usb.UsbInterfaceDescriptor)]
            [uuid(199670C7-B7EE-4F90-8CD5-94A2E257598A)]
            [version(0x0A000000)]
            interface IUsbInterfaceDescriptor : IInspectable
            {
                [propget] HRESULT ClassCode([out] [retval] BYTE* value);
                [propget] HRESULT SubclassCode([out] [retval] BYTE* value);
                [propget] HRESULT ProtocolCode([out] [retval] BYTE* value);
                [propget] HRESULT AlternateSettingNumber([out] [retval] BYTE* value);
                [propget] HRESULT InterfaceNumber([out] [retval] BYTE* value);
            }

            [exclusiveto(Windows.Devices.Usb.UsbInterfaceDescriptor)]
            [uuid(E34A9FF5-77D6-48B6-B0BE-16C6422316FE)]
            [version(0x0A000000)]
            interface IUsbInterfaceDescriptorStatics : IInspectable
            {
                HRESULT TryParse([in] Windows.Devices.Usb.UsbDescriptor* descriptor, [out] Windows.Devices.Usb.UsbInterfaceDescriptor** parsed, [out] [retval] boolean* success);
                HRESULT Parse([in] Windows.Devices.Usb.UsbDescriptor* descriptor, [out] [retval] Windows.Devices.Usb.UsbInterfaceDescriptor** parsed);
            }

            [exclusiveto(Windows.Devices.Usb.UsbEndpointDescriptor)]
            [uuid(6B4862D9-8DF7-4B40-AC83-578F139F0575)]
            [version(0x0A000000)]
            interface IUsbEndpointDescriptor : IInspectable
            {
                [propget] HRESULT EndpointNumber([out] [retval] BYTE* value);
                [propget] HRESULT Direction([out] [retval] Windows.Devices.Usb.UsbTransferDirection* value);
                [propget] HRESULT EndpointType([out] [retval] Windows.Devices.Usb.UsbEndpointType* value);
                [propget] HRESULT AsBulkInEndpointDescriptor([out] [retval] Windows.Devices.Usb.UsbBulkInEndpointDescriptor** value);
                [propget] HRESULT AsInterruptInEndpointDescriptor([out] [retval] Windows.Devices.Usb.UsbInterruptInEndpointDescriptor** value);
                [propget] HRESULT AsBulkOutEndpointDescriptor([out] [retval] Windows.Devices.Usb.UsbBulkOutEndpointDescriptor** value);
                [propget] HRESULT AsInterruptOutEndpointDescriptor([out] [retval] Windows.Devices.Usb.UsbInterruptOutEndpointDescriptor** value);
            }

            [exclusiveto(Windows.Devices.Usb.UsbEndpointDescriptor)]
            [uuid(C890B201-9A6A-495E-A82C-295B9E708106)]
            [version(0x0A000000)]
            interface IUsbEndpointDescriptorStatics : IInspectable
            {
                HRESULT TryParse([in] Windows.Devices.Usb.UsbDescriptor* descriptor, [out] Windows.Devices.Usb.UsbEndpointDescriptor** parsed, [out] [retval] boolean* success);
                HRESULT Parse([in] Windows.Devices.Usb.UsbDescriptor* descriptor, [out] [retval] Windows.Devices.Usb.UsbEndpointDescriptor** parsed);
            }

            [exclusiveto(Windows.Devices.Usb.UsbDescriptor)]
            [uuid(0A89F216-5F9D-4874-8904-DA9AD3F5528F)]
            [version(0x0A000000)]
            interface IUsbDescriptor : IInspectable
            {
                [propget] HRESULT Length([out] [retval] BYTE* value);
                [propget] HRESULT DescriptorType([out] [retval] BYTE* value);
                HRESULT ReadDescriptorBuffer([in] Windows.Storage.Streams.IBuffer* buffer);
            }

            [exclusiveto(Windows.Devices.Usb.UsbInterruptInEventArgs)]
            [uuid(B7B04092-1418-4936-8209-299CF5605583)]
            [version(0x0A000000)]
            interface IUsbInterruptInEventArgs : IInspectable
            {
                [propget] HRESULT InterruptData([out] [retval] Windows.Storage.Streams.IBuffer** value);
            }

            [exclusiveto(Windows.Devices.Usb.UsbBulkInPipe)]
            [uuid(F01D2D3B-4548-4D50-B326-D82CDABE1220)]
            [version(0x0A000000)]
            interface IUsbBulkInPipe : IInspectable
            {
                [propget] HRESULT MaxTransferSizeBytes([out] [retval] UINT32* value);
                [propget] HRESULT EndpointDescriptor([out] [retval] Windows.Devices.Usb.UsbBulkInEndpointDescriptor** value);
                HRESULT ClearStallAsync([out] [retval] Windows.Foundation.IAsyncAction** operation);
                [propput] HRESULT ReadOptions([in] Windows.Devices.Usb.UsbReadOptions value);
                [propget] HRESULT ReadOptions([out] [retval] Windows.Devices.Usb.UsbReadOptions* value);
                HRESULT FlushBuffer();
                [propget] HRESULT InputStream([out] [retval] Windows.Storage.Streams.IInputStream** value);
            }

            [exclusiveto(Windows.Devices.Usb.UsbInterruptInPipe)]
            [uuid(FA007116-84D7-48C7-8A3F-4C0B235F2EA6)]
            [version(0x0A000000)]
            interface IUsbInterruptInPipe : IInspectable
            {
                [propget] HRESULT EndpointDescriptor([out] [retval] Windows.Devices.Usb.UsbInterruptInEndpointDescriptor** value);
                HRESULT ClearStallAsync([out] [retval] Windows.Foundation.IAsyncAction** operation);
                [eventadd] HRESULT DataReceived([in] Windows.Foundation.TypedEventHandler<Windows.Devices.Usb.UsbInterruptInPipe*, Windows.Devices.Usb.UsbInterruptInEventArgs*>* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT DataReceived([in] EventRegistrationToken token);
            }

            [exclusiveto(Windows.Devices.Usb.UsbBulkOutPipe)]
            [uuid(A8E9EE6E-0115-45AA-8B21-37B225BCCEE7)]
            [version(0x0A000000)]
            interface IUsbBulkOutPipe : IInspectable
            {
                [propget] HRESULT EndpointDescriptor([out] [retval] Windows.Devices.Usb.UsbBulkOutEndpointDescriptor** value);
                HRESULT ClearStallAsync([out] [retval] Windows.Foundation.IAsyncAction** operation);
                [propput] HRESULT WriteOptions([in] Windows.Devices.Usb.UsbWriteOptions value);
                [propget] HRESULT WriteOptions([out] [retval] Windows.Devices.Usb.UsbWriteOptions* value);
                [propget] HRESULT OutputStream([out] [retval] Windows.Storage.Streams.IOutputStream** value);
            }

            [exclusiveto(Windows.Devices.Usb.UsbInterruptOutPipe)]
            [uuid(E984C8A9-AAF9-49D0-B96C-F661AB4A7F95)]
            [version(0x0A000000)]
            interface IUsbInterruptOutPipe : IInspectable
            {
                [propget] HRESULT EndpointDescriptor([out] [retval] Windows.Devices.Usb.UsbInterruptOutEndpointDescriptor** value);
                HRESULT ClearStallAsync([out] [retval] Windows.Foundation.IAsyncAction** operation);
                [propput] HRESULT WriteOptions([in] Windows.Devices.Usb.UsbWriteOptions value);
                [propget] HRESULT WriteOptions([out] [retval] Windows.Devices.Usb.UsbWriteOptions* value);
                [propget] HRESULT OutputStream([out] [retval] Windows.Storage.Streams.IOutputStream** value);
            }

            [exclusiveto(Windows.Devices.Usb.UsbConfiguration)]
            [uuid(68177429-36A9-46D7-B873-FC689251EC30)]
            [version(0x0A000000)]
            interface IUsbConfiguration : IInspectable
            {
                [propget] HRESULT UsbInterfaces([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Devices.Usb.UsbInterface*>** value);
                [propget] HRESULT ConfigurationDescriptor([out] [retval] Windows.Devices.Usb.UsbConfigurationDescriptor** value);
                [propget] HRESULT Descriptors([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Devices.Usb.UsbDescriptor*>** value);
            }

            [exclusiveto(Windows.Devices.Usb.UsbInterface)]
            [uuid(A0322B95-7F47-48AB-A727-678C25BE2112)]
            [version(0x0A000000)]
            interface IUsbInterface : IInspectable
            {
                [propget] HRESULT BulkInPipes([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Devices.Usb.UsbBulkInPipe*>** value);
                [propget] HRESULT InterruptInPipes([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Devices.Usb.UsbInterruptInPipe*>** value);
                [propget] HRESULT BulkOutPipes([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Devices.Usb.UsbBulkOutPipe*>** value);
                [propget] HRESULT InterruptOutPipes([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Devices.Usb.UsbInterruptOutPipe*>** value);
                [propget] HRESULT InterfaceSettings([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Devices.Usb.UsbInterfaceSetting*>** value);
                [propget] HRESULT InterfaceNumber([out] [retval] BYTE* value);
                [propget] HRESULT Descriptors([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Devices.Usb.UsbDescriptor*>** value);
            }

            [exclusiveto(Windows.Devices.Usb.UsbInterfaceSetting)]
            [uuid(1827BBA7-8DA7-4AF7-8F4C-7F3032E781F5)]
            [version(0x0A000000)]
            interface IUsbInterfaceSetting : IInspectable
            {
                [propget] HRESULT BulkInEndpoints([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Devices.Usb.UsbBulkInEndpointDescriptor*>** value);
                [propget] HRESULT InterruptInEndpoints([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Devices.Usb.UsbInterruptInEndpointDescriptor*>** value);
                [propget] HRESULT BulkOutEndpoints([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Devices.Usb.UsbBulkOutEndpointDescriptor*>** value);
                [propget] HRESULT InterruptOutEndpoints([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Devices.Usb.UsbInterruptOutEndpointDescriptor*>** value);
                [propget] HRESULT Selected([out] [retval] boolean* value);
                HRESULT SelectSettingAsync([out] [retval] Windows.Foundation.IAsyncAction** operation);
                [propget] HRESULT InterfaceDescriptor([out] [retval] Windows.Devices.Usb.UsbInterfaceDescriptor** value);
                [propget] HRESULT Descriptors([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Devices.Usb.UsbDescriptor*>** value);
            }

            [exclusiveto(Windows.Devices.Usb.UsbBulkInEndpointDescriptor)]
            [uuid(3C6E4846-06CF-42A9-9DC2-971C1B14B6E3)]
            [version(0x0A000000)]
            interface IUsbBulkInEndpointDescriptor : IInspectable
            {
                [propget] HRESULT MaxPacketSize([out] [retval] UINT32* value);
                [propget] HRESULT EndpointNumber([out] [retval] BYTE* value);
                [propget] HRESULT Pipe([out] [retval] Windows.Devices.Usb.UsbBulkInPipe** value);
            }

            [exclusiveto(Windows.Devices.Usb.UsbInterruptInEndpointDescriptor)]
            [uuid(C0528967-C911-4C3A-86B2-419C2DA89039)]
            [version(0x0A000000)]
            interface IUsbInterruptInEndpointDescriptor : IInspectable
            {
                [propget] HRESULT MaxPacketSize([out] [retval] UINT32* value);
                [propget] HRESULT EndpointNumber([out] [retval] BYTE* value);
                [propget] HRESULT Interval([out] [retval] Windows.Foundation.TimeSpan* value);
                [propget] HRESULT Pipe([out] [retval] Windows.Devices.Usb.UsbInterruptInPipe** value);
            }

            [exclusiveto(Windows.Devices.Usb.UsbBulkOutEndpointDescriptor)]
            [uuid(2820847A-FFEE-4F60-9BE1-956CAC3ECB65)]
            [version(0x0A000000)]
            interface IUsbBulkOutEndpointDescriptor : IInspectable
            {
                [propget] HRESULT MaxPacketSize([out] [retval] UINT32* value);
                [propget] HRESULT EndpointNumber([out] [retval] BYTE* value);
                [propget] HRESULT Pipe([out] [retval] Windows.Devices.Usb.UsbBulkOutPipe** value);
            }

            [exclusiveto(Windows.Devices.Usb.UsbInterruptOutEndpointDescriptor)]
            [uuid(CC9FED81-10CA-4533-952D-9E278341E80F)]
            [version(0x0A000000)]
            interface IUsbInterruptOutEndpointDescriptor : IInspectable
            {
                [propget] HRESULT MaxPacketSize([out] [retval] UINT32* value);
                [propget] HRESULT EndpointNumber([out] [retval] BYTE* value);
                [propget] HRESULT Interval([out] [retval] Windows.Foundation.TimeSpan* value);
                [propget] HRESULT Pipe([out] [retval] Windows.Devices.Usb.UsbInterruptOutPipe** value);
            }

            [exclusiveto(Windows.Devices.Usb.UsbDevice)]
            [uuid(5249B992-C456-44D5-AD5E-24F5A089F63B)]
            [version(0x0A000000)]
            interface IUsbDevice : IInspectable
                requires
                    Windows.Foundation.IClosable
            {
                [overload("SendControlOutTransferAsync")] HRESULT SendControlOutTransferAsync([in] Windows.Devices.Usb.UsbSetupPacket* setupPacket, [in] Windows.Storage.Streams.IBuffer* buffer, [out] [retval] Windows.Foundation.IAsyncOperation<UINT32>** operation);
                [overload("SendControlOutTransferAsync")] HRESULT SendControlOutTransferAsyncNoBuffer([in] Windows.Devices.Usb.UsbSetupPacket* setupPacket, [out] [retval] Windows.Foundation.IAsyncOperation<UINT32>** operation);
                [overload("SendControlInTransferAsync")] HRESULT SendControlInTransferAsync([in] Windows.Devices.Usb.UsbSetupPacket* setupPacket, [in] Windows.Storage.Streams.IBuffer* buffer, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Storage.Streams.IBuffer*>** operation);
                [overload("SendControlInTransferAsync")] HRESULT SendControlInTransferAsyncNoBuffer([in] Windows.Devices.Usb.UsbSetupPacket* setupPacket, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Storage.Streams.IBuffer*>** operation);
                [propget] HRESULT DefaultInterface([out] [retval] Windows.Devices.Usb.UsbInterface** value);
                [propget] HRESULT DeviceDescriptor([out] [retval] Windows.Devices.Usb.UsbDeviceDescriptor** value);
                [propget] HRESULT Configuration([out] [retval] Windows.Devices.Usb.UsbConfiguration** value);
            }

            [activatable(0x0A000000)]
            [marshaling_behavior(agile)]
            [version(0x0A000000)]
            runtimeclass UsbControlRequestType
            {
                [default] interface Windows.Devices.Usb.IUsbControlRequestType;
            }

            [activatable(0x0A000000)]
            [activatable(Windows.Devices.Usb.IUsbSetupPacketFactory, 0x0A000000)]
            [marshaling_behavior(agile)]
            [version(0x0A000000)]
            runtimeclass UsbSetupPacket
            {
                [default] interface Windows.Devices.Usb.IUsbSetupPacket;
            }

            [activatable(0x0A000000)]
            [marshaling_behavior(agile)]
            [version(0x0A000000)]
            runtimeclass UsbDeviceClass
            {
                [default] interface Windows.Devices.Usb.IUsbDeviceClass;
            }

            [marshaling_behavior(agile)]
            [static(Windows.Devices.Usb.IUsbDeviceClassesStatics, 0x0A000000)]
            [version(0x0A000000)]
            runtimeclass UsbDeviceClasses
            {
                [default] interface Windows.Devices.Usb.IUsbDeviceClasses;
            }

            [marshaling_behavior(agile)]
            [static(Windows.Devices.Usb.IUsbDeviceStatics, 0x0A000000)]
            [version(0x0A000000)]
            runtimeclass UsbDevice
            {
                [default] interface Windows.Devices.Usb.IUsbDevice;
                interface Windows.Foundation.IClosable;
            }

            [marshaling_behavior(agile)]
            [version(0x0A000000)]
            runtimeclass UsbInterface
            {
                [default] interface Windows.Devices.Usb.IUsbInterface;
            }

            [marshaling_behavior(agile)]
            [version(0x0A000000)]
            runtimeclass UsbDeviceDescriptor
            {
                [default] interface Windows.Devices.Usb.IUsbDeviceDescriptor;
            }

            [marshaling_behavior(agile)]
            [version(0x0A000000)]
            runtimeclass UsbConfiguration
            {
                [default] interface Windows.Devices.Usb.IUsbConfiguration;
            }

            [marshaling_behavior(agile)]
            [version(0x0A000000)]
            runtimeclass UsbDescriptor
            {
                [default] interface Windows.Devices.Usb.IUsbDescriptor;
            }

            [marshaling_behavior(agile)]
            [static(Windows.Devices.Usb.IUsbConfigurationDescriptorStatics, 0x0A000000)]
            [version(0x0A000000)]
            runtimeclass UsbConfigurationDescriptor
            {
                [default] interface Windows.Devices.Usb.IUsbConfigurationDescriptor;
            }

            [marshaling_behavior(agile)]
            [static(Windows.Devices.Usb.IUsbInterfaceDescriptorStatics, 0x0A000000)]
            [version(0x0A000000)]
            runtimeclass UsbInterfaceDescriptor
            {
                [default] interface Windows.Devices.Usb.IUsbInterfaceDescriptor;
            }

            [marshaling_behavior(agile)]
            [version(0x0A000000)]
            runtimeclass UsbBulkInEndpointDescriptor
            {
                [default] interface Windows.Devices.Usb.IUsbBulkInEndpointDescriptor;
            }

            [marshaling_behavior(agile)]
            [version(0x0A000000)]
            runtimeclass UsbInterruptInEndpointDescriptor
            {
                [default] interface Windows.Devices.Usb.IUsbInterruptInEndpointDescriptor;
            }

            [marshaling_behavior(agile)]
            [version(0x0A000000)]
            runtimeclass UsbBulkOutEndpointDescriptor
            {
                [default] interface Windows.Devices.Usb.IUsbBulkOutEndpointDescriptor;
            }

            [marshaling_behavior(agile)]
            [version(0x0A000000)]
            runtimeclass UsbInterruptOutEndpointDescriptor
            {
                [default] interface Windows.Devices.Usb.IUsbInterruptOutEndpointDescriptor;
            }

            [marshaling_behavior(agile)]
            [static(Windows.Devices.Usb.IUsbEndpointDescriptorStatics, 0x0A000000)]
            [version(0x0A000000)]
            runtimeclass UsbEndpointDescriptor
            {
                [default] interface Windows.Devices.Usb.IUsbEndpointDescriptor;
            }

            [marshaling_behavior(agile)]
            [version(0x0A000000)]
            runtimeclass UsbInterruptInEventArgs
            {
                [default] interface Windows.Devices.Usb.IUsbInterruptInEventArgs;
            }

            [marshaling_behavior(agile)]
            [version(0x0A000000)]
            runtimeclass UsbInterruptInPipe
            {
                [default] interface Windows.Devices.Usb.IUsbInterruptInPipe;
            }

            [marshaling_behavior(agile)]
            [version(0x0A000000)]
            runtimeclass UsbBulkInPipe
            {
                [default] interface Windows.Devices.Usb.IUsbBulkInPipe;
            }

            [marshaling_behavior(agile)]
            [version(0x0A000000)]
            runtimeclass UsbBulkOutPipe
            {
                [default] interface Windows.Devices.Usb.IUsbBulkOutPipe;
            }

            [marshaling_behavior(agile)]
            [version(0x0A000000)]
            runtimeclass UsbInterruptOutPipe
            {
                [default] interface Windows.Devices.Usb.IUsbInterruptOutPipe;
            }

            [marshaling_behavior(agile)]
            [version(0x0A000000)]
            runtimeclass UsbInterfaceSetting
            {
                [default] interface Windows.Devices.Usb.IUsbInterfaceSetting;
            }
        }
    }
}
