|  | /* | 
|  | * 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; | 
|  | } | 
|  | } |