| /* | 
 |  * Copyright 2022 Rémi Bernon for CodeWeavers | 
 |  * | 
 |  * 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"; | 
 | import "windows.gaming.input.idl"; | 
 | import "windows.storage.streams.idl"; | 
 | #endif | 
 |  | 
 | namespace Windows.Gaming.Input.Custom { | 
 |     typedef enum XusbDeviceSubtype XusbDeviceSubtype; | 
 |     typedef enum XusbDeviceType XusbDeviceType; | 
 |     typedef struct GameControllerVersionInfo GameControllerVersionInfo; | 
 |     interface IGameControllerInputSink; | 
 |     interface IGameControllerProvider; | 
 |     interface IHidGameControllerInputSink; | 
 |     interface IHidGameControllerProvider; | 
 |     interface IXusbGameControllerInputSink; | 
 |     interface IXusbGameControllerProvider; | 
 |     interface ICustomGameControllerFactory; | 
 |     interface IGameControllerFactoryManagerStatics; | 
 |     interface IGameControllerFactoryManagerStatics2; | 
 |     runtimeclass GameControllerFactoryManager; | 
 |     runtimeclass HidGameControllerProvider; | 
 |     runtimeclass XusbGameControllerProvider; | 
 |  | 
 |     [contract(Windows.Foundation.UniversalApiContract, 3.0)] | 
 |     enum XusbDeviceSubtype | 
 |     { | 
 |         Unknown = 0, | 
 |         Gamepad = 1, | 
 |         ArcadePad = 2, | 
 |         ArcadeStick = 3, | 
 |         FlightStick = 4, | 
 |         Wheel = 5, | 
 |         Guitar = 6, | 
 |         GuitarAlternate = 7, | 
 |         GuitarBass = 8, | 
 |         DrumKit = 9, | 
 |         DancePad = 10, | 
 |     }; | 
 |  | 
 |     [contract(Windows.Foundation.UniversalApiContract, 3.0)] | 
 |     enum XusbDeviceType | 
 |     { | 
 |         Unknown = 0, | 
 |         Gamepad = 1, | 
 |     }; | 
 |  | 
 |     [contract(Windows.Foundation.UniversalApiContract, 3.0)] | 
 |     struct GameControllerVersionInfo | 
 |     { | 
 |         UINT16 Major; | 
 |         UINT16 Minor; | 
 |         UINT16 Build; | 
 |         UINT16 Revision; | 
 |     }; | 
 |  | 
 |     [ | 
 |         contract(Windows.Foundation.UniversalApiContract, 3.0), | 
 |         uuid(1ff6f922-c640-4c78-a820-9a715c558bcb) | 
 |     ] | 
 |     interface IGameControllerInputSink : IInspectable | 
 |     { | 
 |         HRESULT OnInputResumed([in] UINT64 timestamp); | 
 |         HRESULT OnInputSuspended([in] UINT64 timestamp); | 
 |     } | 
 |  | 
 |     [ | 
 |         contract(Windows.Foundation.UniversalApiContract, 3.0), | 
 |         uuid(e6d73982-2996-4559-b16c-3e57d46e58d6) | 
 |     ] | 
 |     interface IGameControllerProvider : IInspectable | 
 |     { | 
 |         [propget] HRESULT FirmwareVersionInfo([out, retval] Windows.Gaming.Input.Custom.GameControllerVersionInfo *value); | 
 |         [propget] HRESULT HardwareProductId([out, retval] UINT16 *value); | 
 |         [propget] HRESULT HardwareVendorId([out, retval] UINT16 *value); | 
 |         [propget] HRESULT HardwareVersionInfo([out, retval] Windows.Gaming.Input.Custom.GameControllerVersionInfo *value); | 
 |         [propget] HRESULT IsConnected([out, retval] boolean *value); | 
 |     } | 
 |  | 
 |     [ | 
 |         contract(Windows.Foundation.UniversalApiContract, 4.0), | 
 |         uuid(f754c322-182d-40e4-a126-fcee4ffa1e31) | 
 |     ] | 
 |     interface IHidGameControllerInputSink : IInspectable | 
 |         requires Windows.Gaming.Input.Custom.IGameControllerInputSink | 
 |     { | 
 |         HRESULT OnInputReportReceived([in] UINT64 timestamp, [in] BYTE id, [in] UINT32 report_len, | 
 |                                       [in, size_is(report_len)] BYTE *report_buf); | 
 |     } | 
 |  | 
 |     [ | 
 |         contract(Windows.Foundation.UniversalApiContract, 4.0), | 
 |         exclusiveto(Windows.Gaming.Input.Custom.HidGameControllerProvider), | 
 |         uuid(95ce3af4-abf0-4b68-a081-3b7de73ff0e7) | 
 |     ] | 
 |     interface IHidGameControllerProvider : IInspectable | 
 |         requires Windows.Gaming.Input.Custom.IGameControllerProvider | 
 |     { | 
 |         [propget] HRESULT UsageId([out, retval] UINT16 *value); | 
 |         [propget] HRESULT UsagePage([out, retval] UINT16 *value); | 
 |         HRESULT GetFeatureReport([in] BYTE id, [in] UINT32 report_len, | 
 |                                  [out, size_is(report_len)] BYTE *report_buf); | 
 |         HRESULT SendFeatureReport([in] BYTE id, [in] UINT32 report_len, | 
 |                                   [in, size_is(report_len)] BYTE *report_buf); | 
 |         HRESULT SendOutputReport([in] BYTE id, [in] UINT32 report_len, | 
 |                                  [in, size_is(report_len)] BYTE *report_buf); | 
 |     } | 
 |  | 
 |     [ | 
 |         contract(Windows.Foundation.UniversalApiContract, 3.0), | 
 |         uuid(b2ac1d95-6ecb-42b3-8aab-025401ca4712) | 
 |     ] | 
 |     interface IXusbGameControllerInputSink : IInspectable | 
 |         requires Windows.Gaming.Input.Custom.IGameControllerInputSink | 
 |     { | 
 |         HRESULT OnInputReceived([in] UINT64 timestamp, [in] BYTE id, [in] UINT32 report_len, | 
 |                                 [in, size_is(report_len)] BYTE *report_buf); | 
 |     } | 
 |  | 
 |     [ | 
 |         contract(Windows.Foundation.UniversalApiContract, 3.0), | 
 |         exclusiveto(Windows.Gaming.Input.Custom.XusbGameControllerProvider), | 
 |         uuid(6e2971eb-0efb-48b4-808b-837643b2f216) | 
 |     ] | 
 |     interface IXusbGameControllerProvider : IInspectable | 
 |         requires Windows.Gaming.Input.Custom.IGameControllerProvider | 
 |     { | 
 |         HRESULT SetVibration([in] DOUBLE rumble_intensity, [in] DOUBLE buzz_intensity); | 
 |     } | 
 |  | 
 |     [ | 
 |         contract(Windows.Foundation.UniversalApiContract, 3.0), | 
 |         uuid(69a0ae5e-758e-4cbe-ace6-62155fe9126f) | 
 |     ] | 
 |     interface ICustomGameControllerFactory : IInspectable | 
 |     { | 
 |         HRESULT CreateGameController([in] Windows.Gaming.Input.Custom.IGameControllerProvider *provider, | 
 |                                      [out, retval] IInspectable **value); | 
 |         HRESULT OnGameControllerAdded([in] Windows.Gaming.Input.IGameController *value); | 
 |         HRESULT OnGameControllerRemoved([in] Windows.Gaming.Input.IGameController *value); | 
 |     } | 
 |  | 
 |     [ | 
 |         contract(Windows.Foundation.UniversalApiContract, 3.0), | 
 |         exclusiveto(Windows.Gaming.Input.Custom.GameControllerFactoryManager), | 
 |         uuid(36cb66e3-d0a1-4986-a24c-40b137deba9e) | 
 |     ] | 
 |     interface IGameControllerFactoryManagerStatics : IInspectable | 
 |     { | 
 |         HRESULT RegisterCustomFactoryForGipInterface([in] Windows.Gaming.Input.Custom.ICustomGameControllerFactory *factory, | 
 |                                                      [in] GUID interfaceId); | 
 |         HRESULT RegisterCustomFactoryForHardwareId([in] Windows.Gaming.Input.Custom.ICustomGameControllerFactory *factory, | 
 |                                                    [in] UINT16 vendor_id, [in] UINT16 product_id); | 
 |         HRESULT RegisterCustomFactoryForXusbType([in] Windows.Gaming.Input.Custom.ICustomGameControllerFactory *factory, | 
 |                                                  [in] Windows.Gaming.Input.Custom.XusbDeviceType type, | 
 |                                                  [in] Windows.Gaming.Input.Custom.XusbDeviceSubtype subtype); | 
 |     } | 
 |  | 
 |     [ | 
 |         contract(Windows.Foundation.UniversalApiContract, 4.0), | 
 |         exclusiveto(Windows.Gaming.Input.Custom.GameControllerFactoryManager), | 
 |         uuid(eace5644-19df-4115-b32a-2793e2aea3bb) | 
 |     ] | 
 |     interface IGameControllerFactoryManagerStatics2 : IInspectable | 
 |         requires Windows.Gaming.Input.Custom.IGameControllerFactoryManagerStatics | 
 |     { | 
 |         HRESULT TryGetFactoryControllerFromGameController([in] Windows.Gaming.Input.Custom.ICustomGameControllerFactory *factory, | 
 |                                                           [in] Windows.Gaming.Input.IGameController *controller, | 
 |                                                           [out, retval] Windows.Gaming.Input.IGameController **value); | 
 |     } | 
 |  | 
 |     [ | 
 |         contract(Windows.Foundation.UniversalApiContract, 3.0), | 
 |         marshaling_behavior(agile), | 
 |         static(Windows.Gaming.Input.Custom.IGameControllerFactoryManagerStatics, Windows.Foundation.UniversalApiContract, 3.0), | 
 |         static(Windows.Gaming.Input.Custom.IGameControllerFactoryManagerStatics2, Windows.Foundation.UniversalApiContract, 4.0), | 
 |         threading(both) | 
 |     ] | 
 |     runtimeclass GameControllerFactoryManager | 
 |     { | 
 |     } | 
 |  | 
 |     [ | 
 |         contract(Windows.Foundation.UniversalApiContract, 4.0), | 
 |         marshaling_behavior(agile), | 
 |         threading(both) | 
 |     ] | 
 |     runtimeclass HidGameControllerProvider | 
 |     { | 
 |         [default] interface Windows.Gaming.Input.Custom.IHidGameControllerProvider; | 
 |         interface Windows.Gaming.Input.Custom.IGameControllerProvider; | 
 |     } | 
 |  | 
 |     [ | 
 |         contract(Windows.Foundation.UniversalApiContract, 3.0), | 
 |         marshaling_behavior(agile), | 
 |         threading(both) | 
 |     ] | 
 |     runtimeclass XusbGameControllerProvider | 
 |     { | 
 |         [default] interface Windows.Gaming.Input.Custom.IXusbGameControllerProvider; | 
 |         interface Windows.Gaming.Input.Custom.IGameControllerProvider; | 
 |     } | 
 | } |