/*** Autogenerated by WIDL 11.0 from ../ValveSoftware-winegit/include/gameinput.idl - Do not edit ***/

#ifdef _WIN32
#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 475
#endif
#include <rpc.h>
#include <rpcndr.h>
#endif

#ifndef COM_NO_WINDOWS_H
#include <windows.h>
#include <ole2.h>
#endif

#ifndef __gameinput_h__
#define __gameinput_h__

/* Forward declarations */

#ifndef __IGameInput_v0_FWD_DEFINED__
#define __IGameInput_v0_FWD_DEFINED__
typedef interface IGameInput_v0 IGameInput_v0;
#ifdef __cplusplus
interface IGameInput_v0;
#endif /* __cplusplus */
#endif

#ifndef __IGameInput_v1_FWD_DEFINED__
#define __IGameInput_v1_FWD_DEFINED__
typedef interface IGameInput_v1 IGameInput_v1;
#ifdef __cplusplus
interface IGameInput_v1;
#endif /* __cplusplus */
#endif

#ifndef __IGameInput_v2_FWD_DEFINED__
#define __IGameInput_v2_FWD_DEFINED__
typedef interface IGameInput_v2 IGameInput_v2;
#ifdef __cplusplus
interface IGameInput_v2;
#endif /* __cplusplus */
#endif

#ifndef __IGameInput_v3_FWD_DEFINED__
#define __IGameInput_v3_FWD_DEFINED__
typedef interface IGameInput_v3 IGameInput_v3;
#ifdef __cplusplus
interface IGameInput_v3;
#endif /* __cplusplus */
#endif

#ifndef __IGameInputReading_v0_FWD_DEFINED__
#define __IGameInputReading_v0_FWD_DEFINED__
typedef interface IGameInputReading_v0 IGameInputReading_v0;
#ifdef __cplusplus
interface IGameInputReading_v0;
#endif /* __cplusplus */
#endif

#ifndef __IGameInputReading_v1_FWD_DEFINED__
#define __IGameInputReading_v1_FWD_DEFINED__
typedef interface IGameInputReading_v1 IGameInputReading_v1;
#ifdef __cplusplus
interface IGameInputReading_v1;
#endif /* __cplusplus */
#endif

#ifndef __IGameInputReading_v2_FWD_DEFINED__
#define __IGameInputReading_v2_FWD_DEFINED__
typedef interface IGameInputReading_v2 IGameInputReading_v2;
#ifdef __cplusplus
interface IGameInputReading_v2;
#endif /* __cplusplus */
#endif

#ifndef __IGameInputReading_v3_FWD_DEFINED__
#define __IGameInputReading_v3_FWD_DEFINED__
typedef interface IGameInputReading_v3 IGameInputReading_v3;
#ifdef __cplusplus
interface IGameInputReading_v3;
#endif /* __cplusplus */
#endif

#ifndef __IGameInputDevice_v0_FWD_DEFINED__
#define __IGameInputDevice_v0_FWD_DEFINED__
typedef interface IGameInputDevice_v0 IGameInputDevice_v0;
#ifdef __cplusplus
interface IGameInputDevice_v0;
#endif /* __cplusplus */
#endif

#ifndef __IGameInputDevice_v1_FWD_DEFINED__
#define __IGameInputDevice_v1_FWD_DEFINED__
typedef interface IGameInputDevice_v1 IGameInputDevice_v1;
#ifdef __cplusplus
interface IGameInputDevice_v1;
#endif /* __cplusplus */
#endif

#ifndef __IGameInputDevice_v2_FWD_DEFINED__
#define __IGameInputDevice_v2_FWD_DEFINED__
typedef interface IGameInputDevice_v2 IGameInputDevice_v2;
#ifdef __cplusplus
interface IGameInputDevice_v2;
#endif /* __cplusplus */
#endif

#ifndef __IGameInputDevice_v3_FWD_DEFINED__
#define __IGameInputDevice_v3_FWD_DEFINED__
typedef interface IGameInputDevice_v3 IGameInputDevice_v3;
#ifdef __cplusplus
interface IGameInputDevice_v3;
#endif /* __cplusplus */
#endif

#ifndef __IGameInputDispatcher_FWD_DEFINED__
#define __IGameInputDispatcher_FWD_DEFINED__
typedef interface IGameInputDispatcher IGameInputDispatcher;
#ifdef __cplusplus
interface IGameInputDispatcher;
#endif /* __cplusplus */
#endif

#ifndef __IGameInputForceFeedbackEffect_v0_FWD_DEFINED__
#define __IGameInputForceFeedbackEffect_v0_FWD_DEFINED__
typedef interface IGameInputForceFeedbackEffect_v0 IGameInputForceFeedbackEffect_v0;
#ifdef __cplusplus
interface IGameInputForceFeedbackEffect_v0;
#endif /* __cplusplus */
#endif

#ifndef __IGameInputForceFeedbackEffect_v2_FWD_DEFINED__
#define __IGameInputForceFeedbackEffect_v2_FWD_DEFINED__
typedef interface IGameInputForceFeedbackEffect_v2 IGameInputForceFeedbackEffect_v2;
#ifdef __cplusplus
interface IGameInputForceFeedbackEffect_v2;
#endif /* __cplusplus */
#endif

#ifndef __IGameInputRawDeviceReport_v0_FWD_DEFINED__
#define __IGameInputRawDeviceReport_v0_FWD_DEFINED__
typedef interface IGameInputRawDeviceReport_v0 IGameInputRawDeviceReport_v0;
#ifdef __cplusplus
interface IGameInputRawDeviceReport_v0;
#endif /* __cplusplus */
#endif

#ifndef __IGameInputRawDeviceReport_v3_FWD_DEFINED__
#define __IGameInputRawDeviceReport_v3_FWD_DEFINED__
typedef interface IGameInputRawDeviceReport_v3 IGameInputRawDeviceReport_v3;
#ifdef __cplusplus
interface IGameInputRawDeviceReport_v3;
#endif /* __cplusplus */
#endif

#ifndef __IGameInputMapper_FWD_DEFINED__
#define __IGameInputMapper_FWD_DEFINED__
typedef interface IGameInputMapper IGameInputMapper;
#ifdef __cplusplus
interface IGameInputMapper;
#endif /* __cplusplus */
#endif

/* Headers for imported files */

#include <unknwn.h>

#ifdef __cplusplus
extern "C" {
#endif

#include <stdint.h>
#include <stdbool.h>
#define GAMEINPUT_API_VERSION 3
#ifdef __cplusplus
namespace GameInput { namespace v3 {
#endif /* __cplusplus */
#ifdef __WINESRC__
# define GAMEINPUT_NAME(func) \
    func##_must_be_suffixed_with_version_in_this_context \
    func##_must_be_suffixed_with_version_in_this_context
#else  /* __WINESRC__ */
# define MAKE_GAMEINPUT_NAME_(func,ver) func ## _v ## ver
# define MAKE_GAMEINPUT_NAME(func,ver) MAKE_GAMEINPUT_NAME_(func,ver)
# define GAMEINPUT_NAME(func) MAKE_GAMEINPUT_NAME(func,GAMEINPUT_API_VERSION)
#endif  /* __WINESRC__ */
#if 0
typedef UINT64 uint64_t;
typedef INT64 int64_t;
typedef unsigned __int3264 size_t;
typedef unsigned int uint32_t;
typedef int int32_t;
typedef unsigned short uint16_t;
typedef unsigned char uint8_t;
typedef boolean bool;
typedef struct APP_LOCAL_DEVICE_ID {
    BYTE value[32];
} APP_LOCAL_DEVICE_ID;
#endif
typedef enum GameInputArcadeStickButtons GameInputArcadeStickButtons;
typedef enum GameInputBatteryStatus GameInputBatteryStatus;
typedef enum GameInputDeviceCapabilities GameInputDeviceCapabilities;
typedef enum GameInputDeviceFamily GameInputDeviceFamily;
typedef enum GameInputDeviceStatus GameInputDeviceStatus;
typedef enum GameInputElementKind GameInputElementKind;
typedef enum GameInputEnumerationKind GameInputEnumerationKind;
typedef enum GameInputFeedbackAxes GameInputFeedbackAxes;
typedef enum GameInputFeedbackEffectState GameInputFeedbackEffectState;
typedef enum GameInputFlightStickAxes GameInputFlightStickAxes;
typedef enum GameInputFlightStickButtons GameInputFlightStickButtons;
typedef enum GameInputFocusPolicy GameInputFocusPolicy;
typedef enum GameInputForceFeedbackEffectKind GameInputForceFeedbackEffectKind;
typedef enum GameInputGamepadAxes GameInputGamepadAxes;
typedef enum GameInputGamepadButtons GameInputGamepadButtons;
typedef enum GameInputKeyboardKind GameInputKeyboardKind;
typedef enum GameInputKind GameInputKind;
typedef enum GameInputLabel GameInputLabel;
typedef enum GameInputLocation GameInputLocation;
typedef enum GameInputMotionAccuracy GameInputMotionAccuracy;
typedef enum GameInputMouseButtons GameInputMouseButtons;
typedef enum GameInputMousePositions GameInputMousePositions;
typedef enum GameInputRacingWheelAxes GameInputRacingWheelAxes;
typedef enum GameInputRacingWheelButtons GameInputRacingWheelButtons;
typedef enum GameInputRawDeviceItemCollectionKind GameInputRawDeviceItemCollectionKind;
typedef enum GameInputRawDevicePhysicalUnitKind GameInputRawDevicePhysicalUnitKind;
typedef enum GameInputRawDeviceReportItemFlags GameInputRawDeviceReportItemFlags;
typedef enum GameInputRawDeviceReportKind GameInputRawDeviceReportKind;
typedef enum GameInputRumbleMotors GameInputRumbleMotors;
typedef enum GameInputSensorAccuracy GameInputSensorAccuracy;
typedef enum GameInputSensorsKind GameInputSensorsKind;
typedef enum GameInputSwitchKind GameInputSwitchKind;
typedef enum GameInputSwitchPosition GameInputSwitchPosition;
typedef enum GameInputSystemButtons GameInputSystemButtons;
typedef enum GameInputTouchShape GameInputTouchShape;
typedef enum GameInputUiNavigationButtons GameInputUiNavigationButtons;
typedef struct GameInputArcadeStickInfo_v0 GameInputArcadeStickInfo_v0;
typedef struct GameInputArcadeStickInfo_v0 GameInputArcadeStickInfo_v1;
typedef struct GameInputArcadeStickInfo_v0 GameInputArcadeStickInfo_v2;
typedef struct GameInputArcadeStickInfo_v3 GameInputArcadeStickInfo_v3;
#define GameInputArcadeStickInfo GAMEINPUT_NAME(GameInputArcadeStickInfo)
typedef struct GameInputArcadeStickState GameInputArcadeStickState;
typedef struct GameInputAxisMapping GameInputAxisMapping;
typedef struct GameInputBatteryState GameInputBatteryState;
typedef struct GameInputButtonMapping GameInputButtonMapping;
typedef struct GameInputControllerAxisInfo_v0 GameInputControllerAxisInfo_v0;
typedef struct GameInputControllerAxisInfo_v1 GameInputControllerAxisInfo_v1;
typedef struct GameInputControllerAxisInfo_v1 GameInputControllerAxisInfo_v2;
#define GameInputControllerAxisInfo GAMEINPUT_NAME(GameInputControllerAxisInfo)
typedef struct GameInputControllerButtonInfo_v0 GameInputControllerButtonInfo_v0;
typedef struct GameInputControllerButtonInfo_v1 GameInputControllerButtonInfo_v1;
typedef struct GameInputControllerButtonInfo_v1 GameInputControllerButtonInfo_v2;
#define GameInputControllerButtonInfo GAMEINPUT_NAME(GameInputControllerButtonInfo)
typedef struct GameInputControllerSwitchInfo_v0 GameInputControllerSwitchInfo_v0;
typedef struct GameInputControllerSwitchInfo_v1 GameInputControllerSwitchInfo_v1;
typedef struct GameInputControllerSwitchInfo_v1 GameInputControllerSwitchInfo_v2;
typedef struct GameInputControllerSwitchInfo_v3 GameInputControllerSwitchInfo_v3;
#define GameInputControllerSwitchInfo GAMEINPUT_NAME(GameInputControllerSwitchInfo)
typedef struct GameInputControllerInfo GameInputControllerInfo;
typedef struct GameInputDeviceInfo_v0 GameInputDeviceInfo_v0;
typedef struct GameInputDeviceInfo_v1 GameInputDeviceInfo_v1;
typedef struct GameInputDeviceInfo_v2 GameInputDeviceInfo_v2;
typedef struct GameInputDeviceInfo_v3 GameInputDeviceInfo_v3;
#define GameInputDeviceInfo GAMEINPUT_NAME(GameInputDeviceInfo)
typedef struct GameInputFlightStickInfo_v0 GameInputFlightStickInfo_v0;
typedef struct GameInputFlightStickInfo_v0 GameInputFlightStickInfo_v1;
typedef struct GameInputFlightStickInfo_v0 GameInputFlightStickInfo_v2;
typedef struct GameInputFlightStickInfo_v3 GameInputFlightStickInfo_v3;
#define GameInputFlightStickInfo GAMEINPUT_NAME(GameInputFlightStickInfo)
typedef struct GameInputFlightStickState GameInputFlightStickState;
typedef struct GameInputForceFeedbackConditionParams GameInputForceFeedbackConditionParams;
typedef struct GameInputForceFeedbackConstantParams GameInputForceFeedbackConstantParams;
typedef struct GameInputForceFeedbackEnvelope GameInputForceFeedbackEnvelope;
typedef struct GameInputForceFeedbackMagnitude GameInputForceFeedbackMagnitude;
typedef struct GameInputForceFeedbackMotorInfo_v0 GameInputForceFeedbackMotorInfo_v0;
typedef struct GameInputForceFeedbackMotorInfo_v1 GameInputForceFeedbackMotorInfo_v1;
typedef struct GameInputForceFeedbackMotorInfo_v1 GameInputForceFeedbackMotorInfo_v2;
typedef struct GameInputForceFeedbackMotorInfo_v1 GameInputForceFeedbackMotorInfo_v3;
#define GameInputForceFeedbackMotorInfo GAMEINPUT_NAME(GameInputForceFeedbackMotorInfo)
typedef struct GameInputForceFeedbackParams GameInputForceFeedbackParams;
typedef struct GameInputForceFeedbackPeriodicParams GameInputForceFeedbackPeriodicParams;
typedef struct GameInputForceFeedbackRampParams GameInputForceFeedbackRampParams;
typedef struct GameInputGamepadInfo_v0 GameInputGamepadInfo_v0;
typedef struct GameInputGamepadInfo_v0 GameInputGamepadInfo_v1;
typedef struct GameInputGamepadInfo_v0 GameInputGamepadInfo_v2;
typedef struct GameInputGamepadInfo_v3 GameInputGamepadInfo_v3;
#define GameInputGamepadInfo GAMEINPUT_NAME(GameInputGamepadInfo)
typedef struct GameInputGamepadState GameInputGamepadState;
typedef struct GameInputHapticFeedbackMotorInfo GameInputHapticFeedbackMotorInfo;
typedef struct GameInputHapticFeedbackParams GameInputHapticFeedbackParams;
typedef struct GameInputHapticInfo GameInputHapticInfo;
typedef struct GameInputHapticWaveformInfo GameInputHapticWaveformInfo;
typedef struct GameInputKeyboardInfo_v0 GameInputKeyboardInfo_v0;
typedef struct GameInputKeyboardInfo_v1 GameInputKeyboardInfo_v1;
typedef struct GameInputKeyboardInfo_v1 GameInputKeyboardInfo_v2;
typedef struct GameInputKeyboardInfo_v1 GameInputKeyboardInfo_v3;
#define GameInputKeyboardInfo GAMEINPUT_NAME(GameInputKeyboardInfo)
typedef struct GameInputKeyState GameInputKeyState;
typedef struct GameInputMotionInfo GameInputMotionInfo;
typedef struct GameInputMotionState GameInputMotionState;
typedef struct GameInputMouseInfo_v0 GameInputMouseInfo_v0;
typedef struct GameInputMouseInfo_v1 GameInputMouseInfo_v1;
typedef struct GameInputMouseInfo_v1 GameInputMouseInfo_v2;
typedef struct GameInputMouseInfo_v1 GameInputMouseInfo_v3;
#define GameInputMouseInfo GAMEINPUT_NAME(GameInputMouseInfo)
typedef struct GameInputMouseState_v0 GameInputMouseState_v0;
typedef struct GameInputMouseState_v1 GameInputMouseState_v1;
typedef struct GameInputMouseState_v1 GameInputMouseState_v2;
typedef struct GameInputMouseState_v1 GameInputMouseState_v3;
#define GameInputMouseState GAMEINPUT_NAME(GameInputMouseState)
typedef struct GameInputRacingWheelInfo_v0 GameInputRacingWheelInfo_v0;
typedef struct GameInputRacingWheelInfo_v0 GameInputRacingWheelInfo_v1;
typedef struct GameInputRacingWheelInfo_v0 GameInputRacingWheelInfo_v2;
typedef struct GameInputRacingWheelInfo_v3 GameInputRacingWheelInfo_v3;
#define GameInputRacingWheelInfo GAMEINPUT_NAME(GameInputRacingWheelInfo)
typedef struct GameInputRacingWheelState GameInputRacingWheelState;
typedef struct GameInputRawDeviceItemCollectionInfo GameInputRawDeviceItemCollectionInfo;
typedef struct GameInputRawDeviceReportInfo_v0 GameInputRawDeviceReportInfo_v0;
typedef struct GameInputRawDeviceReportInfo_v3 GameInputRawDeviceReportInfo_v3;
#define GameInputRawDeviceReportInfo GAMEINPUT_NAME(GameInputRawDeviceReportInfo)
typedef struct GameInputRawDeviceReportItemInfo GameInputRawDeviceReportItemInfo;
typedef struct GameInputRumbleParams GameInputRumbleParams;
typedef struct GameInputSensorsInfo GameInputSensorsInfo;
typedef struct GameInputSensorsState GameInputSensorsState;
typedef struct GameInputString GameInputString;
typedef struct GameInputTouchSensorInfo GameInputTouchSensorInfo;
typedef struct GameInputTouchState GameInputTouchState;
typedef struct GameInputUiNavigationInfo GameInputUiNavigationInfo;
typedef struct GameInputUiNavigationState GameInputUiNavigationState;
typedef struct GameInputUsage GameInputUsage;
typedef struct GameInputVersion GameInputVersion;
#ifndef __IGameInput_v0_FWD_DEFINED__
#define __IGameInput_v0_FWD_DEFINED__
typedef interface IGameInput_v0 IGameInput_v0;
#ifdef __cplusplus
interface IGameInput_v0;
#endif /* __cplusplus */
#endif

#ifndef __IGameInput_v1_FWD_DEFINED__
#define __IGameInput_v1_FWD_DEFINED__
typedef interface IGameInput_v1 IGameInput_v1;
#ifdef __cplusplus
interface IGameInput_v1;
#endif /* __cplusplus */
#endif

#ifndef __IGameInput_v2_FWD_DEFINED__
#define __IGameInput_v2_FWD_DEFINED__
typedef interface IGameInput_v2 IGameInput_v2;
#ifdef __cplusplus
interface IGameInput_v2;
#endif /* __cplusplus */
#endif

#ifndef __IGameInput_v3_FWD_DEFINED__
#define __IGameInput_v3_FWD_DEFINED__
typedef interface IGameInput_v3 IGameInput_v3;
#ifdef __cplusplus
interface IGameInput_v3;
#endif /* __cplusplus */
#endif

#define IGameInput GAMEINPUT_NAME(IGameInput)
#ifndef __IGameInputReading_v0_FWD_DEFINED__
#define __IGameInputReading_v0_FWD_DEFINED__
typedef interface IGameInputReading_v0 IGameInputReading_v0;
#ifdef __cplusplus
interface IGameInputReading_v0;
#endif /* __cplusplus */
#endif

#ifndef __IGameInputReading_v1_FWD_DEFINED__
#define __IGameInputReading_v1_FWD_DEFINED__
typedef interface IGameInputReading_v1 IGameInputReading_v1;
#ifdef __cplusplus
interface IGameInputReading_v1;
#endif /* __cplusplus */
#endif

#ifndef __IGameInputReading_v2_FWD_DEFINED__
#define __IGameInputReading_v2_FWD_DEFINED__
typedef interface IGameInputReading_v2 IGameInputReading_v2;
#ifdef __cplusplus
interface IGameInputReading_v2;
#endif /* __cplusplus */
#endif

#ifndef __IGameInputReading_v3_FWD_DEFINED__
#define __IGameInputReading_v3_FWD_DEFINED__
typedef interface IGameInputReading_v3 IGameInputReading_v3;
#ifdef __cplusplus
interface IGameInputReading_v3;
#endif /* __cplusplus */
#endif

#define IGameInputReading GAMEINPUT_NAME(IGameInputReading)
#ifndef __IGameInputDevice_v0_FWD_DEFINED__
#define __IGameInputDevice_v0_FWD_DEFINED__
typedef interface IGameInputDevice_v0 IGameInputDevice_v0;
#ifdef __cplusplus
interface IGameInputDevice_v0;
#endif /* __cplusplus */
#endif

#ifndef __IGameInputDevice_v1_FWD_DEFINED__
#define __IGameInputDevice_v1_FWD_DEFINED__
typedef interface IGameInputDevice_v1 IGameInputDevice_v1;
#ifdef __cplusplus
interface IGameInputDevice_v1;
#endif /* __cplusplus */
#endif

#ifndef __IGameInputDevice_v2_FWD_DEFINED__
#define __IGameInputDevice_v2_FWD_DEFINED__
typedef interface IGameInputDevice_v2 IGameInputDevice_v2;
#ifdef __cplusplus
interface IGameInputDevice_v2;
#endif /* __cplusplus */
#endif

#ifndef __IGameInputDevice_v3_FWD_DEFINED__
#define __IGameInputDevice_v3_FWD_DEFINED__
typedef interface IGameInputDevice_v3 IGameInputDevice_v3;
#ifdef __cplusplus
interface IGameInputDevice_v3;
#endif /* __cplusplus */
#endif

#define IGameInputDevice GAMEINPUT_NAME(IGameInputDevice)
#ifndef __IGameInputDispatcher_FWD_DEFINED__
#define __IGameInputDispatcher_FWD_DEFINED__
typedef interface IGameInputDispatcher IGameInputDispatcher;
#ifdef __cplusplus
interface IGameInputDispatcher;
#endif /* __cplusplus */
#endif

#ifndef __IGameInputForceFeedbackEffect_v0_FWD_DEFINED__
#define __IGameInputForceFeedbackEffect_v0_FWD_DEFINED__
typedef interface IGameInputForceFeedbackEffect_v0 IGameInputForceFeedbackEffect_v0;
#ifdef __cplusplus
interface IGameInputForceFeedbackEffect_v0;
#endif /* __cplusplus */
#endif

#ifndef __IGameInputForceFeedbackEffect_v2_FWD_DEFINED__
#define __IGameInputForceFeedbackEffect_v2_FWD_DEFINED__
typedef interface IGameInputForceFeedbackEffect_v2 IGameInputForceFeedbackEffect_v2;
#ifdef __cplusplus
interface IGameInputForceFeedbackEffect_v2;
#endif /* __cplusplus */
#endif

#ifndef __IGameInputForceFeedbackEffect_v3_FWD_DEFINED__
#define __IGameInputForceFeedbackEffect_v3_FWD_DEFINED__
typedef interface IGameInputForceFeedbackEffect_v3 IGameInputForceFeedbackEffect_v3;
#ifdef __cplusplus
interface IGameInputForceFeedbackEffect_v3;
#endif /* __cplusplus */
#endif

#define IGameInputForceFeedbackEffect GAMEINPUT_NAME(IGameInputForceFeedbackEffect)
#ifndef __IGameInputRawDeviceReport_v0_FWD_DEFINED__
#define __IGameInputRawDeviceReport_v0_FWD_DEFINED__
typedef interface IGameInputRawDeviceReport_v0 IGameInputRawDeviceReport_v0;
#ifdef __cplusplus
interface IGameInputRawDeviceReport_v0;
#endif /* __cplusplus */
#endif

#ifndef __IGameInputRawDeviceReport_v3_FWD_DEFINED__
#define __IGameInputRawDeviceReport_v3_FWD_DEFINED__
typedef interface IGameInputRawDeviceReport_v3 IGameInputRawDeviceReport_v3;
#ifdef __cplusplus
interface IGameInputRawDeviceReport_v3;
#endif /* __cplusplus */
#endif

#define IGameInputRawDeviceReport GAMEINPUT_NAME(IGameInputRawDeviceReport)
#ifndef __IGameInputMapper_FWD_DEFINED__
#define __IGameInputMapper_FWD_DEFINED__
typedef interface IGameInputMapper IGameInputMapper;
#ifdef __cplusplus
interface IGameInputMapper;
#endif /* __cplusplus */
#endif

typedef uint64_t GameInputCallbackToken;
#define GAMEINPUT_CURRENT_CALLBACK_TOKEN_VALUE (~(uint64_t)0)

#define GAMEINPUT_INVALID_CALLBACK_TOKEN_VALUE (0)

DEFINE_GUID(GAMEINPUT_HAPTIC_LOCATION_NONE,          0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00);
DEFINE_GUID(GAMEINPUT_HAPTIC_LOCATION_GRIP_LEFT,     0x08c707c2, 0x66bb, 0x406c, 0xa8, 0x4a, 0xdf, 0xe0, 0x85, 0x12, 0x0a, 0x92);
DEFINE_GUID(GAMEINPUT_HAPTIC_LOCATION_GRIP_RIGHT,    0x155a0b77, 0x8bb2, 0x40db, 0x86, 0x90, 0xb6, 0xd4, 0x11, 0x26, 0xdf, 0xc1);
DEFINE_GUID(GAMEINPUT_HAPTIC_LOCATION_TRIGGER_LEFT,  0x8de4d896, 0x5559, 0x4081, 0x86, 0xe5, 0x17, 0x24, 0xcc, 0x07, 0xc6, 0xbc);
DEFINE_GUID(GAMEINPUT_HAPTIC_LOCATION_TRIGGER_RIGHT, 0xff0cb557, 0x3af5, 0x406b, 0x8b, 0x0f, 0x55, 0x5a, 0x2d, 0x92, 0xa2, 0x20);
#define GAMEINPUT_HAPTIC_MAX_LOCATIONS (8)

#define GAMEINPUT_HAPTIC_MAX_AUDIO_ENDPOINT_ID_SIZE (256)

typedef void (__stdcall *GameInputReadingCallback_v0)(GameInputCallbackToken token,void *context,IGameInputReading_v0 *reading,bool has_overrun);
typedef void (__stdcall *GameInputReadingCallback_v1)(GameInputCallbackToken token,void *context,IGameInputReading_v1 *reading);
typedef void (__stdcall *GameInputReadingCallback_v2)(GameInputCallbackToken token,void *context,IGameInputReading_v2 *reading);
typedef void (__stdcall *GameInputReadingCallback_v3)(GameInputCallbackToken token,void *context,IGameInputReading_v3 *reading);
#define GameInputReadingCallback GAMEINPUT_NAME(GameInputReadingCallback)
typedef void (__stdcall *GameInputDeviceCallback_v0)(GameInputCallbackToken token,void *context,IGameInputDevice_v0 *device,uint64_t timestamp,GameInputDeviceStatus current_status,GameInputDeviceStatus previous_status);
typedef void (__stdcall *GameInputDeviceCallback_v1)(GameInputCallbackToken token,void *context,IGameInputDevice_v1 *device,uint64_t timestamp,GameInputDeviceStatus current_status,GameInputDeviceStatus previous_status);
typedef void (__stdcall *GameInputDeviceCallback_v2)(GameInputCallbackToken token,void *context,IGameInputDevice_v2 *device,uint64_t timestamp,GameInputDeviceStatus current_status,GameInputDeviceStatus previous_status);
typedef void (__stdcall *GameInputDeviceCallback_v3)(GameInputCallbackToken token,void *context,IGameInputDevice_v3 *device,uint64_t timestamp,GameInputDeviceStatus current_status,GameInputDeviceStatus previous_status);
#define GameInputDeviceCallback GAMEINPUT_NAME(GameInputDeviceCallback)
typedef void (__stdcall *GameInputSystemButtonCallback_v0)(GameInputCallbackToken token,void *context,IGameInputDevice_v0 *device,uint64_t timestamp,GameInputSystemButtons current_buttons,GameInputSystemButtons previous_buttons);
typedef void (__stdcall *GameInputSystemButtonCallback_v1)(GameInputCallbackToken token,void *context,IGameInputDevice_v1 *device,uint64_t timestamp,GameInputSystemButtons current_buttons,GameInputSystemButtons previous_buttons);
typedef void (__stdcall *GameInputSystemButtonCallback_v2)(GameInputCallbackToken token,void *context,IGameInputDevice_v2 *device,uint64_t timestamp,GameInputSystemButtons current_buttons,GameInputSystemButtons previous_buttons);
typedef void (__stdcall *GameInputSystemButtonCallback_v3)(GameInputCallbackToken token,void *context,IGameInputDevice_v3 *device,uint64_t timestamp,GameInputSystemButtons current_buttons,GameInputSystemButtons previous_buttons);
#define GameInputSystemButtonCallback GAMEINPUT_NAME(GameInputSystemButtonCallback)
typedef void (__stdcall *GameInputKeyboardLayoutCallback_v0)(GameInputCallbackToken token,void *context,IGameInputDevice_v0 *device,uint64_t timestamp,uint32_t current_layout,uint32_t previous_layout);
typedef void (__stdcall *GameInputKeyboardLayoutCallback_v1)(GameInputCallbackToken token,void *context,IGameInputDevice_v1 *device,uint64_t timestamp,uint32_t current_layout,uint32_t previous_layout);
typedef void (__stdcall *GameInputKeyboardLayoutCallback_v2)(GameInputCallbackToken token,void *context,IGameInputDevice_v2 *device,uint64_t timestamp,uint32_t current_layout,uint32_t previous_layout);
typedef void (__stdcall *GameInputKeyboardLayoutCallback_v3)(GameInputCallbackToken token,void *context,IGameInputDevice_v3 *device,uint64_t timestamp,uint32_t current_layout,uint32_t previous_layout);
#define GameInputKeyboardLayoutCallback GAMEINPUT_NAME(GameInputKeyboardLayoutCallback)
enum GameInputKind {
    GameInputKindUnknown = 0x0,
    GameInputKindRawDeviceReport = 0x1,
    GameInputKindControllerAxis = 0x2,
    GameInputKindControllerButton = 0x4,
    GameInputKindControllerSwitch = 0x8,
    GameInputKindController = 0xe,
    GameInputKindKeyboard = 0x10,
    GameInputKindMouse = 0x20,
    GameInputKindSensors = 0x40,
    GameInputKindTouch = 0x100,
    GameInputKindMotion = 0x1000,
    GameInputKindArcadeStick = 0x10000,
    GameInputKindFlightStick = 0x20000,
    GameInputKindGamepad = 0x40000,
    GameInputKindRacingWheel = 0x80000,
    GameInputKindUiNavigation_v0 = 0x1000000,
    GameInputKindUiNavigation_v1 = GameInputKindUiNavigation_v0,
    GameInputKindUiNavigation_v2 = GameInputKindUiNavigation_v0
};
#define GameInputKindUiNavigation GAMEINPUT_NAME(GameInputKindUiNavigation)
enum GameInputEnumerationKind {
    GameInputNoEnumeration = 0,
    GameInputAsyncEnumeration = 1,
    GameInputBlockingEnumeration = 2
};
enum GameInputFocusPolicy {
    GameInputDefaultFocusPolicy = 0x0,
    GameInputDisableBackgroundInput = 0x1,
    GameInputExclusiveForegroundInput = 0x2,
    GameInputDisableBackgroundGuideButton = 0x4,
    GameInputExclusiveForegroundGuideButton = 0x8,
    GameInputDisableBackgroundShareButton = 0x10,
    GameInputExclusiveForegroundShareButton = 0x20,
    GameInputEnableBackgroundInput = 0x40,
    GameInputEnableBackgroundGuideButton = 0x80,
    GameInputEnableBackgroundShareButton = 0x100
};
enum GameInputSwitchKind {
    GameInputUnknownSwitchKind = -1,
    GameInput2WaySwitch = 0,
    GameInput4WaySwitch = 1,
    GameInput8WaySwitch = 2
};
enum GameInputSwitchPosition {
    GameInputSwitchCenter = 0,
    GameInputSwitchUp = 1,
    GameInputSwitchUpRight = 2,
    GameInputSwitchRight = 3,
    GameInputSwitchDownRight = 4,
    GameInputSwitchDown = 5,
    GameInputSwitchDownLeft = 6,
    GameInputSwitchLeft = 7,
    GameInputSwitchUpLeft = 8
};
enum GameInputKeyboardKind {
    GameInputUnknownKeyboard = -1,
    GameInputAnsiKeyboard = 0,
    GameInputIsoKeyboard = 1,
    GameInputKsKeyboard = 2,
    GameInputAbntKeyboard = 3,
    GameInputJisKeyboard = 4
};
enum GameInputMouseButtons {
    GameInputMouseNone = 0x0,
    GameInputMouseLeftButton = 0x1,
    GameInputMouseRightButton = 0x2,
    GameInputMouseMiddleButton = 0x4,
    GameInputMouseButton4 = 0x8,
    GameInputMouseButton5 = 0x10,
    GameInputMouseWheelTiltLeft = 0x20,
    GameInputMouseWheelTiltRight = 0x40
};
enum GameInputMousePositions {
    GameInputMouseNoPosition = 0x0,
    GameInputMouseAbsolutePosition = 0x1,
    GameInputMouseRelativePosition = 0x2
};
enum GameInputTouchShape {
    GameInputTouchShapeUnknown = -1,
    GameInputTouchShapePoint = 0,
    GameInputTouchShape1DLinear = 1,
    GameInputTouchShape1DRadial = 2,
    GameInputTouchShape1DIrregular = 3,
    GameInputTouchShape2DRectangular = 4,
    GameInputTouchShape2DElliptical = 5,
    GameInputTouchShape2DIrregular = 6
};
enum GameInputMotionAccuracy {
    GameInputMotionAccuracyUnknown = -1,
    GameInputMotionUnavailable = 0,
    GameInputMotionUnreliable = 1,
    GameInputMotionApproximate = 2,
    GameInputMotionAccurate = 3
};
enum GameInputSensorsKind {
    GameInputSensorsNone = 0x0,
    GameInputSensorsAccelerometer = 0x1,
    GameInputSensorsGyrometer = 0x2,
    GameInputSensorsCompass = 0x4,
    GameInputSensorsOrientation = 0x8
};
enum GameInputSensorAccuracy {
    GameInputSensorAccuracyUnknown = 0x0,
    GameInputSensorAccuracyUnreliable = 0x1,
    GameInputSensorAccuracyApproximate = 0x2,
    GameInputSensorAccuracyHigh = 0x3
};
enum GameInputArcadeStickButtons {
    GameInputArcadeStickNone = 0x0,
    GameInputArcadeStickMenu = 0x1,
    GameInputArcadeStickView = 0x2,
    GameInputArcadeStickUp = 0x4,
    GameInputArcadeStickDown = 0x8,
    GameInputArcadeStickLeft = 0x10,
    GameInputArcadeStickRight = 0x20,
    GameInputArcadeStickAction1 = 0x40,
    GameInputArcadeStickAction2 = 0x80,
    GameInputArcadeStickAction3 = 0x100,
    GameInputArcadeStickAction4 = 0x200,
    GameInputArcadeStickAction5 = 0x400,
    GameInputArcadeStickAction6 = 0x800,
    GameInputArcadeStickSpecial1 = 0x1000,
    GameInputArcadeStickSpecial2 = 0x2000
};
enum GameInputFlightStickButtons {
    GameInputFlightStickNone = 0x0,
    GameInputFlightStickMenu = 0x1,
    GameInputFlightStickView = 0x2,
    GameInputFlightStickFirePrimary = 0x4,
    GameInputFlightStickFireSecondary = 0x8,
    GameInputFlightStickHatSwitchUp = 0x10,
    GameInputFlightStickHatSwitchDown = 0x20,
    GameInputFlightStickHatSwitchLeft = 0x40,
    GameInputFlightStickHatSwitchRight = 0x80,
    GameInputFlightStickA = 0x100,
    GameInputFlightStickB = 0x200,
    GameInputFlightStickX = 0x400,
    GameInputFlightStickY = 0x800,
    GameInputFlightStickLeftShoulder = 0x1000,
    GameInputFlightStickRightShoulder = 0x2000
};
enum GameInputGamepadButtons {
    GameInputGamepadNone = 0x0,
    GameInputGamepadMenu = 0x1,
    GameInputGamepadView = 0x2,
    GameInputGamepadA = 0x4,
    GameInputGamepadB = 0x8,
    GameInputGamepadC = 0x4000,
    GameInputGamepadX = 0x10,
    GameInputGamepadY = 0x20,
    GameInputGamepadZ = 0x8000,
    GameInputGamepadDPadUp = 0x40,
    GameInputGamepadDPadDown = 0x80,
    GameInputGamepadDPadLeft = 0x100,
    GameInputGamepadDPadRight = 0x200,
    GameInputGamepadLeftShoulder = 0x400,
    GameInputGamepadRightShoulder = 0x800,
    GameInputGamepadLeftTriggerButton = 0x10000,
    GameInputGamepadRightTriggerButton = 0x20000,
    GameInputGamepadLeftThumbstick = 0x1000,
    GameInputGamepadLeftThumbstickUp = 0x40000,
    GameInputGamepadLeftThumbstickDown = 0x80000,
    GameInputGamepadLeftThumbstickLeft = 0x100000,
    GameInputGamepadLeftThumbstickRight = 0x200000,
    GameInputGamepadRightThumbstick = 0x2000,
    GameInputGamepadRightThumbstickUp = 0x400000,
    GameInputGamepadRightThumbstickDown = 0x800000,
    GameInputGamepadRightThumbstickLeft = 0x1000000,
    GameInputGamepadRightThumbstickRight = 0x2000000,
    GameInputGamepadPaddleLeft1 = 0x4000000,
    GameInputGamepadPaddleLeft2 = 0x8000000,
    GameInputGamepadPaddleRight1 = 0x10000000,
    GameInputGamepadPaddleRight2 = 0x20000000
};
#define GameInputGamepadModuleSystemDuo (GameInputGamepadMenu | GameInputGamepadView)

#define GameInputGamepadModuleDpad (((GameInputGamepadDPadUp | GameInputGamepadDPadDown) | GameInputGamepadDPadLeft) | GameInputGamepadDPadRight)

#define GameInputGamepadModuleShoulders (GameInputGamepadLeftShoulder | GameInputGamepadRightShoulder)

#define GameInputGamepadModuleTriggers (GameInputGamepadLeftTriggerButton | GameInputGamepadRightTriggerButton)

#define GameInputGamepadModuleThumbsticks (((((((GameInputGamepadLeftThumbstickUp | GameInputGamepadLeftThumbstickDown) | GameInputGamepadLeftThumbstickLeft) | GameInputGamepadLeftThumbstickRight) | GameInputGamepadRightThumbstickUp) | GameInputGamepadRightThumbstickDown) | GameInputGamepadRightThumbstickLeft) | GameInputGamepadRightThumbstickRight)

#define GameInputGamepadModulePaddles2 (GameInputGamepadPaddleLeft1 | GameInputGamepadPaddleRight1)

#define GameInputGamepadModulePaddles4 (((GameInputGamepadPaddleLeft1 | GameInputGamepadPaddleLeft2) | GameInputGamepadPaddleRight1) | GameInputGamepadPaddleRight2)

#define GameInputGamepadLayoutBasic (((GameInputGamepadModuleSystemDuo | GameInputGamepadModuleDpad) | GameInputGamepadA) | GameInputGamepadB)

#define GameInputGamepadLayoutButtons (((GameInputGamepadLayoutBasic | GameInputGamepadX) | GameInputGamepadY) | GameInputGamepadModuleShoulders)

#define GameInputGamepadLayoutStandard ((((GameInputGamepadLayoutButtons | GameInputGamepadModuleTriggers) | GameInputGamepadModuleThumbsticks) | GameInputGamepadLeftThumbstick) | GameInputGamepadRightThumbstick)

#define GameInputGamepadLayoutElite (GameInputGamepadLayoutStandard | GameInputGamepadModulePaddles4)

enum GameInputRacingWheelButtons {
    GameInputRacingWheelNone = 0x0,
    GameInputRacingWheelMenu = 0x1,
    GameInputRacingWheelView = 0x2,
    GameInputRacingWheelPreviousGear = 0x4,
    GameInputRacingWheelNextGear = 0x8,
    GameInputRacingWheelA = 0x100,
    GameInputRacingWheelB = 0x200,
    GameInputRacingWheelX = 0x400,
    GameInputRacingWheelY = 0x800,
    GameInputRacingWheelDpadUp = 0x10,
    GameInputRacingWheelDpadDown = 0x20,
    GameInputRacingWheelDpadLeft = 0x40,
    GameInputRacingWheelDpadRight = 0x80,
    GameInputRacingWheelLeftThumbstick = 0x1000,
    GameInputRacingWheelRightThumbstick = 0x2000
};
enum GameInputUiNavigationButtons {
    GameInputUiNavigationNone = 0x0,
    GameInputUiNavigationMenu = 0x1,
    GameInputUiNavigationView = 0x2,
    GameInputUiNavigationAccept = 0x4,
    GameInputUiNavigationCancel = 0x8,
    GameInputUiNavigationUp = 0x10,
    GameInputUiNavigationDown = 0x20,
    GameInputUiNavigationLeft = 0x40,
    GameInputUiNavigationRight = 0x80,
    GameInputUiNavigationContext1 = 0x100,
    GameInputUiNavigationContext2 = 0x200,
    GameInputUiNavigationContext3 = 0x400,
    GameInputUiNavigationContext4 = 0x800,
    GameInputUiNavigationPageUp = 0x1000,
    GameInputUiNavigationPageDown = 0x2000,
    GameInputUiNavigationPageLeft = 0x4000,
    GameInputUiNavigationPageRight = 0x8000,
    GameInputUiNavigationScrollUp = 0x10000,
    GameInputUiNavigationScrollDown = 0x20000,
    GameInputUiNavigationScrollLeft = 0x40000,
    GameInputUiNavigationScrollRight = 0x80000
};
enum GameInputSystemButtons {
    GameInputSystemButtonNone = 0x0,
    GameInputSystemButtonGuide = 0x1,
    GameInputSystemButtonShare = 0x2
};
enum GameInputFlightStickAxes {
    GameInputFlightStickAxesNone = 0x0,
    GameInputFlightStickRoll = 0x10,
    GameInputFlightStickPitch = 0x20,
    GameInputFlightStickYaw = 0x40,
    GameInputFlightStickThrottle = 0x80
};
enum GameInputGamepadAxes {
    GameInputGamepadAxesNone = 0x0,
    GameInputGamepadLeftTrigger = 0x1,
    GameInputGamepadRightTrigger = 0x2,
    GameInputGamepadLeftThumbstickX = 0x4,
    GameInputGamepadLeftThumbstickY = 0x8,
    GameInputGamepadRightThumbstickX = 0x10,
    GameInputGamepadRightThumbstickY = 0x20
};
enum GameInputRacingWheelAxes {
    GameInputRacingWheelAxesNone = 0x0,
    GameInputRacingWheelSteering = 0x100,
    GameInputRacingWheelThrottle = 0x200,
    GameInputRacingWheelBrake = 0x400,
    GameInputRacingWheelClutch = 0x800,
    GameInputRacingWheelHandbrake = 0x1000,
    GameInputRacingWheelPatternShifter = 0x2000
};
enum GameInputDeviceStatus {
    GameInputDeviceNoStatus = 0x0,
    GameInputDeviceConnected = 0x1,
    GameInputDeviceInputEnabled = 0x2,
    GameInputDeviceOutputEnabled = 0x4,
    GameInputDeviceRawIoEnabled = 0x8,
    GameInputDeviceAudioCapture = 0x10,
    GameInputDeviceAudioRender = 0x20,
    GameInputDeviceSynchronized = 0x40,
    GameInputDeviceWireless = 0x80,
    GameInputDeviceUserIdle = 0x100000,
    GameInputDeviceHapticInfoReady = 0x200000,
    GameInputDeviceAnyStatus_v0 = 0xffffff,
    GameInputDeviceAnyStatus_v1 = 0xffffffff,
    GameInputDeviceAnyStatus_v2 = GameInputDeviceAnyStatus_v1,
    GameInputDeviceAnyStatus_v3 = GameInputDeviceAnyStatus_v1
};
#define GameInputDeviceAnyStatus GAMEINPUT_NAME(GameInputDeviceAnyStatus)
enum GameInputBatteryStatus {
    GameInputBatteryUnknown = -1,
    GameInputBatteryNotPresent = 0,
    GameInputBatteryDischarging = 1,
    GameInputBatteryIdle = 2,
    GameInputBatteryCharging = 3
};
enum GameInputDeviceFamily {
    GameInputFamilyVirtual = -1,
    GameInputFamilyAggregate_v0 = 0,
    GameInputFamilyAggregate_v1 = GameInputFamilyAggregate_v0,
    GameInputFamilyAggregate_v2 = GameInputFamilyAggregate_v0,
    GameInputFamilyAggregate_v3 = 5,
    GameInputFamilyUnknown_v3 = 0,
    GameInputFamilyXboxOne = 1,
    GameInputFamilyXbox360 = 2,
    GameInputFamilyHid = 3,
    GameInputFamilyI8042 = 4
};
#define GameInputFamilyAggregate GAMEINPUT_NAME(GameInputFamilyAggregate)
#define GameInputFamilyUnknown GAMEINPUT_NAME(GameInputFamilyUnknown)
enum GameInputDeviceCapabilities {
    GameInputDeviceCapabilityNone = 0x0,
    GameInputDeviceCapabilityAudio = 0x1,
    GameInputDeviceCapabilityPluginModule = 0x2,
    GameInputDeviceCapabilityPowerOff = 0x4,
    GameInputDeviceCapabilitySynchronization = 0x8,
    GameInputDeviceCapabilityWireless = 0x10
};
enum GameInputRawDeviceReportKind {
    GameInputRawInputReport = 0,
    GameInputRawOutputReport = 1,
    GameInputRawFeatureReport_v0 = 2
};
#define GameInputRawFeatureReport GAMEINPUT_NAME(GameInputRawFeatureReport)
enum GameInputRawDeviceReportItemFlags {
    GameInputDefaultItem = 0x0,
    GameInputConstantItem = 0x1,
    GameInputArrayItem = 0x2,
    GameInputRelativeItem = 0x4,
    GameInputWraparoundItem = 0x8,
    GameInputNonlinearItem = 0x10,
    GameInputStableItem = 0x20,
    GameInputNullableItem = 0x40,
    GameInputVolatileItem = 0x80,
    GameInputBufferedItem = 0x100
};
enum GameInputRawDeviceItemCollectionKind {
    GameInputUnknownItemCollection = -1,
    GameInputPhysicalItemCollection = 0,
    GameInputApplicationItemCollection = 1,
    GameInputLogicalItemCollection = 2,
    GameInputReportItemCollection = 3,
    GameInputNamedArrayItemCollection = 4,
    GameInputUsageSwitchItemCollection = 5,
    GameInputUsageModifierItemCollection = 6
};
enum GameInputRawDevicePhysicalUnitKind {
    GameInputPhysicalUnitUnknown = -1,
    GameInputPhysicalUnitNone = 0,
    GameInputPhysicalUnitTime = 1,
    GameInputPhysicalUnitFrequency = 2,
    GameInputPhysicalUnitLength = 3,
    GameInputPhysicalUnitVelocity = 4,
    GameInputPhysicalUnitAcceleration = 5,
    GameInputPhysicalUnitMass = 6,
    GameInputPhysicalUnitMomentum = 7,
    GameInputPhysicalUnitForce = 8,
    GameInputPhysicalUnitPressure = 9,
    GameInputPhysicalUnitAngle = 10,
    GameInputPhysicalUnitAngularVelocity = 11,
    GameInputPhysicalUnitAngularAcceleration = 12,
    GameInputPhysicalUnitAngularMass = 13,
    GameInputPhysicalUnitAngularMomentum = 14,
    GameInputPhysicalUnitAngularTorque = 15,
    GameInputPhysicalUnitElectricCurrent = 16,
    GameInputPhysicalUnitElectricCharge = 17,
    GameInputPhysicalUnitElectricPotential = 18,
    GameInputPhysicalUnitEnergy = 19,
    GameInputPhysicalUnitPower = 20,
    GameInputPhysicalUnitTemperature = 21,
    GameInputPhysicalUnitLuminousIntensity = 22,
    GameInputPhysicalUnitLuminousFlux = 23,
    GameInputPhysicalUnitIlluminance = 24
};
enum GameInputLabel {
    GameInputLabelUnknown = -1,
    GameInputLabelNone = 0,
    GameInputLabelXboxGuide = 1,
    GameInputLabelXboxBack = 2,
    GameInputLabelXboxStart = 3,
    GameInputLabelXboxMenu = 4,
    GameInputLabelXboxView = 5,
    GameInputLabelXboxA = 7,
    GameInputLabelXboxB = 8,
    GameInputLabelXboxX = 9,
    GameInputLabelXboxY = 10,
    GameInputLabelXboxDPadUp = 11,
    GameInputLabelXboxDPadDown = 12,
    GameInputLabelXboxDPadLeft = 13,
    GameInputLabelXboxDPadRight = 14,
    GameInputLabelXboxLeftShoulder = 15,
    GameInputLabelXboxLeftTrigger = 16,
    GameInputLabelXboxLeftStickButton = 17,
    GameInputLabelXboxRightShoulder = 18,
    GameInputLabelXboxRightTrigger = 19,
    GameInputLabelXboxRightStickButton = 20,
    GameInputLabelXboxPaddle1 = 21,
    GameInputLabelXboxPaddle2 = 22,
    GameInputLabelXboxPaddle3 = 23,
    GameInputLabelXboxPaddle4 = 24,
    GameInputLabelLetterA = 25,
    GameInputLabelLetterB = 26,
    GameInputLabelLetterC = 27,
    GameInputLabelLetterD = 28,
    GameInputLabelLetterE = 29,
    GameInputLabelLetterF = 30,
    GameInputLabelLetterG = 31,
    GameInputLabelLetterH = 32,
    GameInputLabelLetterI = 33,
    GameInputLabelLetterJ = 34,
    GameInputLabelLetterK = 35,
    GameInputLabelLetterL = 36,
    GameInputLabelLetterM = 37,
    GameInputLabelLetterN = 38,
    GameInputLabelLetterO = 39,
    GameInputLabelLetterP = 40,
    GameInputLabelLetterQ = 41,
    GameInputLabelLetterR = 42,
    GameInputLabelLetterS = 43,
    GameInputLabelLetterT = 44,
    GameInputLabelLetterU = 45,
    GameInputLabelLetterV = 46,
    GameInputLabelLetterW = 47,
    GameInputLabelLetterX = 48,
    GameInputLabelLetterY = 49,
    GameInputLabelLetterZ = 50,
    GameInputLabelNumber0 = 51,
    GameInputLabelNumber1 = 52,
    GameInputLabelNumber2 = 53,
    GameInputLabelNumber3 = 54,
    GameInputLabelNumber4 = 55,
    GameInputLabelNumber5 = 56,
    GameInputLabelNumber6 = 57,
    GameInputLabelNumber7 = 58,
    GameInputLabelNumber8 = 59,
    GameInputLabelNumber9 = 60,
    GameInputLabelArrowUp = 61,
    GameInputLabelArrowUpRight = 62,
    GameInputLabelArrowRight = 63,
    GameInputLabelArrowDownRight = 64,
    GameInputLabelArrowDown = 65,
    GameInputLabelArrowDownLLeft = 66,
    GameInputLabelArrowLeft = 67,
    GameInputLabelArrowUpLeft = 68,
    GameInputLabelArrowUpDown = 69,
    GameInputLabelArrowLeftRight = 70,
    GameInputLabelArrowUpDownLeftRight = 71,
    GameInputLabelArrowClockwise = 72,
    GameInputLabelArrowCounterClockwise = 73,
    GameInputLabelArrowReturn = 74,
    GameInputLabelIconBranding = 75,
    GameInputLabelIconHome = 76,
    GameInputLabelIconMenu = 77,
    GameInputLabelIconCross = 78,
    GameInputLabelIconCircle = 79,
    GameInputLabelIconSquare = 80,
    GameInputLabelIconTriangle = 81,
    GameInputLabelIconStar = 82,
    GameInputLabelIconDPadUp = 83,
    GameInputLabelIconDPadDown = 84,
    GameInputLabelIconDPadLeft = 85,
    GameInputLabelIconDPadRight = 86,
    GameInputLabelIconDialClockwise = 87,
    GameInputLabelIconDialCounterClockwise = 88,
    GameInputLabelIconSliderLeftRight = 89,
    GameInputLabelIconSliderUpDown = 90,
    GameInputLabelIconWheelUpDown = 91,
    GameInputLabelIconPlus = 92,
    GameInputLabelIconMinus = 93,
    GameInputLabelIconSuspension = 94,
    GameInputLabelHome = 95,
    GameInputLabelGuide = 96,
    GameInputLabelMode = 97,
    GameInputLabelSelect = 98,
    GameInputLabelMenu = 99,
    GameInputLabelView = 100,
    GameInputLabelBack = 101,
    GameInputLabelStart = 102,
    GameInputLabelOptions = 103,
    GameInputLabelShare = 104,
    GameInputLabelUp = 105,
    GameInputLabelDown = 106,
    GameInputLabelLeft = 107,
    GameInputLabelRight = 108,
    GameInputLabelLB = 109,
    GameInputLabelLT = 110,
    GameInputLabelLSB = 111,
    GameInputLabelL1 = 112,
    GameInputLabelL2 = 113,
    GameInputLabelL3 = 114,
    GameInputLabelRB = 115,
    GameInputLabelRT = 116,
    GameInputLabelRSB = 117,
    GameInputLabelR1 = 118,
    GameInputLabelR2 = 119,
    GameInputLabelR3 = 120,
    GameInputLabelP1_v0 = 121,
    GameInputLabelP1_v1 = GameInputLabelP1_v0,
    GameInputLabelP1_v2 = GameInputLabelP1_v0,
    GameInputLabelP2_v0 = 122,
    GameInputLabelP2_v1 = GameInputLabelP2_v0,
    GameInputLabelP2_v2 = GameInputLabelP2_v0,
    GameInputLabelP3_v0 = 123,
    GameInputLabelP3_v1 = GameInputLabelP3_v0,
    GameInputLabelP3_v2 = GameInputLabelP3_v0,
    GameInputLabelP4_v0 = 124,
    GameInputLabelP4_v1 = GameInputLabelP4_v0,
    GameInputLabelP4_v2 = GameInputLabelP4_v0,
    GameInputLabelPaddleLeft1_v3 = 121,
    GameInputLabelPaddleLeft2_v3 = 122,
    GameInputLabelPaddleRight1_v3 = 123,
    GameInputLabelPaddleRight2_v3 = 124
};
#define GameInputLabelP1 GAMEINPUT_NAME(GameInputLabelP1)
#define GameInputLabelP2 GAMEINPUT_NAME(GameInputLabelP2)
#define GameInputLabelP3 GAMEINPUT_NAME(GameInputLabelP3)
#define GameInputLabelP4 GAMEINPUT_NAME(GameInputLabelP4)
#define GameInputLabelPaddleLeft1 GAMEINPUT_NAME(GameInputLabelPaddleLeft1)
#define GameInputLabelPaddleLeft2 GAMEINPUT_NAME(GameInputLabelPaddleLeft2)
#define GameInputLabelPaddleRight1 GAMEINPUT_NAME(GameInputLabelPaddleRight1)
#define GameInputLabelPaddleRight2 GAMEINPUT_NAME(GameInputLabelPaddleRight2)
enum GameInputLocation {
    GameInputLocationUnknown = -1,
    GameInputLocationChassis = 0,
    GameInputLocationDisplay = 1,
    GameInputLocationAxis = 2,
    GameInputLocationButton = 3,
    GameInputLocationSwitch = 4,
    GameInputLocationKey = 5,
    GameInputLocationTouchPad = 6
};
enum GameInputFeedbackAxes {
    GameInputFeedbackAxisNone = 0x0,
    GameInputFeedbackAxisLinearX = 0x1,
    GameInputFeedbackAxisLinearY = 0x2,
    GameInputFeedbackAxisLinearZ = 0x4,
    GameInputFeedbackAxisAngularX = 0x8,
    GameInputFeedbackAxisAngularY = 0x10,
    GameInputFeedbackAxisAngularZ = 0x20,
    GameInputFeedbackAxisNormal = 0x40
};
enum GameInputFeedbackEffectState {
    GameInputFeedbackStopped = 0,
    GameInputFeedbackRunning = 1,
    GameInputFeedbackPaused = 2
};
enum GameInputForceFeedbackEffectKind {
    GameInputForceFeedbackConstant = 0,
    GameInputForceFeedbackRamp = 1,
    GameInputForceFeedbackSineWave = 2,
    GameInputForceFeedbackSquareWave = 3,
    GameInputForceFeedbackTriangleWave = 4,
    GameInputForceFeedbackSawtoothUpWave = 5,
    GameInputForceFeedbackSawtoothDownWave = 6,
    GameInputForceFeedbackSpring = 7,
    GameInputForceFeedbackFriction = 8,
    GameInputForceFeedbackDamper = 9,
    GameInputForceFeedbackInertia = 10
};
enum GameInputRumbleMotors {
    GameInputRumbleNone = 0x0,
    GameInputRumbleLowFrequency = 0x1,
    GameInputRumbleHighFrequency = 0x2,
    GameInputRumbleLeftTrigger = 0x4,
    GameInputRumbleRightTrigger = 0x8
};
enum GameInputElementKind {
    GameInputElementKindNone = 0,
    GameInputElementKindAxis = 1,
    GameInputElementKindButton = 2,
    GameInputElementKindSwitch = 3
};
struct GameInputKeyState {
    uint32_t scanCode;
    uint32_t codePoint;
    uint8_t virtualKey;
    bool isDeadKey;
};
struct GameInputMouseState_v0 {
    GameInputMouseButtons buttons;
    int64_t positionX;
    int64_t positionY;
    int64_t wheelX;
    int64_t wheelY;
};
struct GameInputMouseState_v1 {
    GameInputMouseButtons buttons;
    GameInputMousePositions positions;
    int64_t positionX;
    int64_t positionY;
    int64_t absolutePositionX;
    int64_t absolutePositionY;
    int64_t wheelX;
    int64_t wheelY;
};
struct GameInputTouchState {
    uint64_t touchId;
    uint32_t sensorIndex;
    float positionX;
    float positionY;
    float pressure;
    float proximity;
    float contactRectTop;
    float contactRectLeft;
    float contactRectRight;
    float contactRectBottom;
};
struct GameInputMotionState {
    float accelerationX;
    float accelerationY;
    float accelerationZ;
    float angularVelocityX;
    float angularVelocityY;
    float angularVelocityZ;
    float magneticFieldX;
    float magneticFieldY;
    float magneticFieldZ;
    float orientationW;
    float orientationX;
    float orientationY;
    float orientationZ;
    GameInputMotionAccuracy accelerometerAccuracy;
    GameInputMotionAccuracy gyroscopeAccuracy;
    GameInputMotionAccuracy magnetometerAccuracy;
    GameInputMotionAccuracy orientationAccuracy;
};
struct GameInputVersion {
    uint16_t major;
    uint16_t minor;
    uint16_t build;
    uint16_t revision;
};
struct GameInputSensorsState {
    float accelerationInGX;
    float accelerationInGY;
    float accelerationInGZ;
    float angularVelocityInRadPerSecX;
    float angularVelocityInRadPerSecY;
    float angularVelocityInRadPerSecZ;
    float headingInDegreesFromMagneticNorth;
    GameInputSensorAccuracy headingAccuracy;
    float orientationW;
    float orientationX;
    float orientationY;
    float orientationZ;
};
struct GameInputArcadeStickState {
    GameInputArcadeStickButtons buttons;
};
struct GameInputFlightStickState {
    GameInputFlightStickButtons buttons;
    GameInputSwitchPosition hatSwitch;
    float roll;
    float pitch;
    float yaw;
    float throttle;
};
struct GameInputGamepadState {
    GameInputGamepadButtons buttons;
    float leftTrigger;
    float rightTrigger;
    float leftThumbstickX;
    float leftThumbstickY;
    float rightThumbstickX;
    float rightThumbstickY;
};
struct GameInputRacingWheelState {
    GameInputRacingWheelButtons buttons;
    int32_t patternShifterGear;
    float wheel;
    float throttle;
    float brake;
    float clutch;
    float handbrake;
};
struct GameInputUiNavigationState {
    GameInputUiNavigationButtons buttons;
};
struct GameInputBatteryState {
    float chargeRate;
    float maxChargeRate;
    float remainingCapacity;
    float fullChargeCapacity;
    GameInputBatteryStatus status;
};
struct GameInputString {
    uint32_t sizeInBytes;
    uint32_t codePointCount;
    const char *data;
};
struct GameInputUsage {
    uint16_t page;
    uint16_t id;
};
struct GameInputRawDeviceItemCollectionInfo {
    GameInputRawDeviceItemCollectionKind kind;
    uint32_t childCount;
    uint32_t siblingCount;
    uint32_t usageCount;
    const GameInputUsage *usages;
    const GameInputRawDeviceItemCollectionInfo *parent;
    const GameInputRawDeviceItemCollectionInfo *firstSibling;
    const GameInputRawDeviceItemCollectionInfo *previousSibling;
    const GameInputRawDeviceItemCollectionInfo *nextSibling;
    const GameInputRawDeviceItemCollectionInfo *lastSibling;
    const GameInputRawDeviceItemCollectionInfo *firstChild;
    const GameInputRawDeviceItemCollectionInfo *lastChild;
};
struct GameInputRawDeviceReportItemInfo {
    uint32_t bitOffset;
    uint32_t bitSize;
    int64_t logicalMin;
    int64_t logicalMax;
    double physicalMin;
    double physicalMax;
    GameInputRawDevicePhysicalUnitKind physicalUnits;
    uint32_t rawPhysicalUnits;
    int32_t rawPhysicalUnitsExponent;
    GameInputRawDeviceReportItemFlags flags;
    uint32_t usageCount;
    const GameInputUsage *usages;
    const GameInputRawDeviceItemCollectionInfo *collection;
    const GameInputString *itemString;
};
struct GameInputRawDeviceReportInfo_v0 {
    GameInputRawDeviceReportKind kind;
    uint32_t id;
    uint32_t size;
    uint32_t itemCount;
    const GameInputRawDeviceReportItemInfo *items;
};
struct GameInputRawDeviceReportInfo_v3 {
    GameInputRawDeviceReportKind kind;
    uint32_t id;
    uint32_t size;
};
struct GameInputControllerAxisInfo_v0 {
    GameInputKind mappedInputKinds;
    GameInputLabel label;
    bool isContinuous;
    bool isNonlinear;
    bool isQuantized;
    bool hasRestValue;
    float restValue;
    uint64_t resolution;
    uint16_t legacyDInputIndex;
    uint16_t legacyHidIndex;
    uint32_t rawReportIndex;
    const GameInputRawDeviceReportInfo_v0 *inputReport;
    const GameInputRawDeviceReportItemInfo *inputReportItem;
};
struct GameInputControllerAxisInfo_v1 {
    GameInputKind mappedInputKinds;
    GameInputLabel label;
};
struct GameInputControllerButtonInfo_v0 {
    GameInputKind mappedInputKinds;
    GameInputLabel label;
    uint16_t legacyDInputIndex;
    uint16_t legacyHidIndex;
    uint32_t rawReportIndex;
    const GameInputRawDeviceReportInfo_v0 *inputReport;
    const GameInputRawDeviceReportItemInfo *inputReportItem;
};
struct GameInputControllerButtonInfo_v1 {
    GameInputKind mappedInputKinds;
    GameInputLabel label;
};
struct GameInputControllerSwitchInfo_v0 {
    GameInputKind mappedInputKinds;
    GameInputLabel label;
    GameInputLabel positionLabels[9];
    GameInputSwitchKind kind;
    uint16_t legacyDInputIndex;
    uint16_t legacyHidIndex;
    uint32_t rawReportIndex;
    const GameInputRawDeviceReportInfo_v0 *inputReport;
    const GameInputRawDeviceReportItemInfo *inputReportItem;
};
struct GameInputControllerSwitchInfo_v1 {
    GameInputKind mappedInputKinds;
    GameInputLabel label;
    GameInputSwitchKind kind;
};
#define GAMEINPUT_MAX_SWITCH_STATES (8)

struct GameInputControllerSwitchInfo_v3 {
    GameInputLabel labels[8];
    GameInputSwitchKind kind;
};
struct GameInputControllerInfo {
    uint32_t controllerAxisCount;
    const GameInputLabel *controllerAxisLabels;
    uint32_t controllerButtonCounts;
    const GameInputLabel *controllerButtonLabels;
    uint32_t controllerSwitchCounts;
    const GameInputControllerSwitchInfo_v3 *controllerSwitchInfo;
};
struct GameInputKeyboardInfo_v0 {
    GameInputKeyboardKind kind;
    uint32_t layout;
    uint32_t keyCount;
    uint32_t functionKeyCount;
    uint32_t maxSimultaneousKeys;
    uint32_t platformType;
    uint32_t platformSubtype;
    const GameInputString *nativeLanguage;
};
struct GameInputKeyboardInfo_v1 {
    GameInputKeyboardKind kind;
    uint32_t layout;
    uint32_t keyCount;
    uint32_t functionKeyCount;
    uint32_t maxSimultaneousKeys;
    uint32_t platformType;
    uint32_t platformSubtype;
};
struct GameInputMouseInfo_v0 {
    GameInputMouseButtons supportedButtons;
    uint32_t sampleRate;
    uint32_t sensorDpi;
    bool hasWheelX;
    bool hasWheelY;
};
struct GameInputMouseInfo_v1 {
    GameInputMouseButtons supportedButtons;
    uint32_t sampleRate;
    bool hasWheelX;
    bool hasWheelY;
};
struct GameInputTouchSensorInfo {
    GameInputKind mappedInputKinds;
    GameInputLabel label;
    GameInputLocation location;
    uint32_t locationId;
    uint64_t resolutionX;
    uint64_t resolutionY;
    GameInputTouchShape shape;
    float aspectRatio;
    float orientation;
    float physicalWidth;
    float physicalHeight;
    float maxPressure;
    float maxProximity;
    uint32_t maxTouchPoints;
};
struct GameInputMotionInfo {
    float maxAcceleration;
    float maxAngularVelocity;
    float maxMagneticFieldStrength;
};
struct GameInputSensorsInfo {
    GameInputSensorsKind supportedSensors;
};
struct GameInputArcadeStickInfo_v0 {
    GameInputLabel menuButtonLabel;
    GameInputLabel viewButtonLabel;
    GameInputLabel stickUpLabel;
    GameInputLabel stickDownLabel;
    GameInputLabel stickLeftLabel;
    GameInputLabel stickRightLabel;
    GameInputLabel actionButton1Label;
    GameInputLabel actionButton2Label;
    GameInputLabel actionButton3Label;
    GameInputLabel actionButton4Label;
    GameInputLabel actionButton5Label;
    GameInputLabel actionButton6Label;
    GameInputLabel specialButton1Label;
    GameInputLabel specialButton2Label;
};
struct GameInputArcadeStickInfo_v3 {
    GameInputLabel menuButtonLabel;
    GameInputLabel viewButtonLabel;
    GameInputLabel stickUpLabel;
    GameInputLabel stickDownLabel;
    GameInputLabel stickLeftLabel;
    GameInputLabel stickRightLabel;
    GameInputLabel actionButton1Label;
    GameInputLabel actionButton2Label;
    GameInputLabel actionButton3Label;
    GameInputLabel actionButton4Label;
    GameInputLabel actionButton5Label;
    GameInputLabel actionButton6Label;
    GameInputLabel specialButton1Label;
    GameInputLabel specialButton2Label;
    uint32_t extraButtonCount;
    uint32_t extraAxisCount;
};
struct GameInputFlightStickInfo_v0 {
    GameInputLabel menuButtonLabel;
    GameInputLabel viewButtonLabel;
    GameInputLabel firePrimaryButtonLabel;
    GameInputLabel fireSecondaryButtonLabel;
    GameInputSwitchKind hatSwitchKind;
};
struct GameInputFlightStickInfo_v3 {
    GameInputLabel menuButtonLabel;
    GameInputLabel viewButtonLabel;
    GameInputLabel firePrimaryButtonLabel;
    GameInputLabel fireSecondaryButtonLabel;
    GameInputLabel hatSwitchUpLabel;
    GameInputLabel hatSwitchDownLabel;
    GameInputLabel hatSwitchLeftLabel;
    GameInputLabel hatSwitchRightLabel;
    GameInputLabel aButtonLabel;
    GameInputLabel bButtonLabel;
    GameInputLabel xButtonLabel;
    GameInputLabel yButtonLabel;
    GameInputLabel leftShoulderButtonLabel;
    GameInputLabel rightShoulderButtonLabel;
    uint32_t extraButtonCount;
    uint32_t extraAxisCount;
};
struct GameInputGamepadInfo_v0 {
    GameInputLabel menuButtonLabel;
    GameInputLabel viewButtonLabel;
    GameInputLabel aButtonLabel;
    GameInputLabel bButtonLabel;
    GameInputLabel xButtonLabel;
    GameInputLabel yButtonLabel;
    GameInputLabel dpadUpLabel;
    GameInputLabel dpadDownLabel;
    GameInputLabel dpadLeftLabel;
    GameInputLabel dpadRightLabel;
    GameInputLabel leftShoulderButtonLabel;
    GameInputLabel rightShoulderButtonLabel;
    GameInputLabel leftThumbstickButtonLabel;
    GameInputLabel rightThumbstickButtonLabel;
};
struct GameInputGamepadInfo_v3 {
    GameInputGamepadButtons supportedLayout;
    GameInputLabel menuButtonLabel;
    GameInputLabel viewButtonLabel;
    GameInputLabel aButtonLabel;
    GameInputLabel bButtonLabel;
    GameInputLabel cButtonLabel;
    GameInputLabel xButtonLabel;
    GameInputLabel yButtonLabel;
    GameInputLabel zButtonLabel;
    GameInputLabel dpadUpLabel;
    GameInputLabel dpadDownLabel;
    GameInputLabel dpadLeftLabel;
    GameInputLabel dpadRightLabel;
    GameInputLabel leftShoulderButtonLabel;
    GameInputLabel rightShoulderButtonLabel;
    GameInputLabel leftThumbstickButtonLabel;
    GameInputLabel rightThumbstickButtonLabel;
    uint32_t extraButtonCount;
    uint32_t extraAxisCount;
};
struct GameInputRacingWheelInfo_v0 {
    GameInputLabel menuButtonLabel;
    GameInputLabel viewButtonLabel;
    GameInputLabel previousGearButtonLabel;
    GameInputLabel nextGearButtonLabel;
    GameInputLabel dpadUpLabel;
    GameInputLabel dpadDownLabel;
    GameInputLabel dpadLeftLabel;
    GameInputLabel dpadRightLabel;
    bool hasClutch;
    bool hasHandbrake;
    bool hasPatternShifter;
    int32_t minPatternShifterGear;
    int32_t maxPatternShifterGear;
    float maxWheelAngle;
};
struct GameInputRacingWheelInfo_v3 {
    GameInputLabel menuButtonLabel;
    GameInputLabel viewButtonLabel;
    GameInputLabel previousGearButtonLabel;
    GameInputLabel nextGearButtonLabel;
    GameInputLabel dpadUpLabel;
    GameInputLabel dpadDownLabel;
    GameInputLabel dpadLeftLabel;
    GameInputLabel dpadRightLabel;
    GameInputLabel aButtonLabel;
    GameInputLabel bButtonLabel;
    GameInputLabel xButtonLabel;
    GameInputLabel yButtonLabel;
    GameInputLabel leftThumbstickButtonLabel;
    GameInputLabel rightThumbstickButtonLabel;
    bool hasClutch;
    bool hasHandbrake;
    bool hasPatternShifter;
    int32_t minPatternShifterGear;
    int32_t maxPatternShifterGear;
    float maxWheelAngle;
    uint32_t extraButtonCount;
    uint32_t extraAxisCount;
};
struct GameInputUiNavigationInfo {
    GameInputLabel menuButtonLabel;
    GameInputLabel viewButtonLabel;
    GameInputLabel acceptButtonLabel;
    GameInputLabel cancelButtonLabel;
    GameInputLabel upButtonLabel;
    GameInputLabel downButtonLabel;
    GameInputLabel leftButtonLabel;
    GameInputLabel rightButtonLabel;
    GameInputLabel contextButton1Label;
    GameInputLabel contextButton2Label;
    GameInputLabel contextButton3Label;
    GameInputLabel contextButton4Label;
    GameInputLabel pageUpButtonLabel;
    GameInputLabel pageDownButtonLabel;
    GameInputLabel pageLeftButtonLabel;
    GameInputLabel pageRightButtonLabel;
    GameInputLabel scrollUpButtonLabel;
    GameInputLabel scrollDownButtonLabel;
    GameInputLabel scrollLeftButtonLabel;
    GameInputLabel scrollRightButtonLabel;
    GameInputLabel guideButtonLabel;
};
struct GameInputForceFeedbackMotorInfo_v0 {
    GameInputFeedbackAxes supportedAxes;
    GameInputLocation location;
    uint32_t locationId;
    uint32_t maxSimultaneousEffects;
    bool isConstantEffectSupported;
    bool isRampEffectSupported;
    bool isSineWaveEffectSupported;
    bool isSquareWaveEffectSupported;
    bool isTriangleWaveEffectSupported;
    bool isSawtoothUpWaveEffectSupported;
    bool isSawtoothDownWaveEffectSupported;
    bool isSpringEffectSupported;
    bool isFrictionEffectSupported;
    bool isDamperEffectSupported;
    bool isInertiaEffectSupported;
};
struct GameInputForceFeedbackMotorInfo_v1 {
    GameInputFeedbackAxes supportedAxes;
    bool isConstantEffectSupported;
    bool isRampEffectSupported;
    bool isSineWaveEffectSupported;
    bool isSquareWaveEffectSupported;
    bool isTriangleWaveEffectSupported;
    bool isSawtoothUpWaveEffectSupported;
    bool isSawtoothDownWaveEffectSupported;
    bool isSpringEffectSupported;
    bool isFrictionEffectSupported;
    bool isDamperEffectSupported;
    bool isInertiaEffectSupported;
};
struct GameInputHapticWaveformInfo {
    GameInputUsage usage;
    bool isDurationSupported;
    bool isIntensitySupported;
    bool isRepeatSupported;
    bool isRepeatDelaySupported;
    uint64_t defaultDuration;
};
struct GameInputHapticFeedbackMotorInfo {
    GameInputRumbleMotors mappedRumbleMotors;
    GameInputLocation location;
    uint32_t locationId;
    uint32_t waveformCount;
    const GameInputHapticWaveformInfo *waveformInfo;
};
struct GameInputDeviceInfo_v0 {
    uint32_t infoSize;
    uint16_t vendorId;
    uint16_t productId;
    uint16_t revisionNumber;
    uint8_t interfaceNumber;
    uint8_t collectionNumber;
    GameInputUsage usage;
    GameInputVersion hardwareVersion;
    GameInputVersion firmwareVersion;
    APP_LOCAL_DEVICE_ID deviceId;
    APP_LOCAL_DEVICE_ID deviceRootId;
    GameInputDeviceFamily deviceFamily;
    GameInputDeviceCapabilities capabilities;
    GameInputKind supportedInput;
    GameInputRumbleMotors supportedRumbleMotors;
    uint32_t inputReportCount;
    uint32_t outputReportCount;
    uint32_t featureReportCount;
    uint32_t controllerAxisCount;
    uint32_t controllerButtonCount;
    uint32_t controllerSwitchCount;
    uint32_t touchPointCount;
    uint32_t touchSensorCount;
    uint32_t forceFeedbackMotorCount;
    uint32_t hapticFeedbackMotorCount;
    uint32_t deviceStringCount;
    uint32_t deviceDescriptorSize;
    const GameInputRawDeviceReportInfo_v0 *inputReportInfo;
    const GameInputRawDeviceReportInfo_v0 *outputReportInfo;
    const GameInputRawDeviceReportInfo_v0 *featureReportInfo;
    const GameInputControllerAxisInfo_v0 *controllerAxisInfo;
    const GameInputControllerButtonInfo_v0 *controllerButtonInfo;
    const GameInputControllerSwitchInfo_v0 *controllerSwitchInfo;
    const GameInputKeyboardInfo_v0 *keyboardInfo;
    const GameInputMouseInfo_v0 *mouseInfo;
    const GameInputTouchSensorInfo *touchSensorInfo;
    const GameInputMotionInfo *motionInfo;
    const GameInputArcadeStickInfo_v0 *arcadeStickInfo;
    const GameInputFlightStickInfo_v0 *flightStickInfo;
    const GameInputGamepadInfo_v0 *gamepadInfo;
    const GameInputRacingWheelInfo_v0 *racingWheelInfo;
    const GameInputUiNavigationInfo *uiNavigationInfo;
    const GameInputForceFeedbackMotorInfo_v0 *forceFeedbackMotorInfo;
    const GameInputHapticFeedbackMotorInfo *hapticFeedbackMotorInfo;
    const GameInputString *displayName;
    const GameInputString *deviceStrings;
    const void *deviceDescriptorData;
    GameInputSystemButtons supportedSystemButtons;
};
struct GameInputDeviceInfo_v1 {
    uint16_t vendorId;
    uint16_t productId;
    GameInputUsage usage;
    APP_LOCAL_DEVICE_ID deviceId;
    APP_LOCAL_DEVICE_ID deviceRootId;
    GameInputDeviceFamily deviceFamily;
    GameInputKind supportedInput;
    GameInputRumbleMotors supportedRumbleMotors;
    GameInputSystemButtons supportedSystemButtons;
    const char *displayName;
    const char *pnpPath;
    const GameInputKeyboardInfo_v1 *keyboardInfo;
    const GameInputMouseInfo_v1 *mouseInfo;
    const GameInputArcadeStickInfo_v1 *arcadeStickInfo;
    const GameInputFlightStickInfo_v1 *flightStickInfo;
    const GameInputGamepadInfo_v1 *gamepadInfo;
    const GameInputRacingWheelInfo_v1 *racingWheelInfo;
    const GameInputUiNavigationInfo *uiNavigationInfo;
    uint32_t controllerAxisCount;
    const GameInputControllerAxisInfo_v1 *controllerAxisInfo;
    uint32_t controllerButtonCount;
    const GameInputControllerButtonInfo_v1 *controllerButtonInfo;
    uint32_t controllerSwitchCount;
    const GameInputControllerSwitchInfo_v1 *controllerSwitchInfo;
    uint32_t forceFeedbackMotorCount;
    const GameInputForceFeedbackMotorInfo_v1 *forceFeedbackMotorInfo;
};
struct GameInputDeviceInfo_v2 {
    uint16_t vendorId;
    uint16_t productId;
    uint16_t revisionNumber;
    GameInputUsage usage;
    GameInputVersion hardwareVersion;
    GameInputVersion firmwareVersion;
    APP_LOCAL_DEVICE_ID deviceId;
    APP_LOCAL_DEVICE_ID deviceRootId;
    GameInputDeviceFamily deviceFamily;
    GameInputKind supportedInput;
    GameInputRumbleMotors supportedRumbleMotors;
    GameInputSystemButtons supportedSystemButtons;
    GUID containerId;
    const char *displayName;
    const char *pnpPath;
    const GameInputKeyboardInfo_v2 *keyboardInfo;
    const GameInputMouseInfo_v2 *mouseInfo;
    const GameInputSensorsInfo *sensorsInfo;
    const GameInputArcadeStickInfo_v2 *arcadeStickInfo;
    const GameInputFlightStickInfo_v2 *flightStickInfo;
    const GameInputGamepadInfo_v2 *gamepadInfo;
    const GameInputRacingWheelInfo_v2 *racingWheelInfo;
    const GameInputUiNavigationInfo *uiNavigationInfo;
    uint32_t controllerAxisCount;
    const GameInputControllerAxisInfo_v2 *controllerAxisInfo;
    uint32_t controllerButtonCount;
    const GameInputControllerButtonInfo_v2 *controllerButtonInfo;
    uint32_t controllerSwitchCount;
    const GameInputControllerSwitchInfo_v2 *controllerSwitchInfo;
    uint32_t forceFeedbackMotorCount;
    const GameInputForceFeedbackMotorInfo_v2 *forceFeedbackMotorInfo;
};
struct GameInputDeviceInfo_v3 {
    uint16_t vendorId;
    uint16_t productId;
    uint16_t revisionNumber;
    GameInputUsage usage;
    GameInputVersion hardwareVersion;
    GameInputVersion firmwareVersion;
    APP_LOCAL_DEVICE_ID deviceId;
    APP_LOCAL_DEVICE_ID deviceRootId;
    GameInputDeviceFamily deviceFamily;
    GameInputKind supportedInput;
    GameInputRumbleMotors supportedRumbleMotors;
    GameInputSystemButtons supportedSystemButtons;
    GUID containerId;
    const char *displayName;
    const char *pnpPath;
    const GameInputKeyboardInfo_v3 *keyboardInfo;
    const GameInputMouseInfo_v3 *mouseInfo;
    const GameInputSensorsInfo *sensorsInfo;
    const GameInputControllerInfo *controllerInfo;
    const GameInputArcadeStickInfo_v3 *arcadeStickInfo;
    const GameInputFlightStickInfo_v3 *flightStickInfo;
    const GameInputGamepadInfo_v3 *gamepadInfo;
    const GameInputRacingWheelInfo_v3 *racingWheelInfo;
    uint32_t forceFeedbackMotorCount;
    const GameInputForceFeedbackMotorInfo_v3 *forceFeedbackMotorInfo;
    uint32_t inputReportCount;
    const GameInputRawDeviceReportInfo_v3 *inputReportInfo;
    uint32_t outputReportCount;
    const GameInputRawDeviceReportInfo_v3 *outputReportInfo;
};
struct GameInputHapticInfo {
    wchar_t audioEndpointId[256];
    uint32_t locationCount;
    GUID locations[8];
};
struct GameInputForceFeedbackEnvelope {
    uint64_t attackDuration;
    uint64_t sustainDuration;
    uint64_t releaseDuration;
    float attackGain;
    float sustainGain;
    float releaseGain;
    uint32_t playCount;
    uint64_t repeatDelay;
};
struct GameInputForceFeedbackMagnitude {
    float linearX;
    float linearY;
    float linearZ;
    float angularX;
    float angularY;
    float angularZ;
    float normal;
};
struct GameInputForceFeedbackConditionParams {
    GameInputForceFeedbackMagnitude magnitude;
    float positiveCoefficient;
    float negativeCoefficient;
    float maxPositiveMagnitude;
    float maxNegativeMagnitude;
    float deadZone;
    float bias;
};
struct GameInputForceFeedbackConstantParams {
    GameInputForceFeedbackEnvelope envelope;
    GameInputForceFeedbackMagnitude magnitude;
};
struct GameInputForceFeedbackPeriodicParams {
    GameInputForceFeedbackEnvelope envelope;
    GameInputForceFeedbackMagnitude magnitude;
    float frequency;
    float phase;
    float bias;
};
struct GameInputForceFeedbackRampParams {
    GameInputForceFeedbackEnvelope envelope;
    GameInputForceFeedbackMagnitude startMagnitude;
    GameInputForceFeedbackMagnitude endMagnitude;
};
struct GameInputForceFeedbackParams {
    GameInputForceFeedbackEffectKind kind;
    union {
        GameInputForceFeedbackConstantParams constant;
        GameInputForceFeedbackRampParams ramp;
        GameInputForceFeedbackPeriodicParams sineWave;
        GameInputForceFeedbackPeriodicParams squareWave;
        GameInputForceFeedbackPeriodicParams triangleWave;
        GameInputForceFeedbackPeriodicParams sawtoothUpWave;
        GameInputForceFeedbackPeriodicParams sawtoothDownWave;
        GameInputForceFeedbackConditionParams spring;
        GameInputForceFeedbackConditionParams friction;
        GameInputForceFeedbackConditionParams damper;
        GameInputForceFeedbackConditionParams inertia;
    } data;
};
struct GameInputHapticFeedbackParams {
    uint32_t waveformIndex;
    uint64_t duration;
    float intensity;
    uint32_t playCount;
    uint64_t repeatDelay;
};
struct GameInputRumbleParams {
    float lowFrequency;
    float highFrequency;
    float leftTrigger;
    float rightTrigger;
};
struct GameInputAxisMapping {
    GameInputElementKind controllerElementKind;
    uint32_t controllerIndex;
    bool isInverted;
    bool fromTwoButtons;
    uint32_t buttonMinIndexValue;
    GameInputSwitchPosition referenceDirection;
};
struct GameInputButtonMapping {
    GameInputElementKind controllerElementKind;
    uint32_t controllerIndex;
    bool isInverted;
    GameInputSwitchPosition switchPosition;
};
/*****************************************************************************
 * IGameInput_v0 interface
 */
#ifndef __IGameInput_v0_INTERFACE_DEFINED__
#define __IGameInput_v0_INTERFACE_DEFINED__

DEFINE_GUID(IID_IGameInput_v0, 0x11be2a7e, 0x4254, 0x445a, 0x9c,0x09, 0xff,0xc4,0x0f,0x00,0x69,0x18);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("11be2a7e-4254-445a-9c09-ffc40f006918")
IGameInput_v0 : public IUnknown
{
    virtual uint64_t STDMETHODCALLTYPE GetCurrentTimestamp(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCurrentReading(
        GameInputKind kind,
        IGameInputDevice_v0 *device,
        IGameInputReading_v0 **reading) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetNextReading(
        IGameInputReading_v0 *reference,
        GameInputKind kind,
        IGameInputDevice_v0 *device,
        IGameInputReading_v0 **reading) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetPreviousReading(
        IGameInputReading_v0 *reference,
        GameInputKind kind,
        IGameInputDevice_v0 *device,
        IGameInputReading_v0 **reading) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetTemporalReading(
        uint64_t timestamp,
        IGameInputDevice_v0 *device,
        IGameInputReading_v0 **reading) = 0;

    virtual HRESULT STDMETHODCALLTYPE RegisterReadingCallback(
        IGameInputDevice_v0 *device,
        GameInputKind kind,
        float threshold,
        void *context,
        GameInputReadingCallback_v0 callback,
        GameInputCallbackToken *token) = 0;

    virtual HRESULT STDMETHODCALLTYPE RegisterDeviceCallback(
        IGameInputDevice_v0 *device,
        GameInputKind kind,
        GameInputDeviceStatus filter,
        GameInputEnumerationKind enum_kind,
        void *context,
        GameInputDeviceCallback_v0 callback,
        GameInputCallbackToken *token) = 0;

    virtual HRESULT STDMETHODCALLTYPE RegisterSystemButtonCallback(
        IGameInputDevice_v0 *device,
        GameInputSystemButtons filter,
        void *context,
        GameInputSystemButtonCallback_v0 callback,
        GameInputCallbackToken *token) = 0;

    virtual HRESULT STDMETHODCALLTYPE RegisterKeyboardLayoutCallback(
        IGameInputDevice_v0 *device,
        void *context,
        GameInputKeyboardLayoutCallback_v0 callback,
        GameInputCallbackToken *token) = 0;

    virtual void STDMETHODCALLTYPE StopCallback(
        GameInputCallbackToken token) = 0;

    virtual bool STDMETHODCALLTYPE UnregisterCallback(
        GameInputCallbackToken token,
        uint64_t timeout_ms) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateDispatcher(
        IGameInputDispatcher **dispatcher) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateAggregateDevice(
        GameInputKind kind,
        IGameInputDevice_v0 **device) = 0;

    virtual HRESULT STDMETHODCALLTYPE FindDeviceFromId(
        const APP_LOCAL_DEVICE_ID *value,
        IGameInputDevice_v0 **device) = 0;

    virtual HRESULT STDMETHODCALLTYPE FindDeviceFromObject(
        IUnknown *value,
        IGameInputDevice_v0 **device) = 0;

    virtual HRESULT STDMETHODCALLTYPE FindDeviceFromPlatformHandle(
        HANDLE value,
        IGameInputDevice_v0 **device) = 0;

    virtual HRESULT STDMETHODCALLTYPE FindDeviceFromPlatformString(
        const WCHAR *value,
        IGameInputDevice_v0 **device) = 0;

    virtual HRESULT STDMETHODCALLTYPE EnableOemDeviceSupport(
        uint16_t vid,
        uint16_t pid,
        uint8_t iface,
        uint8_t collection) = 0;

    virtual void STDMETHODCALLTYPE SetFocusPolicy(
        GameInputFocusPolicy policy) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IGameInput_v0, 0x11be2a7e, 0x4254, 0x445a, 0x9c,0x09, 0xff,0xc4,0x0f,0x00,0x69,0x18)
#endif
#else
typedef struct IGameInput_v0Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IGameInput_v0 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IGameInput_v0 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IGameInput_v0 *This);

    /*** IGameInput_v0 methods ***/
    uint64_t (STDMETHODCALLTYPE *GetCurrentTimestamp)(
        IGameInput_v0 *This);

    HRESULT (STDMETHODCALLTYPE *GetCurrentReading)(
        IGameInput_v0 *This,
        GameInputKind kind,
        IGameInputDevice_v0 *device,
        IGameInputReading_v0 **reading);

    HRESULT (STDMETHODCALLTYPE *GetNextReading)(
        IGameInput_v0 *This,
        IGameInputReading_v0 *reference,
        GameInputKind kind,
        IGameInputDevice_v0 *device,
        IGameInputReading_v0 **reading);

    HRESULT (STDMETHODCALLTYPE *GetPreviousReading)(
        IGameInput_v0 *This,
        IGameInputReading_v0 *reference,
        GameInputKind kind,
        IGameInputDevice_v0 *device,
        IGameInputReading_v0 **reading);

    HRESULT (STDMETHODCALLTYPE *GetTemporalReading)(
        IGameInput_v0 *This,
        uint64_t timestamp,
        IGameInputDevice_v0 *device,
        IGameInputReading_v0 **reading);

    HRESULT (STDMETHODCALLTYPE *RegisterReadingCallback)(
        IGameInput_v0 *This,
        IGameInputDevice_v0 *device,
        GameInputKind kind,
        float threshold,
        void *context,
        GameInputReadingCallback_v0 callback,
        GameInputCallbackToken *token);

    HRESULT (STDMETHODCALLTYPE *RegisterDeviceCallback)(
        IGameInput_v0 *This,
        IGameInputDevice_v0 *device,
        GameInputKind kind,
        GameInputDeviceStatus filter,
        GameInputEnumerationKind enum_kind,
        void *context,
        GameInputDeviceCallback_v0 callback,
        GameInputCallbackToken *token);

    HRESULT (STDMETHODCALLTYPE *RegisterSystemButtonCallback)(
        IGameInput_v0 *This,
        IGameInputDevice_v0 *device,
        GameInputSystemButtons filter,
        void *context,
        GameInputSystemButtonCallback_v0 callback,
        GameInputCallbackToken *token);

    HRESULT (STDMETHODCALLTYPE *RegisterKeyboardLayoutCallback)(
        IGameInput_v0 *This,
        IGameInputDevice_v0 *device,
        void *context,
        GameInputKeyboardLayoutCallback_v0 callback,
        GameInputCallbackToken *token);

    void (STDMETHODCALLTYPE *StopCallback)(
        IGameInput_v0 *This,
        GameInputCallbackToken token);

    bool (STDMETHODCALLTYPE *UnregisterCallback)(
        IGameInput_v0 *This,
        GameInputCallbackToken token,
        uint64_t timeout_ms);

    HRESULT (STDMETHODCALLTYPE *CreateDispatcher)(
        IGameInput_v0 *This,
        IGameInputDispatcher **dispatcher);

    HRESULT (STDMETHODCALLTYPE *CreateAggregateDevice)(
        IGameInput_v0 *This,
        GameInputKind kind,
        IGameInputDevice_v0 **device);

    HRESULT (STDMETHODCALLTYPE *FindDeviceFromId)(
        IGameInput_v0 *This,
        const APP_LOCAL_DEVICE_ID *value,
        IGameInputDevice_v0 **device);

    HRESULT (STDMETHODCALLTYPE *FindDeviceFromObject)(
        IGameInput_v0 *This,
        IUnknown *value,
        IGameInputDevice_v0 **device);

    HRESULT (STDMETHODCALLTYPE *FindDeviceFromPlatformHandle)(
        IGameInput_v0 *This,
        HANDLE value,
        IGameInputDevice_v0 **device);

    HRESULT (STDMETHODCALLTYPE *FindDeviceFromPlatformString)(
        IGameInput_v0 *This,
        const WCHAR *value,
        IGameInputDevice_v0 **device);

    HRESULT (STDMETHODCALLTYPE *EnableOemDeviceSupport)(
        IGameInput_v0 *This,
        uint16_t vid,
        uint16_t pid,
        uint8_t iface,
        uint8_t collection);

    void (STDMETHODCALLTYPE *SetFocusPolicy)(
        IGameInput_v0 *This,
        GameInputFocusPolicy policy);

    END_INTERFACE
} IGameInput_v0Vtbl;

interface IGameInput_v0 {
    CONST_VTBL IGameInput_v0Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IGameInput_v0_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IGameInput_v0_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IGameInput_v0_Release(This) (This)->lpVtbl->Release(This)
/*** IGameInput_v0 methods ***/
#define IGameInput_v0_GetCurrentTimestamp(This) (This)->lpVtbl->GetCurrentTimestamp(This)
#define IGameInput_v0_GetCurrentReading(This,kind,device,reading) (This)->lpVtbl->GetCurrentReading(This,kind,device,reading)
#define IGameInput_v0_GetNextReading(This,reference,kind,device,reading) (This)->lpVtbl->GetNextReading(This,reference,kind,device,reading)
#define IGameInput_v0_GetPreviousReading(This,reference,kind,device,reading) (This)->lpVtbl->GetPreviousReading(This,reference,kind,device,reading)
#define IGameInput_v0_GetTemporalReading(This,timestamp,device,reading) (This)->lpVtbl->GetTemporalReading(This,timestamp,device,reading)
#define IGameInput_v0_RegisterReadingCallback(This,device,kind,threshold,context,callback,token) (This)->lpVtbl->RegisterReadingCallback(This,device,kind,threshold,context,callback,token)
#define IGameInput_v0_RegisterDeviceCallback(This,device,kind,filter,enum_kind,context,callback,token) (This)->lpVtbl->RegisterDeviceCallback(This,device,kind,filter,enum_kind,context,callback,token)
#define IGameInput_v0_RegisterSystemButtonCallback(This,device,filter,context,callback,token) (This)->lpVtbl->RegisterSystemButtonCallback(This,device,filter,context,callback,token)
#define IGameInput_v0_RegisterKeyboardLayoutCallback(This,device,context,callback,token) (This)->lpVtbl->RegisterKeyboardLayoutCallback(This,device,context,callback,token)
#define IGameInput_v0_StopCallback(This,token) (This)->lpVtbl->StopCallback(This,token)
#define IGameInput_v0_UnregisterCallback(This,token,timeout_ms) (This)->lpVtbl->UnregisterCallback(This,token,timeout_ms)
#define IGameInput_v0_CreateDispatcher(This,dispatcher) (This)->lpVtbl->CreateDispatcher(This,dispatcher)
#define IGameInput_v0_CreateAggregateDevice(This,kind,device) (This)->lpVtbl->CreateAggregateDevice(This,kind,device)
#define IGameInput_v0_FindDeviceFromId(This,value,device) (This)->lpVtbl->FindDeviceFromId(This,value,device)
#define IGameInput_v0_FindDeviceFromObject(This,value,device) (This)->lpVtbl->FindDeviceFromObject(This,value,device)
#define IGameInput_v0_FindDeviceFromPlatformHandle(This,value,device) (This)->lpVtbl->FindDeviceFromPlatformHandle(This,value,device)
#define IGameInput_v0_FindDeviceFromPlatformString(This,value,device) (This)->lpVtbl->FindDeviceFromPlatformString(This,value,device)
#define IGameInput_v0_EnableOemDeviceSupport(This,vid,pid,iface,collection) (This)->lpVtbl->EnableOemDeviceSupport(This,vid,pid,iface,collection)
#define IGameInput_v0_SetFocusPolicy(This,policy) (This)->lpVtbl->SetFocusPolicy(This,policy)
#else
/*** IUnknown methods ***/
static inline HRESULT IGameInput_v0_QueryInterface(IGameInput_v0* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IGameInput_v0_AddRef(IGameInput_v0* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IGameInput_v0_Release(IGameInput_v0* This) {
    return This->lpVtbl->Release(This);
}
/*** IGameInput_v0 methods ***/
static inline uint64_t IGameInput_v0_GetCurrentTimestamp(IGameInput_v0* This) {
    return This->lpVtbl->GetCurrentTimestamp(This);
}
static inline HRESULT IGameInput_v0_GetCurrentReading(IGameInput_v0* This,GameInputKind kind,IGameInputDevice_v0 *device,IGameInputReading_v0 **reading) {
    return This->lpVtbl->GetCurrentReading(This,kind,device,reading);
}
static inline HRESULT IGameInput_v0_GetNextReading(IGameInput_v0* This,IGameInputReading_v0 *reference,GameInputKind kind,IGameInputDevice_v0 *device,IGameInputReading_v0 **reading) {
    return This->lpVtbl->GetNextReading(This,reference,kind,device,reading);
}
static inline HRESULT IGameInput_v0_GetPreviousReading(IGameInput_v0* This,IGameInputReading_v0 *reference,GameInputKind kind,IGameInputDevice_v0 *device,IGameInputReading_v0 **reading) {
    return This->lpVtbl->GetPreviousReading(This,reference,kind,device,reading);
}
static inline HRESULT IGameInput_v0_GetTemporalReading(IGameInput_v0* This,uint64_t timestamp,IGameInputDevice_v0 *device,IGameInputReading_v0 **reading) {
    return This->lpVtbl->GetTemporalReading(This,timestamp,device,reading);
}
static inline HRESULT IGameInput_v0_RegisterReadingCallback(IGameInput_v0* This,IGameInputDevice_v0 *device,GameInputKind kind,float threshold,void *context,GameInputReadingCallback_v0 callback,GameInputCallbackToken *token) {
    return This->lpVtbl->RegisterReadingCallback(This,device,kind,threshold,context,callback,token);
}
static inline HRESULT IGameInput_v0_RegisterDeviceCallback(IGameInput_v0* This,IGameInputDevice_v0 *device,GameInputKind kind,GameInputDeviceStatus filter,GameInputEnumerationKind enum_kind,void *context,GameInputDeviceCallback_v0 callback,GameInputCallbackToken *token) {
    return This->lpVtbl->RegisterDeviceCallback(This,device,kind,filter,enum_kind,context,callback,token);
}
static inline HRESULT IGameInput_v0_RegisterSystemButtonCallback(IGameInput_v0* This,IGameInputDevice_v0 *device,GameInputSystemButtons filter,void *context,GameInputSystemButtonCallback_v0 callback,GameInputCallbackToken *token) {
    return This->lpVtbl->RegisterSystemButtonCallback(This,device,filter,context,callback,token);
}
static inline HRESULT IGameInput_v0_RegisterKeyboardLayoutCallback(IGameInput_v0* This,IGameInputDevice_v0 *device,void *context,GameInputKeyboardLayoutCallback_v0 callback,GameInputCallbackToken *token) {
    return This->lpVtbl->RegisterKeyboardLayoutCallback(This,device,context,callback,token);
}
static inline void IGameInput_v0_StopCallback(IGameInput_v0* This,GameInputCallbackToken token) {
    This->lpVtbl->StopCallback(This,token);
}
static inline bool IGameInput_v0_UnregisterCallback(IGameInput_v0* This,GameInputCallbackToken token,uint64_t timeout_ms) {
    return This->lpVtbl->UnregisterCallback(This,token,timeout_ms);
}
static inline HRESULT IGameInput_v0_CreateDispatcher(IGameInput_v0* This,IGameInputDispatcher **dispatcher) {
    return This->lpVtbl->CreateDispatcher(This,dispatcher);
}
static inline HRESULT IGameInput_v0_CreateAggregateDevice(IGameInput_v0* This,GameInputKind kind,IGameInputDevice_v0 **device) {
    return This->lpVtbl->CreateAggregateDevice(This,kind,device);
}
static inline HRESULT IGameInput_v0_FindDeviceFromId(IGameInput_v0* This,const APP_LOCAL_DEVICE_ID *value,IGameInputDevice_v0 **device) {
    return This->lpVtbl->FindDeviceFromId(This,value,device);
}
static inline HRESULT IGameInput_v0_FindDeviceFromObject(IGameInput_v0* This,IUnknown *value,IGameInputDevice_v0 **device) {
    return This->lpVtbl->FindDeviceFromObject(This,value,device);
}
static inline HRESULT IGameInput_v0_FindDeviceFromPlatformHandle(IGameInput_v0* This,HANDLE value,IGameInputDevice_v0 **device) {
    return This->lpVtbl->FindDeviceFromPlatformHandle(This,value,device);
}
static inline HRESULT IGameInput_v0_FindDeviceFromPlatformString(IGameInput_v0* This,const WCHAR *value,IGameInputDevice_v0 **device) {
    return This->lpVtbl->FindDeviceFromPlatformString(This,value,device);
}
static inline HRESULT IGameInput_v0_EnableOemDeviceSupport(IGameInput_v0* This,uint16_t vid,uint16_t pid,uint8_t iface,uint8_t collection) {
    return This->lpVtbl->EnableOemDeviceSupport(This,vid,pid,iface,collection);
}
static inline void IGameInput_v0_SetFocusPolicy(IGameInput_v0* This,GameInputFocusPolicy policy) {
    This->lpVtbl->SetFocusPolicy(This,policy);
}
#endif
#endif

#endif


#endif  /* __IGameInput_v0_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IGameInput_v1 interface
 */
#ifndef __IGameInput_v1_INTERFACE_DEFINED__
#define __IGameInput_v1_INTERFACE_DEFINED__

DEFINE_GUID(IID_IGameInput_v1, 0x40ffb7e4, 0x6150, 0x407a, 0xb4,0x39, 0x13,0x2b,0xad,0xc0,0x8d,0x2d);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("40ffb7e4-6150-407a-b439-132badc08d2d")
IGameInput_v1 : public IUnknown
{
    virtual uint64_t STDMETHODCALLTYPE GetCurrentTimestamp(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCurrentReading(
        GameInputKind kind,
        IGameInputDevice_v1 *device,
        IGameInputReading_v1 **reading) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetNextReading(
        IGameInputReading_v1 *reference,
        GameInputKind kind,
        IGameInputDevice_v1 *device,
        IGameInputReading_v1 **reading) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetPreviousReading(
        IGameInputReading_v1 *reference,
        GameInputKind kind,
        IGameInputDevice_v1 *device,
        IGameInputReading_v1 **reading) = 0;

    virtual HRESULT STDMETHODCALLTYPE RegisterReadingCallback(
        IGameInputDevice_v1 *device,
        GameInputKind kind,
        void *context,
        GameInputReadingCallback_v1 callback,
        GameInputCallbackToken *token) = 0;

    virtual HRESULT STDMETHODCALLTYPE RegisterDeviceCallback(
        IGameInputDevice_v1 *device,
        GameInputKind kind,
        GameInputDeviceStatus filter,
        GameInputEnumerationKind enum_kind,
        void *context,
        GameInputDeviceCallback_v1 callback,
        GameInputCallbackToken *token) = 0;

    virtual HRESULT STDMETHODCALLTYPE RegisterSystemButtonCallback(
        IGameInputDevice_v1 *device,
        GameInputSystemButtons filter,
        void *context,
        GameInputSystemButtonCallback_v1 callback,
        GameInputCallbackToken *token) = 0;

    virtual HRESULT STDMETHODCALLTYPE RegisterKeyboardLayoutCallback(
        IGameInputDevice_v1 *device,
        void *context,
        GameInputKeyboardLayoutCallback_v1 callback,
        GameInputCallbackToken *token) = 0;

    virtual void STDMETHODCALLTYPE StopCallback(
        GameInputCallbackToken token) = 0;

    virtual bool STDMETHODCALLTYPE UnregisterCallback(
        GameInputCallbackToken token) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateDispatcher(
        IGameInputDispatcher **dispatcher) = 0;

    virtual HRESULT STDMETHODCALLTYPE FindDeviceFromId(
        const APP_LOCAL_DEVICE_ID *value,
        IGameInputDevice_v1 **device) = 0;

    virtual HRESULT STDMETHODCALLTYPE FindDeviceFromPlatformString(
        const WCHAR *value,
        IGameInputDevice_v1 **device) = 0;

    virtual void STDMETHODCALLTYPE SetFocusPolicy(
        GameInputFocusPolicy policy) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IGameInput_v1, 0x40ffb7e4, 0x6150, 0x407a, 0xb4,0x39, 0x13,0x2b,0xad,0xc0,0x8d,0x2d)
#endif
#else
typedef struct IGameInput_v1Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IGameInput_v1 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IGameInput_v1 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IGameInput_v1 *This);

    /*** IGameInput_v1 methods ***/
    uint64_t (STDMETHODCALLTYPE *GetCurrentTimestamp)(
        IGameInput_v1 *This);

    HRESULT (STDMETHODCALLTYPE *GetCurrentReading)(
        IGameInput_v1 *This,
        GameInputKind kind,
        IGameInputDevice_v1 *device,
        IGameInputReading_v1 **reading);

    HRESULT (STDMETHODCALLTYPE *GetNextReading)(
        IGameInput_v1 *This,
        IGameInputReading_v1 *reference,
        GameInputKind kind,
        IGameInputDevice_v1 *device,
        IGameInputReading_v1 **reading);

    HRESULT (STDMETHODCALLTYPE *GetPreviousReading)(
        IGameInput_v1 *This,
        IGameInputReading_v1 *reference,
        GameInputKind kind,
        IGameInputDevice_v1 *device,
        IGameInputReading_v1 **reading);

    HRESULT (STDMETHODCALLTYPE *RegisterReadingCallback)(
        IGameInput_v1 *This,
        IGameInputDevice_v1 *device,
        GameInputKind kind,
        void *context,
        GameInputReadingCallback_v1 callback,
        GameInputCallbackToken *token);

    HRESULT (STDMETHODCALLTYPE *RegisterDeviceCallback)(
        IGameInput_v1 *This,
        IGameInputDevice_v1 *device,
        GameInputKind kind,
        GameInputDeviceStatus filter,
        GameInputEnumerationKind enum_kind,
        void *context,
        GameInputDeviceCallback_v1 callback,
        GameInputCallbackToken *token);

    HRESULT (STDMETHODCALLTYPE *RegisterSystemButtonCallback)(
        IGameInput_v1 *This,
        IGameInputDevice_v1 *device,
        GameInputSystemButtons filter,
        void *context,
        GameInputSystemButtonCallback_v1 callback,
        GameInputCallbackToken *token);

    HRESULT (STDMETHODCALLTYPE *RegisterKeyboardLayoutCallback)(
        IGameInput_v1 *This,
        IGameInputDevice_v1 *device,
        void *context,
        GameInputKeyboardLayoutCallback_v1 callback,
        GameInputCallbackToken *token);

    void (STDMETHODCALLTYPE *StopCallback)(
        IGameInput_v1 *This,
        GameInputCallbackToken token);

    bool (STDMETHODCALLTYPE *UnregisterCallback)(
        IGameInput_v1 *This,
        GameInputCallbackToken token);

    HRESULT (STDMETHODCALLTYPE *CreateDispatcher)(
        IGameInput_v1 *This,
        IGameInputDispatcher **dispatcher);

    HRESULT (STDMETHODCALLTYPE *FindDeviceFromId)(
        IGameInput_v1 *This,
        const APP_LOCAL_DEVICE_ID *value,
        IGameInputDevice_v1 **device);

    HRESULT (STDMETHODCALLTYPE *FindDeviceFromPlatformString)(
        IGameInput_v1 *This,
        const WCHAR *value,
        IGameInputDevice_v1 **device);

    void (STDMETHODCALLTYPE *SetFocusPolicy)(
        IGameInput_v1 *This,
        GameInputFocusPolicy policy);

    END_INTERFACE
} IGameInput_v1Vtbl;

interface IGameInput_v1 {
    CONST_VTBL IGameInput_v1Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IGameInput_v1_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IGameInput_v1_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IGameInput_v1_Release(This) (This)->lpVtbl->Release(This)
/*** IGameInput_v1 methods ***/
#define IGameInput_v1_GetCurrentTimestamp(This) (This)->lpVtbl->GetCurrentTimestamp(This)
#define IGameInput_v1_GetCurrentReading(This,kind,device,reading) (This)->lpVtbl->GetCurrentReading(This,kind,device,reading)
#define IGameInput_v1_GetNextReading(This,reference,kind,device,reading) (This)->lpVtbl->GetNextReading(This,reference,kind,device,reading)
#define IGameInput_v1_GetPreviousReading(This,reference,kind,device,reading) (This)->lpVtbl->GetPreviousReading(This,reference,kind,device,reading)
#define IGameInput_v1_RegisterReadingCallback(This,device,kind,context,callback,token) (This)->lpVtbl->RegisterReadingCallback(This,device,kind,context,callback,token)
#define IGameInput_v1_RegisterDeviceCallback(This,device,kind,filter,enum_kind,context,callback,token) (This)->lpVtbl->RegisterDeviceCallback(This,device,kind,filter,enum_kind,context,callback,token)
#define IGameInput_v1_RegisterSystemButtonCallback(This,device,filter,context,callback,token) (This)->lpVtbl->RegisterSystemButtonCallback(This,device,filter,context,callback,token)
#define IGameInput_v1_RegisterKeyboardLayoutCallback(This,device,context,callback,token) (This)->lpVtbl->RegisterKeyboardLayoutCallback(This,device,context,callback,token)
#define IGameInput_v1_StopCallback(This,token) (This)->lpVtbl->StopCallback(This,token)
#define IGameInput_v1_UnregisterCallback(This,token) (This)->lpVtbl->UnregisterCallback(This,token)
#define IGameInput_v1_CreateDispatcher(This,dispatcher) (This)->lpVtbl->CreateDispatcher(This,dispatcher)
#define IGameInput_v1_FindDeviceFromId(This,value,device) (This)->lpVtbl->FindDeviceFromId(This,value,device)
#define IGameInput_v1_FindDeviceFromPlatformString(This,value,device) (This)->lpVtbl->FindDeviceFromPlatformString(This,value,device)
#define IGameInput_v1_SetFocusPolicy(This,policy) (This)->lpVtbl->SetFocusPolicy(This,policy)
#else
/*** IUnknown methods ***/
static inline HRESULT IGameInput_v1_QueryInterface(IGameInput_v1* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IGameInput_v1_AddRef(IGameInput_v1* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IGameInput_v1_Release(IGameInput_v1* This) {
    return This->lpVtbl->Release(This);
}
/*** IGameInput_v1 methods ***/
static inline uint64_t IGameInput_v1_GetCurrentTimestamp(IGameInput_v1* This) {
    return This->lpVtbl->GetCurrentTimestamp(This);
}
static inline HRESULT IGameInput_v1_GetCurrentReading(IGameInput_v1* This,GameInputKind kind,IGameInputDevice_v1 *device,IGameInputReading_v1 **reading) {
    return This->lpVtbl->GetCurrentReading(This,kind,device,reading);
}
static inline HRESULT IGameInput_v1_GetNextReading(IGameInput_v1* This,IGameInputReading_v1 *reference,GameInputKind kind,IGameInputDevice_v1 *device,IGameInputReading_v1 **reading) {
    return This->lpVtbl->GetNextReading(This,reference,kind,device,reading);
}
static inline HRESULT IGameInput_v1_GetPreviousReading(IGameInput_v1* This,IGameInputReading_v1 *reference,GameInputKind kind,IGameInputDevice_v1 *device,IGameInputReading_v1 **reading) {
    return This->lpVtbl->GetPreviousReading(This,reference,kind,device,reading);
}
static inline HRESULT IGameInput_v1_RegisterReadingCallback(IGameInput_v1* This,IGameInputDevice_v1 *device,GameInputKind kind,void *context,GameInputReadingCallback_v1 callback,GameInputCallbackToken *token) {
    return This->lpVtbl->RegisterReadingCallback(This,device,kind,context,callback,token);
}
static inline HRESULT IGameInput_v1_RegisterDeviceCallback(IGameInput_v1* This,IGameInputDevice_v1 *device,GameInputKind kind,GameInputDeviceStatus filter,GameInputEnumerationKind enum_kind,void *context,GameInputDeviceCallback_v1 callback,GameInputCallbackToken *token) {
    return This->lpVtbl->RegisterDeviceCallback(This,device,kind,filter,enum_kind,context,callback,token);
}
static inline HRESULT IGameInput_v1_RegisterSystemButtonCallback(IGameInput_v1* This,IGameInputDevice_v1 *device,GameInputSystemButtons filter,void *context,GameInputSystemButtonCallback_v1 callback,GameInputCallbackToken *token) {
    return This->lpVtbl->RegisterSystemButtonCallback(This,device,filter,context,callback,token);
}
static inline HRESULT IGameInput_v1_RegisterKeyboardLayoutCallback(IGameInput_v1* This,IGameInputDevice_v1 *device,void *context,GameInputKeyboardLayoutCallback_v1 callback,GameInputCallbackToken *token) {
    return This->lpVtbl->RegisterKeyboardLayoutCallback(This,device,context,callback,token);
}
static inline void IGameInput_v1_StopCallback(IGameInput_v1* This,GameInputCallbackToken token) {
    This->lpVtbl->StopCallback(This,token);
}
static inline bool IGameInput_v1_UnregisterCallback(IGameInput_v1* This,GameInputCallbackToken token) {
    return This->lpVtbl->UnregisterCallback(This,token);
}
static inline HRESULT IGameInput_v1_CreateDispatcher(IGameInput_v1* This,IGameInputDispatcher **dispatcher) {
    return This->lpVtbl->CreateDispatcher(This,dispatcher);
}
static inline HRESULT IGameInput_v1_FindDeviceFromId(IGameInput_v1* This,const APP_LOCAL_DEVICE_ID *value,IGameInputDevice_v1 **device) {
    return This->lpVtbl->FindDeviceFromId(This,value,device);
}
static inline HRESULT IGameInput_v1_FindDeviceFromPlatformString(IGameInput_v1* This,const WCHAR *value,IGameInputDevice_v1 **device) {
    return This->lpVtbl->FindDeviceFromPlatformString(This,value,device);
}
static inline void IGameInput_v1_SetFocusPolicy(IGameInput_v1* This,GameInputFocusPolicy policy) {
    This->lpVtbl->SetFocusPolicy(This,policy);
}
#endif
#endif

#endif


#endif  /* __IGameInput_v1_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IGameInput_v2 interface
 */
#ifndef __IGameInput_v2_INTERFACE_DEFINED__
#define __IGameInput_v2_INTERFACE_DEFINED__

DEFINE_GUID(IID_IGameInput_v2, 0xbbaa66d2, 0x837a, 0x40f7, 0xa3,0x03, 0x91,0x7d,0x50,0x09,0x55,0xf4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("bbaa66d2-837a-40f7-a303-917d500955f4")
IGameInput_v2 : public IUnknown
{
    virtual uint64_t STDMETHODCALLTYPE GetCurrentTimestamp(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCurrentReading(
        GameInputKind kind,
        IGameInputDevice_v2 *device,
        IGameInputReading_v2 **reading) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetNextReading(
        IGameInputReading_v2 *reference,
        GameInputKind kind,
        IGameInputDevice_v2 *device,
        IGameInputReading_v2 **reading) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetPreviousReading(
        IGameInputReading_v2 *reference,
        GameInputKind kind,
        IGameInputDevice_v2 *device,
        IGameInputReading_v2 **reading) = 0;

    virtual HRESULT STDMETHODCALLTYPE RegisterReadingCallback(
        IGameInputDevice_v2 *device,
        GameInputKind kind,
        void *context,
        GameInputReadingCallback_v2 callback,
        GameInputCallbackToken *token) = 0;

    virtual HRESULT STDMETHODCALLTYPE RegisterDeviceCallback(
        IGameInputDevice_v2 *device,
        GameInputKind kind,
        GameInputDeviceStatus filter,
        GameInputEnumerationKind enum_kind,
        void *context,
        GameInputDeviceCallback_v2 callback,
        GameInputCallbackToken *token) = 0;

    virtual HRESULT STDMETHODCALLTYPE RegisterSystemButtonCallback(
        IGameInputDevice_v2 *device,
        GameInputSystemButtons filter,
        void *context,
        GameInputSystemButtonCallback_v2 callback,
        GameInputCallbackToken *token) = 0;

    virtual HRESULT STDMETHODCALLTYPE RegisterKeyboardLayoutCallback(
        IGameInputDevice_v2 *device,
        void *context,
        GameInputKeyboardLayoutCallback_v2 callback,
        GameInputCallbackToken *token) = 0;

    virtual void STDMETHODCALLTYPE StopCallback(
        GameInputCallbackToken token) = 0;

    virtual bool STDMETHODCALLTYPE UnregisterCallback(
        GameInputCallbackToken token) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateDispatcher(
        IGameInputDispatcher **dispatcher) = 0;

    virtual HRESULT STDMETHODCALLTYPE FindDeviceFromId(
        const APP_LOCAL_DEVICE_ID *value,
        IGameInputDevice_v2 **device) = 0;

    virtual HRESULT STDMETHODCALLTYPE FindDeviceFromPlatformString(
        const WCHAR *value,
        IGameInputDevice_v2 **device) = 0;

    virtual void STDMETHODCALLTYPE SetFocusPolicy(
        GameInputFocusPolicy policy) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IGameInput_v2, 0xbbaa66d2, 0x837a, 0x40f7, 0xa3,0x03, 0x91,0x7d,0x50,0x09,0x55,0xf4)
#endif
#else
typedef struct IGameInput_v2Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IGameInput_v2 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IGameInput_v2 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IGameInput_v2 *This);

    /*** IGameInput_v2 methods ***/
    uint64_t (STDMETHODCALLTYPE *GetCurrentTimestamp)(
        IGameInput_v2 *This);

    HRESULT (STDMETHODCALLTYPE *GetCurrentReading)(
        IGameInput_v2 *This,
        GameInputKind kind,
        IGameInputDevice_v2 *device,
        IGameInputReading_v2 **reading);

    HRESULT (STDMETHODCALLTYPE *GetNextReading)(
        IGameInput_v2 *This,
        IGameInputReading_v2 *reference,
        GameInputKind kind,
        IGameInputDevice_v2 *device,
        IGameInputReading_v2 **reading);

    HRESULT (STDMETHODCALLTYPE *GetPreviousReading)(
        IGameInput_v2 *This,
        IGameInputReading_v2 *reference,
        GameInputKind kind,
        IGameInputDevice_v2 *device,
        IGameInputReading_v2 **reading);

    HRESULT (STDMETHODCALLTYPE *RegisterReadingCallback)(
        IGameInput_v2 *This,
        IGameInputDevice_v2 *device,
        GameInputKind kind,
        void *context,
        GameInputReadingCallback_v2 callback,
        GameInputCallbackToken *token);

    HRESULT (STDMETHODCALLTYPE *RegisterDeviceCallback)(
        IGameInput_v2 *This,
        IGameInputDevice_v2 *device,
        GameInputKind kind,
        GameInputDeviceStatus filter,
        GameInputEnumerationKind enum_kind,
        void *context,
        GameInputDeviceCallback_v2 callback,
        GameInputCallbackToken *token);

    HRESULT (STDMETHODCALLTYPE *RegisterSystemButtonCallback)(
        IGameInput_v2 *This,
        IGameInputDevice_v2 *device,
        GameInputSystemButtons filter,
        void *context,
        GameInputSystemButtonCallback_v2 callback,
        GameInputCallbackToken *token);

    HRESULT (STDMETHODCALLTYPE *RegisterKeyboardLayoutCallback)(
        IGameInput_v2 *This,
        IGameInputDevice_v2 *device,
        void *context,
        GameInputKeyboardLayoutCallback_v2 callback,
        GameInputCallbackToken *token);

    void (STDMETHODCALLTYPE *StopCallback)(
        IGameInput_v2 *This,
        GameInputCallbackToken token);

    bool (STDMETHODCALLTYPE *UnregisterCallback)(
        IGameInput_v2 *This,
        GameInputCallbackToken token);

    HRESULT (STDMETHODCALLTYPE *CreateDispatcher)(
        IGameInput_v2 *This,
        IGameInputDispatcher **dispatcher);

    HRESULT (STDMETHODCALLTYPE *FindDeviceFromId)(
        IGameInput_v2 *This,
        const APP_LOCAL_DEVICE_ID *value,
        IGameInputDevice_v2 **device);

    HRESULT (STDMETHODCALLTYPE *FindDeviceFromPlatformString)(
        IGameInput_v2 *This,
        const WCHAR *value,
        IGameInputDevice_v2 **device);

    void (STDMETHODCALLTYPE *SetFocusPolicy)(
        IGameInput_v2 *This,
        GameInputFocusPolicy policy);

    END_INTERFACE
} IGameInput_v2Vtbl;

interface IGameInput_v2 {
    CONST_VTBL IGameInput_v2Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IGameInput_v2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IGameInput_v2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IGameInput_v2_Release(This) (This)->lpVtbl->Release(This)
/*** IGameInput_v2 methods ***/
#define IGameInput_v2_GetCurrentTimestamp(This) (This)->lpVtbl->GetCurrentTimestamp(This)
#define IGameInput_v2_GetCurrentReading(This,kind,device,reading) (This)->lpVtbl->GetCurrentReading(This,kind,device,reading)
#define IGameInput_v2_GetNextReading(This,reference,kind,device,reading) (This)->lpVtbl->GetNextReading(This,reference,kind,device,reading)
#define IGameInput_v2_GetPreviousReading(This,reference,kind,device,reading) (This)->lpVtbl->GetPreviousReading(This,reference,kind,device,reading)
#define IGameInput_v2_RegisterReadingCallback(This,device,kind,context,callback,token) (This)->lpVtbl->RegisterReadingCallback(This,device,kind,context,callback,token)
#define IGameInput_v2_RegisterDeviceCallback(This,device,kind,filter,enum_kind,context,callback,token) (This)->lpVtbl->RegisterDeviceCallback(This,device,kind,filter,enum_kind,context,callback,token)
#define IGameInput_v2_RegisterSystemButtonCallback(This,device,filter,context,callback,token) (This)->lpVtbl->RegisterSystemButtonCallback(This,device,filter,context,callback,token)
#define IGameInput_v2_RegisterKeyboardLayoutCallback(This,device,context,callback,token) (This)->lpVtbl->RegisterKeyboardLayoutCallback(This,device,context,callback,token)
#define IGameInput_v2_StopCallback(This,token) (This)->lpVtbl->StopCallback(This,token)
#define IGameInput_v2_UnregisterCallback(This,token) (This)->lpVtbl->UnregisterCallback(This,token)
#define IGameInput_v2_CreateDispatcher(This,dispatcher) (This)->lpVtbl->CreateDispatcher(This,dispatcher)
#define IGameInput_v2_FindDeviceFromId(This,value,device) (This)->lpVtbl->FindDeviceFromId(This,value,device)
#define IGameInput_v2_FindDeviceFromPlatformString(This,value,device) (This)->lpVtbl->FindDeviceFromPlatformString(This,value,device)
#define IGameInput_v2_SetFocusPolicy(This,policy) (This)->lpVtbl->SetFocusPolicy(This,policy)
#else
/*** IUnknown methods ***/
static inline HRESULT IGameInput_v2_QueryInterface(IGameInput_v2* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IGameInput_v2_AddRef(IGameInput_v2* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IGameInput_v2_Release(IGameInput_v2* This) {
    return This->lpVtbl->Release(This);
}
/*** IGameInput_v2 methods ***/
static inline uint64_t IGameInput_v2_GetCurrentTimestamp(IGameInput_v2* This) {
    return This->lpVtbl->GetCurrentTimestamp(This);
}
static inline HRESULT IGameInput_v2_GetCurrentReading(IGameInput_v2* This,GameInputKind kind,IGameInputDevice_v2 *device,IGameInputReading_v2 **reading) {
    return This->lpVtbl->GetCurrentReading(This,kind,device,reading);
}
static inline HRESULT IGameInput_v2_GetNextReading(IGameInput_v2* This,IGameInputReading_v2 *reference,GameInputKind kind,IGameInputDevice_v2 *device,IGameInputReading_v2 **reading) {
    return This->lpVtbl->GetNextReading(This,reference,kind,device,reading);
}
static inline HRESULT IGameInput_v2_GetPreviousReading(IGameInput_v2* This,IGameInputReading_v2 *reference,GameInputKind kind,IGameInputDevice_v2 *device,IGameInputReading_v2 **reading) {
    return This->lpVtbl->GetPreviousReading(This,reference,kind,device,reading);
}
static inline HRESULT IGameInput_v2_RegisterReadingCallback(IGameInput_v2* This,IGameInputDevice_v2 *device,GameInputKind kind,void *context,GameInputReadingCallback_v2 callback,GameInputCallbackToken *token) {
    return This->lpVtbl->RegisterReadingCallback(This,device,kind,context,callback,token);
}
static inline HRESULT IGameInput_v2_RegisterDeviceCallback(IGameInput_v2* This,IGameInputDevice_v2 *device,GameInputKind kind,GameInputDeviceStatus filter,GameInputEnumerationKind enum_kind,void *context,GameInputDeviceCallback_v2 callback,GameInputCallbackToken *token) {
    return This->lpVtbl->RegisterDeviceCallback(This,device,kind,filter,enum_kind,context,callback,token);
}
static inline HRESULT IGameInput_v2_RegisterSystemButtonCallback(IGameInput_v2* This,IGameInputDevice_v2 *device,GameInputSystemButtons filter,void *context,GameInputSystemButtonCallback_v2 callback,GameInputCallbackToken *token) {
    return This->lpVtbl->RegisterSystemButtonCallback(This,device,filter,context,callback,token);
}
static inline HRESULT IGameInput_v2_RegisterKeyboardLayoutCallback(IGameInput_v2* This,IGameInputDevice_v2 *device,void *context,GameInputKeyboardLayoutCallback_v2 callback,GameInputCallbackToken *token) {
    return This->lpVtbl->RegisterKeyboardLayoutCallback(This,device,context,callback,token);
}
static inline void IGameInput_v2_StopCallback(IGameInput_v2* This,GameInputCallbackToken token) {
    This->lpVtbl->StopCallback(This,token);
}
static inline bool IGameInput_v2_UnregisterCallback(IGameInput_v2* This,GameInputCallbackToken token) {
    return This->lpVtbl->UnregisterCallback(This,token);
}
static inline HRESULT IGameInput_v2_CreateDispatcher(IGameInput_v2* This,IGameInputDispatcher **dispatcher) {
    return This->lpVtbl->CreateDispatcher(This,dispatcher);
}
static inline HRESULT IGameInput_v2_FindDeviceFromId(IGameInput_v2* This,const APP_LOCAL_DEVICE_ID *value,IGameInputDevice_v2 **device) {
    return This->lpVtbl->FindDeviceFromId(This,value,device);
}
static inline HRESULT IGameInput_v2_FindDeviceFromPlatformString(IGameInput_v2* This,const WCHAR *value,IGameInputDevice_v2 **device) {
    return This->lpVtbl->FindDeviceFromPlatformString(This,value,device);
}
static inline void IGameInput_v2_SetFocusPolicy(IGameInput_v2* This,GameInputFocusPolicy policy) {
    This->lpVtbl->SetFocusPolicy(This,policy);
}
#endif
#endif

#endif


#endif  /* __IGameInput_v2_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IGameInput_v3 interface
 */
#ifndef __IGameInput_v3_INTERFACE_DEFINED__
#define __IGameInput_v3_INTERFACE_DEFINED__

DEFINE_GUID(IID_IGameInput_v3, 0x20efc1c7, 0x5d9a, 0x43ba, 0xb2,0x6f, 0xb8,0x07,0xfa,0x48,0x60,0x9c);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("20efc1c7-5d9a-43ba-b26f-b807fa48609c")
IGameInput_v3 : public IUnknown
{
    virtual uint64_t STDMETHODCALLTYPE GetCurrentTimestamp(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCurrentReading(
        GameInputKind kind,
        IGameInputDevice_v3 *device,
        IGameInputReading_v3 **reading) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetNextReading(
        IGameInputReading_v3 *reference,
        GameInputKind kind,
        IGameInputDevice_v3 *device,
        IGameInputReading_v3 **reading) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetPreviousReading(
        IGameInputReading_v3 *reference,
        GameInputKind kind,
        IGameInputDevice_v3 *device,
        IGameInputReading_v3 **reading) = 0;

    virtual HRESULT STDMETHODCALLTYPE RegisterReadingCallback(
        IGameInputDevice_v3 *device,
        GameInputKind kind,
        void *context,
        GameInputReadingCallback_v3 callback,
        GameInputCallbackToken *token) = 0;

    virtual HRESULT STDMETHODCALLTYPE RegisterDeviceCallback(
        IGameInputDevice_v3 *device,
        GameInputKind kind,
        GameInputDeviceStatus filter,
        GameInputEnumerationKind enum_kind,
        void *context,
        GameInputDeviceCallback_v3 callback,
        GameInputCallbackToken *token) = 0;

    virtual HRESULT STDMETHODCALLTYPE RegisterSystemButtonCallback(
        IGameInputDevice_v3 *device,
        GameInputSystemButtons filter,
        void *context,
        GameInputSystemButtonCallback_v3 callback,
        GameInputCallbackToken *token) = 0;

    virtual HRESULT STDMETHODCALLTYPE RegisterKeyboardLayoutCallback(
        IGameInputDevice_v3 *device,
        void *context,
        GameInputKeyboardLayoutCallback_v3 callback,
        GameInputCallbackToken *token) = 0;

    virtual void STDMETHODCALLTYPE StopCallback(
        GameInputCallbackToken token) = 0;

    virtual bool STDMETHODCALLTYPE UnregisterCallback(
        GameInputCallbackToken token) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateDispatcher(
        IGameInputDispatcher **dispatcher) = 0;

    virtual HRESULT STDMETHODCALLTYPE FindDeviceFromId(
        const APP_LOCAL_DEVICE_ID *value,
        IGameInputDevice_v3 **device) = 0;

    virtual HRESULT STDMETHODCALLTYPE FindDeviceFromPlatformString(
        const WCHAR *value,
        IGameInputDevice_v3 **device) = 0;

    virtual void STDMETHODCALLTYPE SetFocusPolicy(
        GameInputFocusPolicy policy) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateAggregateDevice(
        GameInputKind kind,
        APP_LOCAL_DEVICE_ID *id) = 0;

    virtual HRESULT STDMETHODCALLTYPE DisableAggregateDevice(
        const APP_LOCAL_DEVICE_ID *id) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IGameInput_v3, 0x20efc1c7, 0x5d9a, 0x43ba, 0xb2,0x6f, 0xb8,0x07,0xfa,0x48,0x60,0x9c)
#endif
#else
typedef struct IGameInput_v3Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IGameInput_v3 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IGameInput_v3 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IGameInput_v3 *This);

    /*** IGameInput_v3 methods ***/
    uint64_t (STDMETHODCALLTYPE *GetCurrentTimestamp)(
        IGameInput_v3 *This);

    HRESULT (STDMETHODCALLTYPE *GetCurrentReading)(
        IGameInput_v3 *This,
        GameInputKind kind,
        IGameInputDevice_v3 *device,
        IGameInputReading_v3 **reading);

    HRESULT (STDMETHODCALLTYPE *GetNextReading)(
        IGameInput_v3 *This,
        IGameInputReading_v3 *reference,
        GameInputKind kind,
        IGameInputDevice_v3 *device,
        IGameInputReading_v3 **reading);

    HRESULT (STDMETHODCALLTYPE *GetPreviousReading)(
        IGameInput_v3 *This,
        IGameInputReading_v3 *reference,
        GameInputKind kind,
        IGameInputDevice_v3 *device,
        IGameInputReading_v3 **reading);

    HRESULT (STDMETHODCALLTYPE *RegisterReadingCallback)(
        IGameInput_v3 *This,
        IGameInputDevice_v3 *device,
        GameInputKind kind,
        void *context,
        GameInputReadingCallback_v3 callback,
        GameInputCallbackToken *token);

    HRESULT (STDMETHODCALLTYPE *RegisterDeviceCallback)(
        IGameInput_v3 *This,
        IGameInputDevice_v3 *device,
        GameInputKind kind,
        GameInputDeviceStatus filter,
        GameInputEnumerationKind enum_kind,
        void *context,
        GameInputDeviceCallback_v3 callback,
        GameInputCallbackToken *token);

    HRESULT (STDMETHODCALLTYPE *RegisterSystemButtonCallback)(
        IGameInput_v3 *This,
        IGameInputDevice_v3 *device,
        GameInputSystemButtons filter,
        void *context,
        GameInputSystemButtonCallback_v3 callback,
        GameInputCallbackToken *token);

    HRESULT (STDMETHODCALLTYPE *RegisterKeyboardLayoutCallback)(
        IGameInput_v3 *This,
        IGameInputDevice_v3 *device,
        void *context,
        GameInputKeyboardLayoutCallback_v3 callback,
        GameInputCallbackToken *token);

    void (STDMETHODCALLTYPE *StopCallback)(
        IGameInput_v3 *This,
        GameInputCallbackToken token);

    bool (STDMETHODCALLTYPE *UnregisterCallback)(
        IGameInput_v3 *This,
        GameInputCallbackToken token);

    HRESULT (STDMETHODCALLTYPE *CreateDispatcher)(
        IGameInput_v3 *This,
        IGameInputDispatcher **dispatcher);

    HRESULT (STDMETHODCALLTYPE *FindDeviceFromId)(
        IGameInput_v3 *This,
        const APP_LOCAL_DEVICE_ID *value,
        IGameInputDevice_v3 **device);

    HRESULT (STDMETHODCALLTYPE *FindDeviceFromPlatformString)(
        IGameInput_v3 *This,
        const WCHAR *value,
        IGameInputDevice_v3 **device);

    void (STDMETHODCALLTYPE *SetFocusPolicy)(
        IGameInput_v3 *This,
        GameInputFocusPolicy policy);

    HRESULT (STDMETHODCALLTYPE *CreateAggregateDevice)(
        IGameInput_v3 *This,
        GameInputKind kind,
        APP_LOCAL_DEVICE_ID *id);

    HRESULT (STDMETHODCALLTYPE *DisableAggregateDevice)(
        IGameInput_v3 *This,
        const APP_LOCAL_DEVICE_ID *id);

    END_INTERFACE
} IGameInput_v3Vtbl;

interface IGameInput_v3 {
    CONST_VTBL IGameInput_v3Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IGameInput_v3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IGameInput_v3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IGameInput_v3_Release(This) (This)->lpVtbl->Release(This)
/*** IGameInput_v3 methods ***/
#define IGameInput_v3_GetCurrentTimestamp(This) (This)->lpVtbl->GetCurrentTimestamp(This)
#define IGameInput_v3_GetCurrentReading(This,kind,device,reading) (This)->lpVtbl->GetCurrentReading(This,kind,device,reading)
#define IGameInput_v3_GetNextReading(This,reference,kind,device,reading) (This)->lpVtbl->GetNextReading(This,reference,kind,device,reading)
#define IGameInput_v3_GetPreviousReading(This,reference,kind,device,reading) (This)->lpVtbl->GetPreviousReading(This,reference,kind,device,reading)
#define IGameInput_v3_RegisterReadingCallback(This,device,kind,context,callback,token) (This)->lpVtbl->RegisterReadingCallback(This,device,kind,context,callback,token)
#define IGameInput_v3_RegisterDeviceCallback(This,device,kind,filter,enum_kind,context,callback,token) (This)->lpVtbl->RegisterDeviceCallback(This,device,kind,filter,enum_kind,context,callback,token)
#define IGameInput_v3_RegisterSystemButtonCallback(This,device,filter,context,callback,token) (This)->lpVtbl->RegisterSystemButtonCallback(This,device,filter,context,callback,token)
#define IGameInput_v3_RegisterKeyboardLayoutCallback(This,device,context,callback,token) (This)->lpVtbl->RegisterKeyboardLayoutCallback(This,device,context,callback,token)
#define IGameInput_v3_StopCallback(This,token) (This)->lpVtbl->StopCallback(This,token)
#define IGameInput_v3_UnregisterCallback(This,token) (This)->lpVtbl->UnregisterCallback(This,token)
#define IGameInput_v3_CreateDispatcher(This,dispatcher) (This)->lpVtbl->CreateDispatcher(This,dispatcher)
#define IGameInput_v3_FindDeviceFromId(This,value,device) (This)->lpVtbl->FindDeviceFromId(This,value,device)
#define IGameInput_v3_FindDeviceFromPlatformString(This,value,device) (This)->lpVtbl->FindDeviceFromPlatformString(This,value,device)
#define IGameInput_v3_SetFocusPolicy(This,policy) (This)->lpVtbl->SetFocusPolicy(This,policy)
#define IGameInput_v3_CreateAggregateDevice(This,kind,id) (This)->lpVtbl->CreateAggregateDevice(This,kind,id)
#define IGameInput_v3_DisableAggregateDevice(This,id) (This)->lpVtbl->DisableAggregateDevice(This,id)
#else
/*** IUnknown methods ***/
static inline HRESULT IGameInput_v3_QueryInterface(IGameInput_v3* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IGameInput_v3_AddRef(IGameInput_v3* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IGameInput_v3_Release(IGameInput_v3* This) {
    return This->lpVtbl->Release(This);
}
/*** IGameInput_v3 methods ***/
static inline uint64_t IGameInput_v3_GetCurrentTimestamp(IGameInput_v3* This) {
    return This->lpVtbl->GetCurrentTimestamp(This);
}
static inline HRESULT IGameInput_v3_GetCurrentReading(IGameInput_v3* This,GameInputKind kind,IGameInputDevice_v3 *device,IGameInputReading_v3 **reading) {
    return This->lpVtbl->GetCurrentReading(This,kind,device,reading);
}
static inline HRESULT IGameInput_v3_GetNextReading(IGameInput_v3* This,IGameInputReading_v3 *reference,GameInputKind kind,IGameInputDevice_v3 *device,IGameInputReading_v3 **reading) {
    return This->lpVtbl->GetNextReading(This,reference,kind,device,reading);
}
static inline HRESULT IGameInput_v3_GetPreviousReading(IGameInput_v3* This,IGameInputReading_v3 *reference,GameInputKind kind,IGameInputDevice_v3 *device,IGameInputReading_v3 **reading) {
    return This->lpVtbl->GetPreviousReading(This,reference,kind,device,reading);
}
static inline HRESULT IGameInput_v3_RegisterReadingCallback(IGameInput_v3* This,IGameInputDevice_v3 *device,GameInputKind kind,void *context,GameInputReadingCallback_v3 callback,GameInputCallbackToken *token) {
    return This->lpVtbl->RegisterReadingCallback(This,device,kind,context,callback,token);
}
static inline HRESULT IGameInput_v3_RegisterDeviceCallback(IGameInput_v3* This,IGameInputDevice_v3 *device,GameInputKind kind,GameInputDeviceStatus filter,GameInputEnumerationKind enum_kind,void *context,GameInputDeviceCallback_v3 callback,GameInputCallbackToken *token) {
    return This->lpVtbl->RegisterDeviceCallback(This,device,kind,filter,enum_kind,context,callback,token);
}
static inline HRESULT IGameInput_v3_RegisterSystemButtonCallback(IGameInput_v3* This,IGameInputDevice_v3 *device,GameInputSystemButtons filter,void *context,GameInputSystemButtonCallback_v3 callback,GameInputCallbackToken *token) {
    return This->lpVtbl->RegisterSystemButtonCallback(This,device,filter,context,callback,token);
}
static inline HRESULT IGameInput_v3_RegisterKeyboardLayoutCallback(IGameInput_v3* This,IGameInputDevice_v3 *device,void *context,GameInputKeyboardLayoutCallback_v3 callback,GameInputCallbackToken *token) {
    return This->lpVtbl->RegisterKeyboardLayoutCallback(This,device,context,callback,token);
}
static inline void IGameInput_v3_StopCallback(IGameInput_v3* This,GameInputCallbackToken token) {
    This->lpVtbl->StopCallback(This,token);
}
static inline bool IGameInput_v3_UnregisterCallback(IGameInput_v3* This,GameInputCallbackToken token) {
    return This->lpVtbl->UnregisterCallback(This,token);
}
static inline HRESULT IGameInput_v3_CreateDispatcher(IGameInput_v3* This,IGameInputDispatcher **dispatcher) {
    return This->lpVtbl->CreateDispatcher(This,dispatcher);
}
static inline HRESULT IGameInput_v3_FindDeviceFromId(IGameInput_v3* This,const APP_LOCAL_DEVICE_ID *value,IGameInputDevice_v3 **device) {
    return This->lpVtbl->FindDeviceFromId(This,value,device);
}
static inline HRESULT IGameInput_v3_FindDeviceFromPlatformString(IGameInput_v3* This,const WCHAR *value,IGameInputDevice_v3 **device) {
    return This->lpVtbl->FindDeviceFromPlatformString(This,value,device);
}
static inline void IGameInput_v3_SetFocusPolicy(IGameInput_v3* This,GameInputFocusPolicy policy) {
    This->lpVtbl->SetFocusPolicy(This,policy);
}
static inline HRESULT IGameInput_v3_CreateAggregateDevice(IGameInput_v3* This,GameInputKind kind,APP_LOCAL_DEVICE_ID *id) {
    return This->lpVtbl->CreateAggregateDevice(This,kind,id);
}
static inline HRESULT IGameInput_v3_DisableAggregateDevice(IGameInput_v3* This,const APP_LOCAL_DEVICE_ID *id) {
    return This->lpVtbl->DisableAggregateDevice(This,id);
}
#endif
#endif

#endif


#endif  /* __IGameInput_v3_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IGameInputReading_v0 interface
 */
#ifndef __IGameInputReading_v0_INTERFACE_DEFINED__
#define __IGameInputReading_v0_INTERFACE_DEFINED__

DEFINE_GUID(IID_IGameInputReading_v0, 0x2156947a, 0xe1fa, 0x4de0, 0xa3,0x0b, 0xd8,0x12,0x93,0x1d,0xbd,0x8d);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("2156947a-e1fa-4de0-a30b-d812931dbd8d")
IGameInputReading_v0 : public IUnknown
{
    virtual GameInputKind STDMETHODCALLTYPE GetInputKind(
        ) = 0;

    virtual uint64_t STDMETHODCALLTYPE GetSequenceNumber(
        GameInputKind kind) = 0;

    virtual uint64_t STDMETHODCALLTYPE GetTimestamp(
        ) = 0;

    virtual void STDMETHODCALLTYPE GetDevice(
        IGameInputDevice_v0 **device) = 0;

    virtual bool STDMETHODCALLTYPE GetRawReport(
        IGameInputRawDeviceReport_v0 **report) = 0;

    virtual uint32_t STDMETHODCALLTYPE GetControllerAxisCount(
        ) = 0;

    virtual uint32_t STDMETHODCALLTYPE GetControllerAxisState(
        uint32_t count,
        float *state) = 0;

    virtual uint32_t STDMETHODCALLTYPE GetControllerButtonCount(
        ) = 0;

    virtual uint32_t STDMETHODCALLTYPE GetControllerButtonState(
        uint32_t count,
        bool *state) = 0;

    virtual uint32_t STDMETHODCALLTYPE GetControllerSwitchCount(
        ) = 0;

    virtual uint32_t STDMETHODCALLTYPE GetControllerSwitchState(
        uint32_t count,
        GameInputSwitchPosition *state) = 0;

    virtual uint32_t STDMETHODCALLTYPE GetKeyCount(
        ) = 0;

    virtual uint32_t STDMETHODCALLTYPE GetKeyState(
        uint32_t count,
        GameInputKeyState *state) = 0;

    virtual bool STDMETHODCALLTYPE GetMouseState(
        GameInputMouseState_v0 *state) = 0;

    virtual uint32_t STDMETHODCALLTYPE GetTouchCount(
        ) = 0;

    virtual uint32_t STDMETHODCALLTYPE GetTouchState(
        uint32_t count,
        GameInputTouchState *state) = 0;

    virtual bool STDMETHODCALLTYPE GetMotionState(
        GameInputMotionState *state) = 0;

    virtual bool STDMETHODCALLTYPE GetArcadeStickState(
        GameInputArcadeStickState *state) = 0;

    virtual bool STDMETHODCALLTYPE GetFlightStickState(
        GameInputFlightStickState *state) = 0;

    virtual bool STDMETHODCALLTYPE GetGamepadState(
        GameInputGamepadState *state) = 0;

    virtual bool STDMETHODCALLTYPE GetRacingWheelState(
        GameInputRacingWheelState *state) = 0;

    virtual bool STDMETHODCALLTYPE GetUiNavigationState(
        GameInputUiNavigationState *state) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IGameInputReading_v0, 0x2156947a, 0xe1fa, 0x4de0, 0xa3,0x0b, 0xd8,0x12,0x93,0x1d,0xbd,0x8d)
#endif
#else
typedef struct IGameInputReading_v0Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IGameInputReading_v0 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IGameInputReading_v0 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IGameInputReading_v0 *This);

    /*** IGameInputReading_v0 methods ***/
    GameInputKind (STDMETHODCALLTYPE *GetInputKind)(
        IGameInputReading_v0 *This);

    uint64_t (STDMETHODCALLTYPE *GetSequenceNumber)(
        IGameInputReading_v0 *This,
        GameInputKind kind);

    uint64_t (STDMETHODCALLTYPE *GetTimestamp)(
        IGameInputReading_v0 *This);

    void (STDMETHODCALLTYPE *GetDevice)(
        IGameInputReading_v0 *This,
        IGameInputDevice_v0 **device);

    bool (STDMETHODCALLTYPE *GetRawReport)(
        IGameInputReading_v0 *This,
        IGameInputRawDeviceReport_v0 **report);

    uint32_t (STDMETHODCALLTYPE *GetControllerAxisCount)(
        IGameInputReading_v0 *This);

    uint32_t (STDMETHODCALLTYPE *GetControllerAxisState)(
        IGameInputReading_v0 *This,
        uint32_t count,
        float *state);

    uint32_t (STDMETHODCALLTYPE *GetControllerButtonCount)(
        IGameInputReading_v0 *This);

    uint32_t (STDMETHODCALLTYPE *GetControllerButtonState)(
        IGameInputReading_v0 *This,
        uint32_t count,
        bool *state);

    uint32_t (STDMETHODCALLTYPE *GetControllerSwitchCount)(
        IGameInputReading_v0 *This);

    uint32_t (STDMETHODCALLTYPE *GetControllerSwitchState)(
        IGameInputReading_v0 *This,
        uint32_t count,
        GameInputSwitchPosition *state);

    uint32_t (STDMETHODCALLTYPE *GetKeyCount)(
        IGameInputReading_v0 *This);

    uint32_t (STDMETHODCALLTYPE *GetKeyState)(
        IGameInputReading_v0 *This,
        uint32_t count,
        GameInputKeyState *state);

    bool (STDMETHODCALLTYPE *GetMouseState)(
        IGameInputReading_v0 *This,
        GameInputMouseState_v0 *state);

    uint32_t (STDMETHODCALLTYPE *GetTouchCount)(
        IGameInputReading_v0 *This);

    uint32_t (STDMETHODCALLTYPE *GetTouchState)(
        IGameInputReading_v0 *This,
        uint32_t count,
        GameInputTouchState *state);

    bool (STDMETHODCALLTYPE *GetMotionState)(
        IGameInputReading_v0 *This,
        GameInputMotionState *state);

    bool (STDMETHODCALLTYPE *GetArcadeStickState)(
        IGameInputReading_v0 *This,
        GameInputArcadeStickState *state);

    bool (STDMETHODCALLTYPE *GetFlightStickState)(
        IGameInputReading_v0 *This,
        GameInputFlightStickState *state);

    bool (STDMETHODCALLTYPE *GetGamepadState)(
        IGameInputReading_v0 *This,
        GameInputGamepadState *state);

    bool (STDMETHODCALLTYPE *GetRacingWheelState)(
        IGameInputReading_v0 *This,
        GameInputRacingWheelState *state);

    bool (STDMETHODCALLTYPE *GetUiNavigationState)(
        IGameInputReading_v0 *This,
        GameInputUiNavigationState *state);

    END_INTERFACE
} IGameInputReading_v0Vtbl;

interface IGameInputReading_v0 {
    CONST_VTBL IGameInputReading_v0Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IGameInputReading_v0_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IGameInputReading_v0_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IGameInputReading_v0_Release(This) (This)->lpVtbl->Release(This)
/*** IGameInputReading_v0 methods ***/
#define IGameInputReading_v0_GetInputKind(This) (This)->lpVtbl->GetInputKind(This)
#define IGameInputReading_v0_GetSequenceNumber(This,kind) (This)->lpVtbl->GetSequenceNumber(This,kind)
#define IGameInputReading_v0_GetTimestamp(This) (This)->lpVtbl->GetTimestamp(This)
#define IGameInputReading_v0_GetDevice(This,device) (This)->lpVtbl->GetDevice(This,device)
#define IGameInputReading_v0_GetRawReport(This,report) (This)->lpVtbl->GetRawReport(This,report)
#define IGameInputReading_v0_GetControllerAxisCount(This) (This)->lpVtbl->GetControllerAxisCount(This)
#define IGameInputReading_v0_GetControllerAxisState(This,count,state) (This)->lpVtbl->GetControllerAxisState(This,count,state)
#define IGameInputReading_v0_GetControllerButtonCount(This) (This)->lpVtbl->GetControllerButtonCount(This)
#define IGameInputReading_v0_GetControllerButtonState(This,count,state) (This)->lpVtbl->GetControllerButtonState(This,count,state)
#define IGameInputReading_v0_GetControllerSwitchCount(This) (This)->lpVtbl->GetControllerSwitchCount(This)
#define IGameInputReading_v0_GetControllerSwitchState(This,count,state) (This)->lpVtbl->GetControllerSwitchState(This,count,state)
#define IGameInputReading_v0_GetKeyCount(This) (This)->lpVtbl->GetKeyCount(This)
#define IGameInputReading_v0_GetKeyState(This,count,state) (This)->lpVtbl->GetKeyState(This,count,state)
#define IGameInputReading_v0_GetMouseState(This,state) (This)->lpVtbl->GetMouseState(This,state)
#define IGameInputReading_v0_GetTouchCount(This) (This)->lpVtbl->GetTouchCount(This)
#define IGameInputReading_v0_GetTouchState(This,count,state) (This)->lpVtbl->GetTouchState(This,count,state)
#define IGameInputReading_v0_GetMotionState(This,state) (This)->lpVtbl->GetMotionState(This,state)
#define IGameInputReading_v0_GetArcadeStickState(This,state) (This)->lpVtbl->GetArcadeStickState(This,state)
#define IGameInputReading_v0_GetFlightStickState(This,state) (This)->lpVtbl->GetFlightStickState(This,state)
#define IGameInputReading_v0_GetGamepadState(This,state) (This)->lpVtbl->GetGamepadState(This,state)
#define IGameInputReading_v0_GetRacingWheelState(This,state) (This)->lpVtbl->GetRacingWheelState(This,state)
#define IGameInputReading_v0_GetUiNavigationState(This,state) (This)->lpVtbl->GetUiNavigationState(This,state)
#else
/*** IUnknown methods ***/
static inline HRESULT IGameInputReading_v0_QueryInterface(IGameInputReading_v0* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IGameInputReading_v0_AddRef(IGameInputReading_v0* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IGameInputReading_v0_Release(IGameInputReading_v0* This) {
    return This->lpVtbl->Release(This);
}
/*** IGameInputReading_v0 methods ***/
static inline GameInputKind IGameInputReading_v0_GetInputKind(IGameInputReading_v0* This) {
    return This->lpVtbl->GetInputKind(This);
}
static inline uint64_t IGameInputReading_v0_GetSequenceNumber(IGameInputReading_v0* This,GameInputKind kind) {
    return This->lpVtbl->GetSequenceNumber(This,kind);
}
static inline uint64_t IGameInputReading_v0_GetTimestamp(IGameInputReading_v0* This) {
    return This->lpVtbl->GetTimestamp(This);
}
static inline void IGameInputReading_v0_GetDevice(IGameInputReading_v0* This,IGameInputDevice_v0 **device) {
    This->lpVtbl->GetDevice(This,device);
}
static inline bool IGameInputReading_v0_GetRawReport(IGameInputReading_v0* This,IGameInputRawDeviceReport_v0 **report) {
    return This->lpVtbl->GetRawReport(This,report);
}
static inline uint32_t IGameInputReading_v0_GetControllerAxisCount(IGameInputReading_v0* This) {
    return This->lpVtbl->GetControllerAxisCount(This);
}
static inline uint32_t IGameInputReading_v0_GetControllerAxisState(IGameInputReading_v0* This,uint32_t count,float *state) {
    return This->lpVtbl->GetControllerAxisState(This,count,state);
}
static inline uint32_t IGameInputReading_v0_GetControllerButtonCount(IGameInputReading_v0* This) {
    return This->lpVtbl->GetControllerButtonCount(This);
}
static inline uint32_t IGameInputReading_v0_GetControllerButtonState(IGameInputReading_v0* This,uint32_t count,bool *state) {
    return This->lpVtbl->GetControllerButtonState(This,count,state);
}
static inline uint32_t IGameInputReading_v0_GetControllerSwitchCount(IGameInputReading_v0* This) {
    return This->lpVtbl->GetControllerSwitchCount(This);
}
static inline uint32_t IGameInputReading_v0_GetControllerSwitchState(IGameInputReading_v0* This,uint32_t count,GameInputSwitchPosition *state) {
    return This->lpVtbl->GetControllerSwitchState(This,count,state);
}
static inline uint32_t IGameInputReading_v0_GetKeyCount(IGameInputReading_v0* This) {
    return This->lpVtbl->GetKeyCount(This);
}
static inline uint32_t IGameInputReading_v0_GetKeyState(IGameInputReading_v0* This,uint32_t count,GameInputKeyState *state) {
    return This->lpVtbl->GetKeyState(This,count,state);
}
static inline bool IGameInputReading_v0_GetMouseState(IGameInputReading_v0* This,GameInputMouseState_v0 *state) {
    return This->lpVtbl->GetMouseState(This,state);
}
static inline uint32_t IGameInputReading_v0_GetTouchCount(IGameInputReading_v0* This) {
    return This->lpVtbl->GetTouchCount(This);
}
static inline uint32_t IGameInputReading_v0_GetTouchState(IGameInputReading_v0* This,uint32_t count,GameInputTouchState *state) {
    return This->lpVtbl->GetTouchState(This,count,state);
}
static inline bool IGameInputReading_v0_GetMotionState(IGameInputReading_v0* This,GameInputMotionState *state) {
    return This->lpVtbl->GetMotionState(This,state);
}
static inline bool IGameInputReading_v0_GetArcadeStickState(IGameInputReading_v0* This,GameInputArcadeStickState *state) {
    return This->lpVtbl->GetArcadeStickState(This,state);
}
static inline bool IGameInputReading_v0_GetFlightStickState(IGameInputReading_v0* This,GameInputFlightStickState *state) {
    return This->lpVtbl->GetFlightStickState(This,state);
}
static inline bool IGameInputReading_v0_GetGamepadState(IGameInputReading_v0* This,GameInputGamepadState *state) {
    return This->lpVtbl->GetGamepadState(This,state);
}
static inline bool IGameInputReading_v0_GetRacingWheelState(IGameInputReading_v0* This,GameInputRacingWheelState *state) {
    return This->lpVtbl->GetRacingWheelState(This,state);
}
static inline bool IGameInputReading_v0_GetUiNavigationState(IGameInputReading_v0* This,GameInputUiNavigationState *state) {
    return This->lpVtbl->GetUiNavigationState(This,state);
}
#endif
#endif

#endif


#endif  /* __IGameInputReading_v0_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IGameInputReading_v1 interface
 */
#ifndef __IGameInputReading_v1_INTERFACE_DEFINED__
#define __IGameInputReading_v1_INTERFACE_DEFINED__

DEFINE_GUID(IID_IGameInputReading_v1, 0x86318e60, 0x0b3c, 0x40d6, 0xbe,0xfa, 0xc6,0x2f,0x2d,0x95,0x27,0x24);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("86318e60-0b3c-40d6-befa-c62f2d952724")
IGameInputReading_v1 : public IUnknown
{
    virtual GameInputKind STDMETHODCALLTYPE GetInputKind(
        ) = 0;

    virtual uint64_t STDMETHODCALLTYPE GetTimestamp(
        ) = 0;

    virtual void STDMETHODCALLTYPE GetDevice(
        IGameInputDevice_v1 **device) = 0;

    virtual uint32_t STDMETHODCALLTYPE GetControllerAxisCount(
        ) = 0;

    virtual uint32_t STDMETHODCALLTYPE GetControllerAxisState(
        uint32_t count,
        float *state) = 0;

    virtual uint32_t STDMETHODCALLTYPE GetControllerButtonCount(
        ) = 0;

    virtual uint32_t STDMETHODCALLTYPE GetControllerButtonState(
        uint32_t count,
        bool *state) = 0;

    virtual uint32_t STDMETHODCALLTYPE GetControllerSwitchCount(
        ) = 0;

    virtual uint32_t STDMETHODCALLTYPE GetControllerSwitchState(
        uint32_t count,
        GameInputSwitchPosition *state) = 0;

    virtual uint32_t STDMETHODCALLTYPE GetKeyCount(
        ) = 0;

    virtual uint32_t STDMETHODCALLTYPE GetKeyState(
        uint32_t count,
        GameInputKeyState *state) = 0;

    virtual bool STDMETHODCALLTYPE GetMouseState(
        GameInputMouseState_v1 *state) = 0;

    virtual bool STDMETHODCALLTYPE GetArcadeStickState(
        GameInputArcadeStickState *state) = 0;

    virtual bool STDMETHODCALLTYPE GetFlightStickState(
        GameInputFlightStickState *state) = 0;

    virtual bool STDMETHODCALLTYPE GetGamepadState(
        GameInputGamepadState *state) = 0;

    virtual bool STDMETHODCALLTYPE GetRacingWheelState(
        GameInputRacingWheelState *state) = 0;

    virtual bool STDMETHODCALLTYPE GetUiNavigationState(
        GameInputUiNavigationState *state) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IGameInputReading_v1, 0x86318e60, 0x0b3c, 0x40d6, 0xbe,0xfa, 0xc6,0x2f,0x2d,0x95,0x27,0x24)
#endif
#else
typedef struct IGameInputReading_v1Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IGameInputReading_v1 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IGameInputReading_v1 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IGameInputReading_v1 *This);

    /*** IGameInputReading_v1 methods ***/
    GameInputKind (STDMETHODCALLTYPE *GetInputKind)(
        IGameInputReading_v1 *This);

    uint64_t (STDMETHODCALLTYPE *GetTimestamp)(
        IGameInputReading_v1 *This);

    void (STDMETHODCALLTYPE *GetDevice)(
        IGameInputReading_v1 *This,
        IGameInputDevice_v1 **device);

    uint32_t (STDMETHODCALLTYPE *GetControllerAxisCount)(
        IGameInputReading_v1 *This);

    uint32_t (STDMETHODCALLTYPE *GetControllerAxisState)(
        IGameInputReading_v1 *This,
        uint32_t count,
        float *state);

    uint32_t (STDMETHODCALLTYPE *GetControllerButtonCount)(
        IGameInputReading_v1 *This);

    uint32_t (STDMETHODCALLTYPE *GetControllerButtonState)(
        IGameInputReading_v1 *This,
        uint32_t count,
        bool *state);

    uint32_t (STDMETHODCALLTYPE *GetControllerSwitchCount)(
        IGameInputReading_v1 *This);

    uint32_t (STDMETHODCALLTYPE *GetControllerSwitchState)(
        IGameInputReading_v1 *This,
        uint32_t count,
        GameInputSwitchPosition *state);

    uint32_t (STDMETHODCALLTYPE *GetKeyCount)(
        IGameInputReading_v1 *This);

    uint32_t (STDMETHODCALLTYPE *GetKeyState)(
        IGameInputReading_v1 *This,
        uint32_t count,
        GameInputKeyState *state);

    bool (STDMETHODCALLTYPE *GetMouseState)(
        IGameInputReading_v1 *This,
        GameInputMouseState_v1 *state);

    bool (STDMETHODCALLTYPE *GetArcadeStickState)(
        IGameInputReading_v1 *This,
        GameInputArcadeStickState *state);

    bool (STDMETHODCALLTYPE *GetFlightStickState)(
        IGameInputReading_v1 *This,
        GameInputFlightStickState *state);

    bool (STDMETHODCALLTYPE *GetGamepadState)(
        IGameInputReading_v1 *This,
        GameInputGamepadState *state);

    bool (STDMETHODCALLTYPE *GetRacingWheelState)(
        IGameInputReading_v1 *This,
        GameInputRacingWheelState *state);

    bool (STDMETHODCALLTYPE *GetUiNavigationState)(
        IGameInputReading_v1 *This,
        GameInputUiNavigationState *state);

    END_INTERFACE
} IGameInputReading_v1Vtbl;

interface IGameInputReading_v1 {
    CONST_VTBL IGameInputReading_v1Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IGameInputReading_v1_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IGameInputReading_v1_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IGameInputReading_v1_Release(This) (This)->lpVtbl->Release(This)
/*** IGameInputReading_v1 methods ***/
#define IGameInputReading_v1_GetInputKind(This) (This)->lpVtbl->GetInputKind(This)
#define IGameInputReading_v1_GetTimestamp(This) (This)->lpVtbl->GetTimestamp(This)
#define IGameInputReading_v1_GetDevice(This,device) (This)->lpVtbl->GetDevice(This,device)
#define IGameInputReading_v1_GetControllerAxisCount(This) (This)->lpVtbl->GetControllerAxisCount(This)
#define IGameInputReading_v1_GetControllerAxisState(This,count,state) (This)->lpVtbl->GetControllerAxisState(This,count,state)
#define IGameInputReading_v1_GetControllerButtonCount(This) (This)->lpVtbl->GetControllerButtonCount(This)
#define IGameInputReading_v1_GetControllerButtonState(This,count,state) (This)->lpVtbl->GetControllerButtonState(This,count,state)
#define IGameInputReading_v1_GetControllerSwitchCount(This) (This)->lpVtbl->GetControllerSwitchCount(This)
#define IGameInputReading_v1_GetControllerSwitchState(This,count,state) (This)->lpVtbl->GetControllerSwitchState(This,count,state)
#define IGameInputReading_v1_GetKeyCount(This) (This)->lpVtbl->GetKeyCount(This)
#define IGameInputReading_v1_GetKeyState(This,count,state) (This)->lpVtbl->GetKeyState(This,count,state)
#define IGameInputReading_v1_GetMouseState(This,state) (This)->lpVtbl->GetMouseState(This,state)
#define IGameInputReading_v1_GetArcadeStickState(This,state) (This)->lpVtbl->GetArcadeStickState(This,state)
#define IGameInputReading_v1_GetFlightStickState(This,state) (This)->lpVtbl->GetFlightStickState(This,state)
#define IGameInputReading_v1_GetGamepadState(This,state) (This)->lpVtbl->GetGamepadState(This,state)
#define IGameInputReading_v1_GetRacingWheelState(This,state) (This)->lpVtbl->GetRacingWheelState(This,state)
#define IGameInputReading_v1_GetUiNavigationState(This,state) (This)->lpVtbl->GetUiNavigationState(This,state)
#else
/*** IUnknown methods ***/
static inline HRESULT IGameInputReading_v1_QueryInterface(IGameInputReading_v1* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IGameInputReading_v1_AddRef(IGameInputReading_v1* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IGameInputReading_v1_Release(IGameInputReading_v1* This) {
    return This->lpVtbl->Release(This);
}
/*** IGameInputReading_v1 methods ***/
static inline GameInputKind IGameInputReading_v1_GetInputKind(IGameInputReading_v1* This) {
    return This->lpVtbl->GetInputKind(This);
}
static inline uint64_t IGameInputReading_v1_GetTimestamp(IGameInputReading_v1* This) {
    return This->lpVtbl->GetTimestamp(This);
}
static inline void IGameInputReading_v1_GetDevice(IGameInputReading_v1* This,IGameInputDevice_v1 **device) {
    This->lpVtbl->GetDevice(This,device);
}
static inline uint32_t IGameInputReading_v1_GetControllerAxisCount(IGameInputReading_v1* This) {
    return This->lpVtbl->GetControllerAxisCount(This);
}
static inline uint32_t IGameInputReading_v1_GetControllerAxisState(IGameInputReading_v1* This,uint32_t count,float *state) {
    return This->lpVtbl->GetControllerAxisState(This,count,state);
}
static inline uint32_t IGameInputReading_v1_GetControllerButtonCount(IGameInputReading_v1* This) {
    return This->lpVtbl->GetControllerButtonCount(This);
}
static inline uint32_t IGameInputReading_v1_GetControllerButtonState(IGameInputReading_v1* This,uint32_t count,bool *state) {
    return This->lpVtbl->GetControllerButtonState(This,count,state);
}
static inline uint32_t IGameInputReading_v1_GetControllerSwitchCount(IGameInputReading_v1* This) {
    return This->lpVtbl->GetControllerSwitchCount(This);
}
static inline uint32_t IGameInputReading_v1_GetControllerSwitchState(IGameInputReading_v1* This,uint32_t count,GameInputSwitchPosition *state) {
    return This->lpVtbl->GetControllerSwitchState(This,count,state);
}
static inline uint32_t IGameInputReading_v1_GetKeyCount(IGameInputReading_v1* This) {
    return This->lpVtbl->GetKeyCount(This);
}
static inline uint32_t IGameInputReading_v1_GetKeyState(IGameInputReading_v1* This,uint32_t count,GameInputKeyState *state) {
    return This->lpVtbl->GetKeyState(This,count,state);
}
static inline bool IGameInputReading_v1_GetMouseState(IGameInputReading_v1* This,GameInputMouseState_v1 *state) {
    return This->lpVtbl->GetMouseState(This,state);
}
static inline bool IGameInputReading_v1_GetArcadeStickState(IGameInputReading_v1* This,GameInputArcadeStickState *state) {
    return This->lpVtbl->GetArcadeStickState(This,state);
}
static inline bool IGameInputReading_v1_GetFlightStickState(IGameInputReading_v1* This,GameInputFlightStickState *state) {
    return This->lpVtbl->GetFlightStickState(This,state);
}
static inline bool IGameInputReading_v1_GetGamepadState(IGameInputReading_v1* This,GameInputGamepadState *state) {
    return This->lpVtbl->GetGamepadState(This,state);
}
static inline bool IGameInputReading_v1_GetRacingWheelState(IGameInputReading_v1* This,GameInputRacingWheelState *state) {
    return This->lpVtbl->GetRacingWheelState(This,state);
}
static inline bool IGameInputReading_v1_GetUiNavigationState(IGameInputReading_v1* This,GameInputUiNavigationState *state) {
    return This->lpVtbl->GetUiNavigationState(This,state);
}
#endif
#endif

#endif


#endif  /* __IGameInputReading_v1_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IGameInputReading_v2 interface
 */
#ifndef __IGameInputReading_v2_INTERFACE_DEFINED__
#define __IGameInputReading_v2_INTERFACE_DEFINED__

DEFINE_GUID(IID_IGameInputReading_v2, 0x65f06483, 0xdb76, 0x40b7, 0xb7,0x45, 0xf5,0x91,0xfa,0xe5,0x5f,0xc9);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("65f06483-db76-40b7-b745-f591fae55fc9")
IGameInputReading_v2 : public IUnknown
{
    virtual GameInputKind STDMETHODCALLTYPE GetInputKind(
        ) = 0;

    virtual uint64_t STDMETHODCALLTYPE GetTimestamp(
        ) = 0;

    virtual void STDMETHODCALLTYPE GetDevice(
        IGameInputDevice_v2 **device) = 0;

    virtual uint32_t STDMETHODCALLTYPE GetControllerAxisCount(
        ) = 0;

    virtual uint32_t STDMETHODCALLTYPE GetControllerAxisState(
        uint32_t count,
        float *state) = 0;

    virtual uint32_t STDMETHODCALLTYPE GetControllerButtonCount(
        ) = 0;

    virtual uint32_t STDMETHODCALLTYPE GetControllerButtonState(
        uint32_t count,
        bool *state) = 0;

    virtual uint32_t STDMETHODCALLTYPE GetControllerSwitchCount(
        ) = 0;

    virtual uint32_t STDMETHODCALLTYPE GetControllerSwitchState(
        uint32_t count,
        GameInputSwitchPosition *state) = 0;

    virtual uint32_t STDMETHODCALLTYPE GetKeyCount(
        ) = 0;

    virtual uint32_t STDMETHODCALLTYPE GetKeyState(
        uint32_t count,
        GameInputKeyState *state) = 0;

    virtual bool STDMETHODCALLTYPE GetMouseState(
        GameInputMouseState_v2 *state) = 0;

    virtual bool STDMETHODCALLTYPE GetSensorsState(
        GameInputSensorsState *state) = 0;

    virtual bool STDMETHODCALLTYPE GetArcadeStickState(
        GameInputArcadeStickState *state) = 0;

    virtual bool STDMETHODCALLTYPE GetFlightStickState(
        GameInputFlightStickState *state) = 0;

    virtual bool STDMETHODCALLTYPE GetGamepadState(
        GameInputGamepadState *state) = 0;

    virtual bool STDMETHODCALLTYPE GetRacingWheelState(
        GameInputRacingWheelState *state) = 0;

    virtual bool STDMETHODCALLTYPE GetUiNavigationState(
        GameInputUiNavigationState *state) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IGameInputReading_v2, 0x65f06483, 0xdb76, 0x40b7, 0xb7,0x45, 0xf5,0x91,0xfa,0xe5,0x5f,0xc9)
#endif
#else
typedef struct IGameInputReading_v2Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IGameInputReading_v2 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IGameInputReading_v2 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IGameInputReading_v2 *This);

    /*** IGameInputReading_v2 methods ***/
    GameInputKind (STDMETHODCALLTYPE *GetInputKind)(
        IGameInputReading_v2 *This);

    uint64_t (STDMETHODCALLTYPE *GetTimestamp)(
        IGameInputReading_v2 *This);

    void (STDMETHODCALLTYPE *GetDevice)(
        IGameInputReading_v2 *This,
        IGameInputDevice_v2 **device);

    uint32_t (STDMETHODCALLTYPE *GetControllerAxisCount)(
        IGameInputReading_v2 *This);

    uint32_t (STDMETHODCALLTYPE *GetControllerAxisState)(
        IGameInputReading_v2 *This,
        uint32_t count,
        float *state);

    uint32_t (STDMETHODCALLTYPE *GetControllerButtonCount)(
        IGameInputReading_v2 *This);

    uint32_t (STDMETHODCALLTYPE *GetControllerButtonState)(
        IGameInputReading_v2 *This,
        uint32_t count,
        bool *state);

    uint32_t (STDMETHODCALLTYPE *GetControllerSwitchCount)(
        IGameInputReading_v2 *This);

    uint32_t (STDMETHODCALLTYPE *GetControllerSwitchState)(
        IGameInputReading_v2 *This,
        uint32_t count,
        GameInputSwitchPosition *state);

    uint32_t (STDMETHODCALLTYPE *GetKeyCount)(
        IGameInputReading_v2 *This);

    uint32_t (STDMETHODCALLTYPE *GetKeyState)(
        IGameInputReading_v2 *This,
        uint32_t count,
        GameInputKeyState *state);

    bool (STDMETHODCALLTYPE *GetMouseState)(
        IGameInputReading_v2 *This,
        GameInputMouseState_v2 *state);

    bool (STDMETHODCALLTYPE *GetSensorsState)(
        IGameInputReading_v2 *This,
        GameInputSensorsState *state);

    bool (STDMETHODCALLTYPE *GetArcadeStickState)(
        IGameInputReading_v2 *This,
        GameInputArcadeStickState *state);

    bool (STDMETHODCALLTYPE *GetFlightStickState)(
        IGameInputReading_v2 *This,
        GameInputFlightStickState *state);

    bool (STDMETHODCALLTYPE *GetGamepadState)(
        IGameInputReading_v2 *This,
        GameInputGamepadState *state);

    bool (STDMETHODCALLTYPE *GetRacingWheelState)(
        IGameInputReading_v2 *This,
        GameInputRacingWheelState *state);

    bool (STDMETHODCALLTYPE *GetUiNavigationState)(
        IGameInputReading_v2 *This,
        GameInputUiNavigationState *state);

    END_INTERFACE
} IGameInputReading_v2Vtbl;

interface IGameInputReading_v2 {
    CONST_VTBL IGameInputReading_v2Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IGameInputReading_v2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IGameInputReading_v2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IGameInputReading_v2_Release(This) (This)->lpVtbl->Release(This)
/*** IGameInputReading_v2 methods ***/
#define IGameInputReading_v2_GetInputKind(This) (This)->lpVtbl->GetInputKind(This)
#define IGameInputReading_v2_GetTimestamp(This) (This)->lpVtbl->GetTimestamp(This)
#define IGameInputReading_v2_GetDevice(This,device) (This)->lpVtbl->GetDevice(This,device)
#define IGameInputReading_v2_GetControllerAxisCount(This) (This)->lpVtbl->GetControllerAxisCount(This)
#define IGameInputReading_v2_GetControllerAxisState(This,count,state) (This)->lpVtbl->GetControllerAxisState(This,count,state)
#define IGameInputReading_v2_GetControllerButtonCount(This) (This)->lpVtbl->GetControllerButtonCount(This)
#define IGameInputReading_v2_GetControllerButtonState(This,count,state) (This)->lpVtbl->GetControllerButtonState(This,count,state)
#define IGameInputReading_v2_GetControllerSwitchCount(This) (This)->lpVtbl->GetControllerSwitchCount(This)
#define IGameInputReading_v2_GetControllerSwitchState(This,count,state) (This)->lpVtbl->GetControllerSwitchState(This,count,state)
#define IGameInputReading_v2_GetKeyCount(This) (This)->lpVtbl->GetKeyCount(This)
#define IGameInputReading_v2_GetKeyState(This,count,state) (This)->lpVtbl->GetKeyState(This,count,state)
#define IGameInputReading_v2_GetMouseState(This,state) (This)->lpVtbl->GetMouseState(This,state)
#define IGameInputReading_v2_GetSensorsState(This,state) (This)->lpVtbl->GetSensorsState(This,state)
#define IGameInputReading_v2_GetArcadeStickState(This,state) (This)->lpVtbl->GetArcadeStickState(This,state)
#define IGameInputReading_v2_GetFlightStickState(This,state) (This)->lpVtbl->GetFlightStickState(This,state)
#define IGameInputReading_v2_GetGamepadState(This,state) (This)->lpVtbl->GetGamepadState(This,state)
#define IGameInputReading_v2_GetRacingWheelState(This,state) (This)->lpVtbl->GetRacingWheelState(This,state)
#define IGameInputReading_v2_GetUiNavigationState(This,state) (This)->lpVtbl->GetUiNavigationState(This,state)
#else
/*** IUnknown methods ***/
static inline HRESULT IGameInputReading_v2_QueryInterface(IGameInputReading_v2* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IGameInputReading_v2_AddRef(IGameInputReading_v2* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IGameInputReading_v2_Release(IGameInputReading_v2* This) {
    return This->lpVtbl->Release(This);
}
/*** IGameInputReading_v2 methods ***/
static inline GameInputKind IGameInputReading_v2_GetInputKind(IGameInputReading_v2* This) {
    return This->lpVtbl->GetInputKind(This);
}
static inline uint64_t IGameInputReading_v2_GetTimestamp(IGameInputReading_v2* This) {
    return This->lpVtbl->GetTimestamp(This);
}
static inline void IGameInputReading_v2_GetDevice(IGameInputReading_v2* This,IGameInputDevice_v2 **device) {
    This->lpVtbl->GetDevice(This,device);
}
static inline uint32_t IGameInputReading_v2_GetControllerAxisCount(IGameInputReading_v2* This) {
    return This->lpVtbl->GetControllerAxisCount(This);
}
static inline uint32_t IGameInputReading_v2_GetControllerAxisState(IGameInputReading_v2* This,uint32_t count,float *state) {
    return This->lpVtbl->GetControllerAxisState(This,count,state);
}
static inline uint32_t IGameInputReading_v2_GetControllerButtonCount(IGameInputReading_v2* This) {
    return This->lpVtbl->GetControllerButtonCount(This);
}
static inline uint32_t IGameInputReading_v2_GetControllerButtonState(IGameInputReading_v2* This,uint32_t count,bool *state) {
    return This->lpVtbl->GetControllerButtonState(This,count,state);
}
static inline uint32_t IGameInputReading_v2_GetControllerSwitchCount(IGameInputReading_v2* This) {
    return This->lpVtbl->GetControllerSwitchCount(This);
}
static inline uint32_t IGameInputReading_v2_GetControllerSwitchState(IGameInputReading_v2* This,uint32_t count,GameInputSwitchPosition *state) {
    return This->lpVtbl->GetControllerSwitchState(This,count,state);
}
static inline uint32_t IGameInputReading_v2_GetKeyCount(IGameInputReading_v2* This) {
    return This->lpVtbl->GetKeyCount(This);
}
static inline uint32_t IGameInputReading_v2_GetKeyState(IGameInputReading_v2* This,uint32_t count,GameInputKeyState *state) {
    return This->lpVtbl->GetKeyState(This,count,state);
}
static inline bool IGameInputReading_v2_GetMouseState(IGameInputReading_v2* This,GameInputMouseState_v2 *state) {
    return This->lpVtbl->GetMouseState(This,state);
}
static inline bool IGameInputReading_v2_GetSensorsState(IGameInputReading_v2* This,GameInputSensorsState *state) {
    return This->lpVtbl->GetSensorsState(This,state);
}
static inline bool IGameInputReading_v2_GetArcadeStickState(IGameInputReading_v2* This,GameInputArcadeStickState *state) {
    return This->lpVtbl->GetArcadeStickState(This,state);
}
static inline bool IGameInputReading_v2_GetFlightStickState(IGameInputReading_v2* This,GameInputFlightStickState *state) {
    return This->lpVtbl->GetFlightStickState(This,state);
}
static inline bool IGameInputReading_v2_GetGamepadState(IGameInputReading_v2* This,GameInputGamepadState *state) {
    return This->lpVtbl->GetGamepadState(This,state);
}
static inline bool IGameInputReading_v2_GetRacingWheelState(IGameInputReading_v2* This,GameInputRacingWheelState *state) {
    return This->lpVtbl->GetRacingWheelState(This,state);
}
static inline bool IGameInputReading_v2_GetUiNavigationState(IGameInputReading_v2* This,GameInputUiNavigationState *state) {
    return This->lpVtbl->GetUiNavigationState(This,state);
}
#endif
#endif

#endif


#endif  /* __IGameInputReading_v2_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IGameInputReading_v3 interface
 */
#ifndef __IGameInputReading_v3_INTERFACE_DEFINED__
#define __IGameInputReading_v3_INTERFACE_DEFINED__

DEFINE_GUID(IID_IGameInputReading_v3, 0xc81c4cde, 0xed1a, 0x4631, 0xa3,0x0f, 0xc5,0x56,0xa6,0x24,0x1a,0x1f);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("c81c4cde-ed1a-4631-a30f-c556a6241a1f")
IGameInputReading_v3 : public IUnknown
{
    virtual GameInputKind STDMETHODCALLTYPE GetInputKind(
        ) = 0;

    virtual uint64_t STDMETHODCALLTYPE GetTimestamp(
        ) = 0;

    virtual void STDMETHODCALLTYPE GetDevice(
        IGameInputDevice_v3 **device) = 0;

    virtual uint32_t STDMETHODCALLTYPE GetControllerAxisCount(
        ) = 0;

    virtual uint32_t STDMETHODCALLTYPE GetControllerAxisState(
        uint32_t count,
        float *state) = 0;

    virtual uint32_t STDMETHODCALLTYPE GetControllerButtonCount(
        ) = 0;

    virtual uint32_t STDMETHODCALLTYPE GetControllerButtonState(
        uint32_t count,
        bool *state) = 0;

    virtual uint32_t STDMETHODCALLTYPE GetControllerSwitchCount(
        ) = 0;

    virtual uint32_t STDMETHODCALLTYPE GetControllerSwitchState(
        uint32_t count,
        GameInputSwitchPosition *state) = 0;

    virtual uint32_t STDMETHODCALLTYPE GetKeyCount(
        ) = 0;

    virtual uint32_t STDMETHODCALLTYPE GetKeyState(
        uint32_t count,
        GameInputKeyState *state) = 0;

    virtual bool STDMETHODCALLTYPE GetMouseState(
        GameInputMouseState_v3 *state) = 0;

    virtual bool STDMETHODCALLTYPE GetSensorsState(
        GameInputSensorsState *state) = 0;

    virtual bool STDMETHODCALLTYPE GetArcadeStickState(
        GameInputArcadeStickState *state) = 0;

    virtual bool STDMETHODCALLTYPE GetFlightStickState(
        GameInputFlightStickState *state) = 0;

    virtual bool STDMETHODCALLTYPE GetGamepadState(
        GameInputGamepadState *state) = 0;

    virtual bool STDMETHODCALLTYPE GetRacingWheelState(
        GameInputRacingWheelState *state) = 0;

    virtual bool STDMETHODCALLTYPE GetRawReport(
        IGameInputRawDeviceReport_v3 **report) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IGameInputReading_v3, 0xc81c4cde, 0xed1a, 0x4631, 0xa3,0x0f, 0xc5,0x56,0xa6,0x24,0x1a,0x1f)
#endif
#else
typedef struct IGameInputReading_v3Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IGameInputReading_v3 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IGameInputReading_v3 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IGameInputReading_v3 *This);

    /*** IGameInputReading_v3 methods ***/
    GameInputKind (STDMETHODCALLTYPE *GetInputKind)(
        IGameInputReading_v3 *This);

    uint64_t (STDMETHODCALLTYPE *GetTimestamp)(
        IGameInputReading_v3 *This);

    void (STDMETHODCALLTYPE *GetDevice)(
        IGameInputReading_v3 *This,
        IGameInputDevice_v3 **device);

    uint32_t (STDMETHODCALLTYPE *GetControllerAxisCount)(
        IGameInputReading_v3 *This);

    uint32_t (STDMETHODCALLTYPE *GetControllerAxisState)(
        IGameInputReading_v3 *This,
        uint32_t count,
        float *state);

    uint32_t (STDMETHODCALLTYPE *GetControllerButtonCount)(
        IGameInputReading_v3 *This);

    uint32_t (STDMETHODCALLTYPE *GetControllerButtonState)(
        IGameInputReading_v3 *This,
        uint32_t count,
        bool *state);

    uint32_t (STDMETHODCALLTYPE *GetControllerSwitchCount)(
        IGameInputReading_v3 *This);

    uint32_t (STDMETHODCALLTYPE *GetControllerSwitchState)(
        IGameInputReading_v3 *This,
        uint32_t count,
        GameInputSwitchPosition *state);

    uint32_t (STDMETHODCALLTYPE *GetKeyCount)(
        IGameInputReading_v3 *This);

    uint32_t (STDMETHODCALLTYPE *GetKeyState)(
        IGameInputReading_v3 *This,
        uint32_t count,
        GameInputKeyState *state);

    bool (STDMETHODCALLTYPE *GetMouseState)(
        IGameInputReading_v3 *This,
        GameInputMouseState_v3 *state);

    bool (STDMETHODCALLTYPE *GetSensorsState)(
        IGameInputReading_v3 *This,
        GameInputSensorsState *state);

    bool (STDMETHODCALLTYPE *GetArcadeStickState)(
        IGameInputReading_v3 *This,
        GameInputArcadeStickState *state);

    bool (STDMETHODCALLTYPE *GetFlightStickState)(
        IGameInputReading_v3 *This,
        GameInputFlightStickState *state);

    bool (STDMETHODCALLTYPE *GetGamepadState)(
        IGameInputReading_v3 *This,
        GameInputGamepadState *state);

    bool (STDMETHODCALLTYPE *GetRacingWheelState)(
        IGameInputReading_v3 *This,
        GameInputRacingWheelState *state);

    bool (STDMETHODCALLTYPE *GetRawReport)(
        IGameInputReading_v3 *This,
        IGameInputRawDeviceReport_v3 **report);

    END_INTERFACE
} IGameInputReading_v3Vtbl;

interface IGameInputReading_v3 {
    CONST_VTBL IGameInputReading_v3Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IGameInputReading_v3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IGameInputReading_v3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IGameInputReading_v3_Release(This) (This)->lpVtbl->Release(This)
/*** IGameInputReading_v3 methods ***/
#define IGameInputReading_v3_GetInputKind(This) (This)->lpVtbl->GetInputKind(This)
#define IGameInputReading_v3_GetTimestamp(This) (This)->lpVtbl->GetTimestamp(This)
#define IGameInputReading_v3_GetDevice(This,device) (This)->lpVtbl->GetDevice(This,device)
#define IGameInputReading_v3_GetControllerAxisCount(This) (This)->lpVtbl->GetControllerAxisCount(This)
#define IGameInputReading_v3_GetControllerAxisState(This,count,state) (This)->lpVtbl->GetControllerAxisState(This,count,state)
#define IGameInputReading_v3_GetControllerButtonCount(This) (This)->lpVtbl->GetControllerButtonCount(This)
#define IGameInputReading_v3_GetControllerButtonState(This,count,state) (This)->lpVtbl->GetControllerButtonState(This,count,state)
#define IGameInputReading_v3_GetControllerSwitchCount(This) (This)->lpVtbl->GetControllerSwitchCount(This)
#define IGameInputReading_v3_GetControllerSwitchState(This,count,state) (This)->lpVtbl->GetControllerSwitchState(This,count,state)
#define IGameInputReading_v3_GetKeyCount(This) (This)->lpVtbl->GetKeyCount(This)
#define IGameInputReading_v3_GetKeyState(This,count,state) (This)->lpVtbl->GetKeyState(This,count,state)
#define IGameInputReading_v3_GetMouseState(This,state) (This)->lpVtbl->GetMouseState(This,state)
#define IGameInputReading_v3_GetSensorsState(This,state) (This)->lpVtbl->GetSensorsState(This,state)
#define IGameInputReading_v3_GetArcadeStickState(This,state) (This)->lpVtbl->GetArcadeStickState(This,state)
#define IGameInputReading_v3_GetFlightStickState(This,state) (This)->lpVtbl->GetFlightStickState(This,state)
#define IGameInputReading_v3_GetGamepadState(This,state) (This)->lpVtbl->GetGamepadState(This,state)
#define IGameInputReading_v3_GetRacingWheelState(This,state) (This)->lpVtbl->GetRacingWheelState(This,state)
#define IGameInputReading_v3_GetRawReport(This,report) (This)->lpVtbl->GetRawReport(This,report)
#else
/*** IUnknown methods ***/
static inline HRESULT IGameInputReading_v3_QueryInterface(IGameInputReading_v3* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IGameInputReading_v3_AddRef(IGameInputReading_v3* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IGameInputReading_v3_Release(IGameInputReading_v3* This) {
    return This->lpVtbl->Release(This);
}
/*** IGameInputReading_v3 methods ***/
static inline GameInputKind IGameInputReading_v3_GetInputKind(IGameInputReading_v3* This) {
    return This->lpVtbl->GetInputKind(This);
}
static inline uint64_t IGameInputReading_v3_GetTimestamp(IGameInputReading_v3* This) {
    return This->lpVtbl->GetTimestamp(This);
}
static inline void IGameInputReading_v3_GetDevice(IGameInputReading_v3* This,IGameInputDevice_v3 **device) {
    This->lpVtbl->GetDevice(This,device);
}
static inline uint32_t IGameInputReading_v3_GetControllerAxisCount(IGameInputReading_v3* This) {
    return This->lpVtbl->GetControllerAxisCount(This);
}
static inline uint32_t IGameInputReading_v3_GetControllerAxisState(IGameInputReading_v3* This,uint32_t count,float *state) {
    return This->lpVtbl->GetControllerAxisState(This,count,state);
}
static inline uint32_t IGameInputReading_v3_GetControllerButtonCount(IGameInputReading_v3* This) {
    return This->lpVtbl->GetControllerButtonCount(This);
}
static inline uint32_t IGameInputReading_v3_GetControllerButtonState(IGameInputReading_v3* This,uint32_t count,bool *state) {
    return This->lpVtbl->GetControllerButtonState(This,count,state);
}
static inline uint32_t IGameInputReading_v3_GetControllerSwitchCount(IGameInputReading_v3* This) {
    return This->lpVtbl->GetControllerSwitchCount(This);
}
static inline uint32_t IGameInputReading_v3_GetControllerSwitchState(IGameInputReading_v3* This,uint32_t count,GameInputSwitchPosition *state) {
    return This->lpVtbl->GetControllerSwitchState(This,count,state);
}
static inline uint32_t IGameInputReading_v3_GetKeyCount(IGameInputReading_v3* This) {
    return This->lpVtbl->GetKeyCount(This);
}
static inline uint32_t IGameInputReading_v3_GetKeyState(IGameInputReading_v3* This,uint32_t count,GameInputKeyState *state) {
    return This->lpVtbl->GetKeyState(This,count,state);
}
static inline bool IGameInputReading_v3_GetMouseState(IGameInputReading_v3* This,GameInputMouseState_v3 *state) {
    return This->lpVtbl->GetMouseState(This,state);
}
static inline bool IGameInputReading_v3_GetSensorsState(IGameInputReading_v3* This,GameInputSensorsState *state) {
    return This->lpVtbl->GetSensorsState(This,state);
}
static inline bool IGameInputReading_v3_GetArcadeStickState(IGameInputReading_v3* This,GameInputArcadeStickState *state) {
    return This->lpVtbl->GetArcadeStickState(This,state);
}
static inline bool IGameInputReading_v3_GetFlightStickState(IGameInputReading_v3* This,GameInputFlightStickState *state) {
    return This->lpVtbl->GetFlightStickState(This,state);
}
static inline bool IGameInputReading_v3_GetGamepadState(IGameInputReading_v3* This,GameInputGamepadState *state) {
    return This->lpVtbl->GetGamepadState(This,state);
}
static inline bool IGameInputReading_v3_GetRacingWheelState(IGameInputReading_v3* This,GameInputRacingWheelState *state) {
    return This->lpVtbl->GetRacingWheelState(This,state);
}
static inline bool IGameInputReading_v3_GetRawReport(IGameInputReading_v3* This,IGameInputRawDeviceReport_v3 **report) {
    return This->lpVtbl->GetRawReport(This,report);
}
#endif
#endif

#endif


#endif  /* __IGameInputReading_v3_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IGameInputDevice_v0 interface
 */
#ifndef __IGameInputDevice_v0_INTERFACE_DEFINED__
#define __IGameInputDevice_v0_INTERFACE_DEFINED__

DEFINE_GUID(IID_IGameInputDevice_v0, 0x31dd86fb, 0x4c1b, 0x408a, 0x86,0x8f, 0x43,0x9b,0x3c,0xd4,0x71,0x25);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("31dd86fb-4c1b-408a-868f-439b3cd47125")
IGameInputDevice_v0 : public IUnknown
{
    virtual const GameInputDeviceInfo_v0 * STDMETHODCALLTYPE GetDeviceInfo(
        ) = 0;

    virtual GameInputDeviceStatus STDMETHODCALLTYPE GetDeviceStatus(
        ) = 0;

    virtual void STDMETHODCALLTYPE GetBatteryState(
        GameInputBatteryState *state) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateForceFeedbackEffect(
        uint32_t motor,
        const GameInputForceFeedbackParams *params,
        IGameInputForceFeedbackEffect_v0 **effect) = 0;

    virtual bool STDMETHODCALLTYPE IsForceFeedbackMotorPoweredOn(
        uint32_t motor) = 0;

    virtual void STDMETHODCALLTYPE SetForceFeedbackMotorGain(
        uint32_t motor,
        float gain) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetHapticMotorState(
        uint32_t motor,
        const GameInputHapticFeedbackParams *params) = 0;

    virtual void STDMETHODCALLTYPE SetRumbleState(
        const GameInputRumbleParams *params) = 0;

    virtual void STDMETHODCALLTYPE SetInputSynchronizationState(
        bool enabled) = 0;

    virtual void STDMETHODCALLTYPE SendInputSynchronizationHint(
        ) = 0;

    virtual void STDMETHODCALLTYPE PowerOff(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateRawDeviceReport(
        uint32_t id,
        GameInputRawDeviceReportKind kind,
        IGameInputRawDeviceReport_v0 **report) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetRawDeviceFeature(
        uint32_t id,
        IGameInputRawDeviceReport_v0 **report) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetRawDeviceFeature(
        IGameInputRawDeviceReport_v0 *report) = 0;

    virtual HRESULT STDMETHODCALLTYPE SendRawDeviceOutput(
        IGameInputRawDeviceReport_v0 *report) = 0;

    virtual HRESULT STDMETHODCALLTYPE SendRawDeviceOutputWithResponse(
        IGameInputRawDeviceReport_v0 *request,
        IGameInputRawDeviceReport_v0 **reply) = 0;

    virtual HRESULT STDMETHODCALLTYPE ExecuteRawDeviceIoControl(
        uint32_t code,
        size_t in_size,
        const void *input,
        size_t out_size,
        void *output,
        size_t *size) = 0;

    virtual bool STDMETHODCALLTYPE AcquireExclusiveRawDeviceAccess(
        uint64_t timeout_ms) = 0;

    virtual void STDMETHODCALLTYPE ReleaseExclusiveRawDeviceAccess(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IGameInputDevice_v0, 0x31dd86fb, 0x4c1b, 0x408a, 0x86,0x8f, 0x43,0x9b,0x3c,0xd4,0x71,0x25)
#endif
#else
typedef struct IGameInputDevice_v0Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IGameInputDevice_v0 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IGameInputDevice_v0 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IGameInputDevice_v0 *This);

    /*** IGameInputDevice_v0 methods ***/
    const GameInputDeviceInfo_v0 * (STDMETHODCALLTYPE *GetDeviceInfo)(
        IGameInputDevice_v0 *This);

    GameInputDeviceStatus (STDMETHODCALLTYPE *GetDeviceStatus)(
        IGameInputDevice_v0 *This);

    void (STDMETHODCALLTYPE *GetBatteryState)(
        IGameInputDevice_v0 *This,
        GameInputBatteryState *state);

    HRESULT (STDMETHODCALLTYPE *CreateForceFeedbackEffect)(
        IGameInputDevice_v0 *This,
        uint32_t motor,
        const GameInputForceFeedbackParams *params,
        IGameInputForceFeedbackEffect_v0 **effect);

    bool (STDMETHODCALLTYPE *IsForceFeedbackMotorPoweredOn)(
        IGameInputDevice_v0 *This,
        uint32_t motor);

    void (STDMETHODCALLTYPE *SetForceFeedbackMotorGain)(
        IGameInputDevice_v0 *This,
        uint32_t motor,
        float gain);

    HRESULT (STDMETHODCALLTYPE *SetHapticMotorState)(
        IGameInputDevice_v0 *This,
        uint32_t motor,
        const GameInputHapticFeedbackParams *params);

    void (STDMETHODCALLTYPE *SetRumbleState)(
        IGameInputDevice_v0 *This,
        const GameInputRumbleParams *params);

    void (STDMETHODCALLTYPE *SetInputSynchronizationState)(
        IGameInputDevice_v0 *This,
        bool enabled);

    void (STDMETHODCALLTYPE *SendInputSynchronizationHint)(
        IGameInputDevice_v0 *This);

    void (STDMETHODCALLTYPE *PowerOff)(
        IGameInputDevice_v0 *This);

    HRESULT (STDMETHODCALLTYPE *CreateRawDeviceReport)(
        IGameInputDevice_v0 *This,
        uint32_t id,
        GameInputRawDeviceReportKind kind,
        IGameInputRawDeviceReport_v0 **report);

    HRESULT (STDMETHODCALLTYPE *GetRawDeviceFeature)(
        IGameInputDevice_v0 *This,
        uint32_t id,
        IGameInputRawDeviceReport_v0 **report);

    HRESULT (STDMETHODCALLTYPE *SetRawDeviceFeature)(
        IGameInputDevice_v0 *This,
        IGameInputRawDeviceReport_v0 *report);

    HRESULT (STDMETHODCALLTYPE *SendRawDeviceOutput)(
        IGameInputDevice_v0 *This,
        IGameInputRawDeviceReport_v0 *report);

    HRESULT (STDMETHODCALLTYPE *SendRawDeviceOutputWithResponse)(
        IGameInputDevice_v0 *This,
        IGameInputRawDeviceReport_v0 *request,
        IGameInputRawDeviceReport_v0 **reply);

    HRESULT (STDMETHODCALLTYPE *ExecuteRawDeviceIoControl)(
        IGameInputDevice_v0 *This,
        uint32_t code,
        size_t in_size,
        const void *input,
        size_t out_size,
        void *output,
        size_t *size);

    bool (STDMETHODCALLTYPE *AcquireExclusiveRawDeviceAccess)(
        IGameInputDevice_v0 *This,
        uint64_t timeout_ms);

    void (STDMETHODCALLTYPE *ReleaseExclusiveRawDeviceAccess)(
        IGameInputDevice_v0 *This);

    END_INTERFACE
} IGameInputDevice_v0Vtbl;

interface IGameInputDevice_v0 {
    CONST_VTBL IGameInputDevice_v0Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IGameInputDevice_v0_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IGameInputDevice_v0_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IGameInputDevice_v0_Release(This) (This)->lpVtbl->Release(This)
/*** IGameInputDevice_v0 methods ***/
#define IGameInputDevice_v0_GetDeviceInfo(This) (This)->lpVtbl->GetDeviceInfo(This)
#define IGameInputDevice_v0_GetDeviceStatus(This) (This)->lpVtbl->GetDeviceStatus(This)
#define IGameInputDevice_v0_GetBatteryState(This,state) (This)->lpVtbl->GetBatteryState(This,state)
#define IGameInputDevice_v0_CreateForceFeedbackEffect(This,motor,params,effect) (This)->lpVtbl->CreateForceFeedbackEffect(This,motor,params,effect)
#define IGameInputDevice_v0_IsForceFeedbackMotorPoweredOn(This,motor) (This)->lpVtbl->IsForceFeedbackMotorPoweredOn(This,motor)
#define IGameInputDevice_v0_SetForceFeedbackMotorGain(This,motor,gain) (This)->lpVtbl->SetForceFeedbackMotorGain(This,motor,gain)
#define IGameInputDevice_v0_SetHapticMotorState(This,motor,params) (This)->lpVtbl->SetHapticMotorState(This,motor,params)
#define IGameInputDevice_v0_SetRumbleState(This,params) (This)->lpVtbl->SetRumbleState(This,params)
#define IGameInputDevice_v0_SetInputSynchronizationState(This,enabled) (This)->lpVtbl->SetInputSynchronizationState(This,enabled)
#define IGameInputDevice_v0_SendInputSynchronizationHint(This) (This)->lpVtbl->SendInputSynchronizationHint(This)
#define IGameInputDevice_v0_PowerOff(This) (This)->lpVtbl->PowerOff(This)
#define IGameInputDevice_v0_CreateRawDeviceReport(This,id,kind,report) (This)->lpVtbl->CreateRawDeviceReport(This,id,kind,report)
#define IGameInputDevice_v0_GetRawDeviceFeature(This,id,report) (This)->lpVtbl->GetRawDeviceFeature(This,id,report)
#define IGameInputDevice_v0_SetRawDeviceFeature(This,report) (This)->lpVtbl->SetRawDeviceFeature(This,report)
#define IGameInputDevice_v0_SendRawDeviceOutput(This,report) (This)->lpVtbl->SendRawDeviceOutput(This,report)
#define IGameInputDevice_v0_SendRawDeviceOutputWithResponse(This,request,reply) (This)->lpVtbl->SendRawDeviceOutputWithResponse(This,request,reply)
#define IGameInputDevice_v0_ExecuteRawDeviceIoControl(This,code,in_size,input,out_size,output,size) (This)->lpVtbl->ExecuteRawDeviceIoControl(This,code,in_size,input,out_size,output,size)
#define IGameInputDevice_v0_AcquireExclusiveRawDeviceAccess(This,timeout_ms) (This)->lpVtbl->AcquireExclusiveRawDeviceAccess(This,timeout_ms)
#define IGameInputDevice_v0_ReleaseExclusiveRawDeviceAccess(This) (This)->lpVtbl->ReleaseExclusiveRawDeviceAccess(This)
#else
/*** IUnknown methods ***/
static inline HRESULT IGameInputDevice_v0_QueryInterface(IGameInputDevice_v0* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IGameInputDevice_v0_AddRef(IGameInputDevice_v0* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IGameInputDevice_v0_Release(IGameInputDevice_v0* This) {
    return This->lpVtbl->Release(This);
}
/*** IGameInputDevice_v0 methods ***/
static inline const GameInputDeviceInfo_v0 * IGameInputDevice_v0_GetDeviceInfo(IGameInputDevice_v0* This) {
    return This->lpVtbl->GetDeviceInfo(This);
}
static inline GameInputDeviceStatus IGameInputDevice_v0_GetDeviceStatus(IGameInputDevice_v0* This) {
    return This->lpVtbl->GetDeviceStatus(This);
}
static inline void IGameInputDevice_v0_GetBatteryState(IGameInputDevice_v0* This,GameInputBatteryState *state) {
    This->lpVtbl->GetBatteryState(This,state);
}
static inline HRESULT IGameInputDevice_v0_CreateForceFeedbackEffect(IGameInputDevice_v0* This,uint32_t motor,const GameInputForceFeedbackParams *params,IGameInputForceFeedbackEffect_v0 **effect) {
    return This->lpVtbl->CreateForceFeedbackEffect(This,motor,params,effect);
}
static inline bool IGameInputDevice_v0_IsForceFeedbackMotorPoweredOn(IGameInputDevice_v0* This,uint32_t motor) {
    return This->lpVtbl->IsForceFeedbackMotorPoweredOn(This,motor);
}
static inline void IGameInputDevice_v0_SetForceFeedbackMotorGain(IGameInputDevice_v0* This,uint32_t motor,float gain) {
    This->lpVtbl->SetForceFeedbackMotorGain(This,motor,gain);
}
static inline HRESULT IGameInputDevice_v0_SetHapticMotorState(IGameInputDevice_v0* This,uint32_t motor,const GameInputHapticFeedbackParams *params) {
    return This->lpVtbl->SetHapticMotorState(This,motor,params);
}
static inline void IGameInputDevice_v0_SetRumbleState(IGameInputDevice_v0* This,const GameInputRumbleParams *params) {
    This->lpVtbl->SetRumbleState(This,params);
}
static inline void IGameInputDevice_v0_SetInputSynchronizationState(IGameInputDevice_v0* This,bool enabled) {
    This->lpVtbl->SetInputSynchronizationState(This,enabled);
}
static inline void IGameInputDevice_v0_SendInputSynchronizationHint(IGameInputDevice_v0* This) {
    This->lpVtbl->SendInputSynchronizationHint(This);
}
static inline void IGameInputDevice_v0_PowerOff(IGameInputDevice_v0* This) {
    This->lpVtbl->PowerOff(This);
}
static inline HRESULT IGameInputDevice_v0_CreateRawDeviceReport(IGameInputDevice_v0* This,uint32_t id,GameInputRawDeviceReportKind kind,IGameInputRawDeviceReport_v0 **report) {
    return This->lpVtbl->CreateRawDeviceReport(This,id,kind,report);
}
static inline HRESULT IGameInputDevice_v0_GetRawDeviceFeature(IGameInputDevice_v0* This,uint32_t id,IGameInputRawDeviceReport_v0 **report) {
    return This->lpVtbl->GetRawDeviceFeature(This,id,report);
}
static inline HRESULT IGameInputDevice_v0_SetRawDeviceFeature(IGameInputDevice_v0* This,IGameInputRawDeviceReport_v0 *report) {
    return This->lpVtbl->SetRawDeviceFeature(This,report);
}
static inline HRESULT IGameInputDevice_v0_SendRawDeviceOutput(IGameInputDevice_v0* This,IGameInputRawDeviceReport_v0 *report) {
    return This->lpVtbl->SendRawDeviceOutput(This,report);
}
static inline HRESULT IGameInputDevice_v0_SendRawDeviceOutputWithResponse(IGameInputDevice_v0* This,IGameInputRawDeviceReport_v0 *request,IGameInputRawDeviceReport_v0 **reply) {
    return This->lpVtbl->SendRawDeviceOutputWithResponse(This,request,reply);
}
static inline HRESULT IGameInputDevice_v0_ExecuteRawDeviceIoControl(IGameInputDevice_v0* This,uint32_t code,size_t in_size,const void *input,size_t out_size,void *output,size_t *size) {
    return This->lpVtbl->ExecuteRawDeviceIoControl(This,code,in_size,input,out_size,output,size);
}
static inline bool IGameInputDevice_v0_AcquireExclusiveRawDeviceAccess(IGameInputDevice_v0* This,uint64_t timeout_ms) {
    return This->lpVtbl->AcquireExclusiveRawDeviceAccess(This,timeout_ms);
}
static inline void IGameInputDevice_v0_ReleaseExclusiveRawDeviceAccess(IGameInputDevice_v0* This) {
    This->lpVtbl->ReleaseExclusiveRawDeviceAccess(This);
}
#endif
#endif

#endif


#endif  /* __IGameInputDevice_v0_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IGameInputDevice_v1 interface
 */
#ifndef __IGameInputDevice_v1_INTERFACE_DEFINED__
#define __IGameInputDevice_v1_INTERFACE_DEFINED__

DEFINE_GUID(IID_IGameInputDevice_v1, 0xb169652a, 0x4a32, 0x40d7, 0x9f,0xa9, 0x90,0x59,0x97,0x95,0x25,0x16);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("b169652a-4a32-40d7-9fa9-905997952516")
IGameInputDevice_v1 : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetDeviceInfo(
        const GameInputDeviceInfo_v1 **info) = 0;

    virtual GameInputDeviceStatus STDMETHODCALLTYPE GetDeviceStatus(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateForceFeedbackEffect(
        uint32_t motor,
        const GameInputForceFeedbackParams *params,
        IGameInputForceFeedbackEffect_v0 **effect) = 0;

    virtual bool STDMETHODCALLTYPE IsForceFeedbackMotorPoweredOn(
        uint32_t motor) = 0;

    virtual void STDMETHODCALLTYPE SetForceFeedbackMotorGain(
        uint32_t motor,
        float gain) = 0;

    virtual void STDMETHODCALLTYPE SetRumbleState(
        const GameInputRumbleParams *params) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IGameInputDevice_v1, 0xb169652a, 0x4a32, 0x40d7, 0x9f,0xa9, 0x90,0x59,0x97,0x95,0x25,0x16)
#endif
#else
typedef struct IGameInputDevice_v1Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IGameInputDevice_v1 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IGameInputDevice_v1 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IGameInputDevice_v1 *This);

    /*** IGameInputDevice_v1 methods ***/
    HRESULT (STDMETHODCALLTYPE *GetDeviceInfo)(
        IGameInputDevice_v1 *This,
        const GameInputDeviceInfo_v1 **info);

    GameInputDeviceStatus (STDMETHODCALLTYPE *GetDeviceStatus)(
        IGameInputDevice_v1 *This);

    HRESULT (STDMETHODCALLTYPE *CreateForceFeedbackEffect)(
        IGameInputDevice_v1 *This,
        uint32_t motor,
        const GameInputForceFeedbackParams *params,
        IGameInputForceFeedbackEffect_v0 **effect);

    bool (STDMETHODCALLTYPE *IsForceFeedbackMotorPoweredOn)(
        IGameInputDevice_v1 *This,
        uint32_t motor);

    void (STDMETHODCALLTYPE *SetForceFeedbackMotorGain)(
        IGameInputDevice_v1 *This,
        uint32_t motor,
        float gain);

    void (STDMETHODCALLTYPE *SetRumbleState)(
        IGameInputDevice_v1 *This,
        const GameInputRumbleParams *params);

    END_INTERFACE
} IGameInputDevice_v1Vtbl;

interface IGameInputDevice_v1 {
    CONST_VTBL IGameInputDevice_v1Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IGameInputDevice_v1_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IGameInputDevice_v1_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IGameInputDevice_v1_Release(This) (This)->lpVtbl->Release(This)
/*** IGameInputDevice_v1 methods ***/
#define IGameInputDevice_v1_GetDeviceInfo(This,info) (This)->lpVtbl->GetDeviceInfo(This,info)
#define IGameInputDevice_v1_GetDeviceStatus(This) (This)->lpVtbl->GetDeviceStatus(This)
#define IGameInputDevice_v1_CreateForceFeedbackEffect(This,motor,params,effect) (This)->lpVtbl->CreateForceFeedbackEffect(This,motor,params,effect)
#define IGameInputDevice_v1_IsForceFeedbackMotorPoweredOn(This,motor) (This)->lpVtbl->IsForceFeedbackMotorPoweredOn(This,motor)
#define IGameInputDevice_v1_SetForceFeedbackMotorGain(This,motor,gain) (This)->lpVtbl->SetForceFeedbackMotorGain(This,motor,gain)
#define IGameInputDevice_v1_SetRumbleState(This,params) (This)->lpVtbl->SetRumbleState(This,params)
#else
/*** IUnknown methods ***/
static inline HRESULT IGameInputDevice_v1_QueryInterface(IGameInputDevice_v1* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IGameInputDevice_v1_AddRef(IGameInputDevice_v1* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IGameInputDevice_v1_Release(IGameInputDevice_v1* This) {
    return This->lpVtbl->Release(This);
}
/*** IGameInputDevice_v1 methods ***/
static inline HRESULT IGameInputDevice_v1_GetDeviceInfo(IGameInputDevice_v1* This,const GameInputDeviceInfo_v1 **info) {
    return This->lpVtbl->GetDeviceInfo(This,info);
}
static inline GameInputDeviceStatus IGameInputDevice_v1_GetDeviceStatus(IGameInputDevice_v1* This) {
    return This->lpVtbl->GetDeviceStatus(This);
}
static inline HRESULT IGameInputDevice_v1_CreateForceFeedbackEffect(IGameInputDevice_v1* This,uint32_t motor,const GameInputForceFeedbackParams *params,IGameInputForceFeedbackEffect_v0 **effect) {
    return This->lpVtbl->CreateForceFeedbackEffect(This,motor,params,effect);
}
static inline bool IGameInputDevice_v1_IsForceFeedbackMotorPoweredOn(IGameInputDevice_v1* This,uint32_t motor) {
    return This->lpVtbl->IsForceFeedbackMotorPoweredOn(This,motor);
}
static inline void IGameInputDevice_v1_SetForceFeedbackMotorGain(IGameInputDevice_v1* This,uint32_t motor,float gain) {
    This->lpVtbl->SetForceFeedbackMotorGain(This,motor,gain);
}
static inline void IGameInputDevice_v1_SetRumbleState(IGameInputDevice_v1* This,const GameInputRumbleParams *params) {
    This->lpVtbl->SetRumbleState(This,params);
}
#endif
#endif

#endif


#endif  /* __IGameInputDevice_v1_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IGameInputDevice_v2 interface
 */
#ifndef __IGameInputDevice_v2_INTERFACE_DEFINED__
#define __IGameInputDevice_v2_INTERFACE_DEFINED__

DEFINE_GUID(IID_IGameInputDevice_v2, 0x39a0c9f2, 0xf055, 0x4089, 0x96,0xe7, 0x25,0xb2,0x75,0x6d,0x30,0x77);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("39a0c9f2-f055-4089-96e7-25b2756d3077")
IGameInputDevice_v2 : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetDeviceInfo(
        const GameInputDeviceInfo_v2 **info) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetHapticInfo(
        GameInputHapticInfo *info) = 0;

    virtual GameInputDeviceStatus STDMETHODCALLTYPE GetDeviceStatus(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateForceFeedbackEffect(
        uint32_t motor,
        const GameInputForceFeedbackParams *params,
        IGameInputForceFeedbackEffect_v2 **effect) = 0;

    virtual bool STDMETHODCALLTYPE IsForceFeedbackMotorPoweredOn(
        uint32_t motor) = 0;

    virtual void STDMETHODCALLTYPE SetForceFeedbackMotorGain(
        uint32_t motor,
        float gain) = 0;

    virtual void STDMETHODCALLTYPE SetRumbleState(
        const GameInputRumbleParams *params) = 0;

    virtual HRESULT STDMETHODCALLTYPE DirectInputEscape(
        uint32_t command,
        const void *input,
        uint32_t in_size,
        void *output,
        uint32_t out_size,
        uint32_t *size) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IGameInputDevice_v2, 0x39a0c9f2, 0xf055, 0x4089, 0x96,0xe7, 0x25,0xb2,0x75,0x6d,0x30,0x77)
#endif
#else
typedef struct IGameInputDevice_v2Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IGameInputDevice_v2 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IGameInputDevice_v2 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IGameInputDevice_v2 *This);

    /*** IGameInputDevice_v2 methods ***/
    HRESULT (STDMETHODCALLTYPE *GetDeviceInfo)(
        IGameInputDevice_v2 *This,
        const GameInputDeviceInfo_v2 **info);

    HRESULT (STDMETHODCALLTYPE *GetHapticInfo)(
        IGameInputDevice_v2 *This,
        GameInputHapticInfo *info);

    GameInputDeviceStatus (STDMETHODCALLTYPE *GetDeviceStatus)(
        IGameInputDevice_v2 *This);

    HRESULT (STDMETHODCALLTYPE *CreateForceFeedbackEffect)(
        IGameInputDevice_v2 *This,
        uint32_t motor,
        const GameInputForceFeedbackParams *params,
        IGameInputForceFeedbackEffect_v2 **effect);

    bool (STDMETHODCALLTYPE *IsForceFeedbackMotorPoweredOn)(
        IGameInputDevice_v2 *This,
        uint32_t motor);

    void (STDMETHODCALLTYPE *SetForceFeedbackMotorGain)(
        IGameInputDevice_v2 *This,
        uint32_t motor,
        float gain);

    void (STDMETHODCALLTYPE *SetRumbleState)(
        IGameInputDevice_v2 *This,
        const GameInputRumbleParams *params);

    HRESULT (STDMETHODCALLTYPE *DirectInputEscape)(
        IGameInputDevice_v2 *This,
        uint32_t command,
        const void *input,
        uint32_t in_size,
        void *output,
        uint32_t out_size,
        uint32_t *size);

    END_INTERFACE
} IGameInputDevice_v2Vtbl;

interface IGameInputDevice_v2 {
    CONST_VTBL IGameInputDevice_v2Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IGameInputDevice_v2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IGameInputDevice_v2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IGameInputDevice_v2_Release(This) (This)->lpVtbl->Release(This)
/*** IGameInputDevice_v2 methods ***/
#define IGameInputDevice_v2_GetDeviceInfo(This,info) (This)->lpVtbl->GetDeviceInfo(This,info)
#define IGameInputDevice_v2_GetHapticInfo(This,info) (This)->lpVtbl->GetHapticInfo(This,info)
#define IGameInputDevice_v2_GetDeviceStatus(This) (This)->lpVtbl->GetDeviceStatus(This)
#define IGameInputDevice_v2_CreateForceFeedbackEffect(This,motor,params,effect) (This)->lpVtbl->CreateForceFeedbackEffect(This,motor,params,effect)
#define IGameInputDevice_v2_IsForceFeedbackMotorPoweredOn(This,motor) (This)->lpVtbl->IsForceFeedbackMotorPoweredOn(This,motor)
#define IGameInputDevice_v2_SetForceFeedbackMotorGain(This,motor,gain) (This)->lpVtbl->SetForceFeedbackMotorGain(This,motor,gain)
#define IGameInputDevice_v2_SetRumbleState(This,params) (This)->lpVtbl->SetRumbleState(This,params)
#define IGameInputDevice_v2_DirectInputEscape(This,command,input,in_size,output,out_size,size) (This)->lpVtbl->DirectInputEscape(This,command,input,in_size,output,out_size,size)
#else
/*** IUnknown methods ***/
static inline HRESULT IGameInputDevice_v2_QueryInterface(IGameInputDevice_v2* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IGameInputDevice_v2_AddRef(IGameInputDevice_v2* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IGameInputDevice_v2_Release(IGameInputDevice_v2* This) {
    return This->lpVtbl->Release(This);
}
/*** IGameInputDevice_v2 methods ***/
static inline HRESULT IGameInputDevice_v2_GetDeviceInfo(IGameInputDevice_v2* This,const GameInputDeviceInfo_v2 **info) {
    return This->lpVtbl->GetDeviceInfo(This,info);
}
static inline HRESULT IGameInputDevice_v2_GetHapticInfo(IGameInputDevice_v2* This,GameInputHapticInfo *info) {
    return This->lpVtbl->GetHapticInfo(This,info);
}
static inline GameInputDeviceStatus IGameInputDevice_v2_GetDeviceStatus(IGameInputDevice_v2* This) {
    return This->lpVtbl->GetDeviceStatus(This);
}
static inline HRESULT IGameInputDevice_v2_CreateForceFeedbackEffect(IGameInputDevice_v2* This,uint32_t motor,const GameInputForceFeedbackParams *params,IGameInputForceFeedbackEffect_v2 **effect) {
    return This->lpVtbl->CreateForceFeedbackEffect(This,motor,params,effect);
}
static inline bool IGameInputDevice_v2_IsForceFeedbackMotorPoweredOn(IGameInputDevice_v2* This,uint32_t motor) {
    return This->lpVtbl->IsForceFeedbackMotorPoweredOn(This,motor);
}
static inline void IGameInputDevice_v2_SetForceFeedbackMotorGain(IGameInputDevice_v2* This,uint32_t motor,float gain) {
    This->lpVtbl->SetForceFeedbackMotorGain(This,motor,gain);
}
static inline void IGameInputDevice_v2_SetRumbleState(IGameInputDevice_v2* This,const GameInputRumbleParams *params) {
    This->lpVtbl->SetRumbleState(This,params);
}
static inline HRESULT IGameInputDevice_v2_DirectInputEscape(IGameInputDevice_v2* This,uint32_t command,const void *input,uint32_t in_size,void *output,uint32_t out_size,uint32_t *size) {
    return This->lpVtbl->DirectInputEscape(This,command,input,in_size,output,out_size,size);
}
#endif
#endif

#endif


#endif  /* __IGameInputDevice_v2_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IGameInputDevice_v3 interface
 */
#ifndef __IGameInputDevice_v3_INTERFACE_DEFINED__
#define __IGameInputDevice_v3_INTERFACE_DEFINED__

DEFINE_GUID(IID_IGameInputDevice_v3, 0x63e2f38b, 0xa399, 0x4275, 0x8a,0xe7, 0xd4,0xc6,0xe5,0x24,0xd1,0x2a);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("63e2f38b-a399-4275-8ae7-d4c6e524d12a")
IGameInputDevice_v3 : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetDeviceInfo(
        const GameInputDeviceInfo_v3 **info) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetHapticInfo(
        GameInputHapticInfo *info) = 0;

    virtual GameInputDeviceStatus STDMETHODCALLTYPE GetDeviceStatus(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateForceFeedbackEffect(
        uint32_t motor,
        const GameInputForceFeedbackParams *params,
        IGameInputForceFeedbackEffect_v3 **effect) = 0;

    virtual bool STDMETHODCALLTYPE IsForceFeedbackMotorPoweredOn(
        uint32_t motor) = 0;

    virtual void STDMETHODCALLTYPE SetForceFeedbackMotorGain(
        uint32_t motor,
        float gain) = 0;

    virtual void STDMETHODCALLTYPE SetRumbleState(
        const GameInputRumbleParams *params) = 0;

    virtual HRESULT STDMETHODCALLTYPE DirectInputEscape(
        uint32_t command,
        const void *input,
        uint32_t in_size,
        void *output,
        uint32_t out_size,
        uint32_t *size) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateInputMapper(
        IGameInputMapper **mapper) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetExtraAxisCount(
        GameInputKind kind,
        uint32_t *count) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetExtraButtonCount(
        GameInputKind kind,
        uint32_t *count) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetExtraAxisIndexes(
        GameInputKind kind,
        uint32_t count,
        uint8_t *indexes) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetExtraButtonIndexes(
        GameInputKind kind,
        uint32_t count,
        uint8_t *indexes) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateRawDeviceReport(
        uint32_t id,
        GameInputRawDeviceReportKind kind,
        IGameInputRawDeviceReport_v3 **report) = 0;

    virtual HRESULT STDMETHODCALLTYPE SendRawDeviceOutput(
        IGameInputRawDeviceReport_v3 *report) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IGameInputDevice_v3, 0x63e2f38b, 0xa399, 0x4275, 0x8a,0xe7, 0xd4,0xc6,0xe5,0x24,0xd1,0x2a)
#endif
#else
typedef struct IGameInputDevice_v3Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IGameInputDevice_v3 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IGameInputDevice_v3 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IGameInputDevice_v3 *This);

    /*** IGameInputDevice_v3 methods ***/
    HRESULT (STDMETHODCALLTYPE *GetDeviceInfo)(
        IGameInputDevice_v3 *This,
        const GameInputDeviceInfo_v3 **info);

    HRESULT (STDMETHODCALLTYPE *GetHapticInfo)(
        IGameInputDevice_v3 *This,
        GameInputHapticInfo *info);

    GameInputDeviceStatus (STDMETHODCALLTYPE *GetDeviceStatus)(
        IGameInputDevice_v3 *This);

    HRESULT (STDMETHODCALLTYPE *CreateForceFeedbackEffect)(
        IGameInputDevice_v3 *This,
        uint32_t motor,
        const GameInputForceFeedbackParams *params,
        IGameInputForceFeedbackEffect_v3 **effect);

    bool (STDMETHODCALLTYPE *IsForceFeedbackMotorPoweredOn)(
        IGameInputDevice_v3 *This,
        uint32_t motor);

    void (STDMETHODCALLTYPE *SetForceFeedbackMotorGain)(
        IGameInputDevice_v3 *This,
        uint32_t motor,
        float gain);

    void (STDMETHODCALLTYPE *SetRumbleState)(
        IGameInputDevice_v3 *This,
        const GameInputRumbleParams *params);

    HRESULT (STDMETHODCALLTYPE *DirectInputEscape)(
        IGameInputDevice_v3 *This,
        uint32_t command,
        const void *input,
        uint32_t in_size,
        void *output,
        uint32_t out_size,
        uint32_t *size);

    HRESULT (STDMETHODCALLTYPE *CreateInputMapper)(
        IGameInputDevice_v3 *This,
        IGameInputMapper **mapper);

    HRESULT (STDMETHODCALLTYPE *GetExtraAxisCount)(
        IGameInputDevice_v3 *This,
        GameInputKind kind,
        uint32_t *count);

    HRESULT (STDMETHODCALLTYPE *GetExtraButtonCount)(
        IGameInputDevice_v3 *This,
        GameInputKind kind,
        uint32_t *count);

    HRESULT (STDMETHODCALLTYPE *GetExtraAxisIndexes)(
        IGameInputDevice_v3 *This,
        GameInputKind kind,
        uint32_t count,
        uint8_t *indexes);

    HRESULT (STDMETHODCALLTYPE *GetExtraButtonIndexes)(
        IGameInputDevice_v3 *This,
        GameInputKind kind,
        uint32_t count,
        uint8_t *indexes);

    HRESULT (STDMETHODCALLTYPE *CreateRawDeviceReport)(
        IGameInputDevice_v3 *This,
        uint32_t id,
        GameInputRawDeviceReportKind kind,
        IGameInputRawDeviceReport_v3 **report);

    HRESULT (STDMETHODCALLTYPE *SendRawDeviceOutput)(
        IGameInputDevice_v3 *This,
        IGameInputRawDeviceReport_v3 *report);

    END_INTERFACE
} IGameInputDevice_v3Vtbl;

interface IGameInputDevice_v3 {
    CONST_VTBL IGameInputDevice_v3Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IGameInputDevice_v3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IGameInputDevice_v3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IGameInputDevice_v3_Release(This) (This)->lpVtbl->Release(This)
/*** IGameInputDevice_v3 methods ***/
#define IGameInputDevice_v3_GetDeviceInfo(This,info) (This)->lpVtbl->GetDeviceInfo(This,info)
#define IGameInputDevice_v3_GetHapticInfo(This,info) (This)->lpVtbl->GetHapticInfo(This,info)
#define IGameInputDevice_v3_GetDeviceStatus(This) (This)->lpVtbl->GetDeviceStatus(This)
#define IGameInputDevice_v3_CreateForceFeedbackEffect(This,motor,params,effect) (This)->lpVtbl->CreateForceFeedbackEffect(This,motor,params,effect)
#define IGameInputDevice_v3_IsForceFeedbackMotorPoweredOn(This,motor) (This)->lpVtbl->IsForceFeedbackMotorPoweredOn(This,motor)
#define IGameInputDevice_v3_SetForceFeedbackMotorGain(This,motor,gain) (This)->lpVtbl->SetForceFeedbackMotorGain(This,motor,gain)
#define IGameInputDevice_v3_SetRumbleState(This,params) (This)->lpVtbl->SetRumbleState(This,params)
#define IGameInputDevice_v3_DirectInputEscape(This,command,input,in_size,output,out_size,size) (This)->lpVtbl->DirectInputEscape(This,command,input,in_size,output,out_size,size)
#define IGameInputDevice_v3_CreateInputMapper(This,mapper) (This)->lpVtbl->CreateInputMapper(This,mapper)
#define IGameInputDevice_v3_GetExtraAxisCount(This,kind,count) (This)->lpVtbl->GetExtraAxisCount(This,kind,count)
#define IGameInputDevice_v3_GetExtraButtonCount(This,kind,count) (This)->lpVtbl->GetExtraButtonCount(This,kind,count)
#define IGameInputDevice_v3_GetExtraAxisIndexes(This,kind,count,indexes) (This)->lpVtbl->GetExtraAxisIndexes(This,kind,count,indexes)
#define IGameInputDevice_v3_GetExtraButtonIndexes(This,kind,count,indexes) (This)->lpVtbl->GetExtraButtonIndexes(This,kind,count,indexes)
#define IGameInputDevice_v3_CreateRawDeviceReport(This,id,kind,report) (This)->lpVtbl->CreateRawDeviceReport(This,id,kind,report)
#define IGameInputDevice_v3_SendRawDeviceOutput(This,report) (This)->lpVtbl->SendRawDeviceOutput(This,report)
#else
/*** IUnknown methods ***/
static inline HRESULT IGameInputDevice_v3_QueryInterface(IGameInputDevice_v3* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IGameInputDevice_v3_AddRef(IGameInputDevice_v3* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IGameInputDevice_v3_Release(IGameInputDevice_v3* This) {
    return This->lpVtbl->Release(This);
}
/*** IGameInputDevice_v3 methods ***/
static inline HRESULT IGameInputDevice_v3_GetDeviceInfo(IGameInputDevice_v3* This,const GameInputDeviceInfo_v3 **info) {
    return This->lpVtbl->GetDeviceInfo(This,info);
}
static inline HRESULT IGameInputDevice_v3_GetHapticInfo(IGameInputDevice_v3* This,GameInputHapticInfo *info) {
    return This->lpVtbl->GetHapticInfo(This,info);
}
static inline GameInputDeviceStatus IGameInputDevice_v3_GetDeviceStatus(IGameInputDevice_v3* This) {
    return This->lpVtbl->GetDeviceStatus(This);
}
static inline HRESULT IGameInputDevice_v3_CreateForceFeedbackEffect(IGameInputDevice_v3* This,uint32_t motor,const GameInputForceFeedbackParams *params,IGameInputForceFeedbackEffect_v3 **effect) {
    return This->lpVtbl->CreateForceFeedbackEffect(This,motor,params,effect);
}
static inline bool IGameInputDevice_v3_IsForceFeedbackMotorPoweredOn(IGameInputDevice_v3* This,uint32_t motor) {
    return This->lpVtbl->IsForceFeedbackMotorPoweredOn(This,motor);
}
static inline void IGameInputDevice_v3_SetForceFeedbackMotorGain(IGameInputDevice_v3* This,uint32_t motor,float gain) {
    This->lpVtbl->SetForceFeedbackMotorGain(This,motor,gain);
}
static inline void IGameInputDevice_v3_SetRumbleState(IGameInputDevice_v3* This,const GameInputRumbleParams *params) {
    This->lpVtbl->SetRumbleState(This,params);
}
static inline HRESULT IGameInputDevice_v3_DirectInputEscape(IGameInputDevice_v3* This,uint32_t command,const void *input,uint32_t in_size,void *output,uint32_t out_size,uint32_t *size) {
    return This->lpVtbl->DirectInputEscape(This,command,input,in_size,output,out_size,size);
}
static inline HRESULT IGameInputDevice_v3_CreateInputMapper(IGameInputDevice_v3* This,IGameInputMapper **mapper) {
    return This->lpVtbl->CreateInputMapper(This,mapper);
}
static inline HRESULT IGameInputDevice_v3_GetExtraAxisCount(IGameInputDevice_v3* This,GameInputKind kind,uint32_t *count) {
    return This->lpVtbl->GetExtraAxisCount(This,kind,count);
}
static inline HRESULT IGameInputDevice_v3_GetExtraButtonCount(IGameInputDevice_v3* This,GameInputKind kind,uint32_t *count) {
    return This->lpVtbl->GetExtraButtonCount(This,kind,count);
}
static inline HRESULT IGameInputDevice_v3_GetExtraAxisIndexes(IGameInputDevice_v3* This,GameInputKind kind,uint32_t count,uint8_t *indexes) {
    return This->lpVtbl->GetExtraAxisIndexes(This,kind,count,indexes);
}
static inline HRESULT IGameInputDevice_v3_GetExtraButtonIndexes(IGameInputDevice_v3* This,GameInputKind kind,uint32_t count,uint8_t *indexes) {
    return This->lpVtbl->GetExtraButtonIndexes(This,kind,count,indexes);
}
static inline HRESULT IGameInputDevice_v3_CreateRawDeviceReport(IGameInputDevice_v3* This,uint32_t id,GameInputRawDeviceReportKind kind,IGameInputRawDeviceReport_v3 **report) {
    return This->lpVtbl->CreateRawDeviceReport(This,id,kind,report);
}
static inline HRESULT IGameInputDevice_v3_SendRawDeviceOutput(IGameInputDevice_v3* This,IGameInputRawDeviceReport_v3 *report) {
    return This->lpVtbl->SendRawDeviceOutput(This,report);
}
#endif
#endif

#endif


#endif  /* __IGameInputDevice_v3_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IGameInputDispatcher interface
 */
#ifndef __IGameInputDispatcher_INTERFACE_DEFINED__
#define __IGameInputDispatcher_INTERFACE_DEFINED__

DEFINE_GUID(IID_IGameInputDispatcher, 0x415eed2e, 0x98cb, 0x42c2, 0x8f,0x28, 0xb9,0x46,0x01,0x07,0x4e,0x31);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("415eed2e-98cb-42c2-8f28-b94601074e31")
IGameInputDispatcher : public IUnknown
{
    virtual bool STDMETHODCALLTYPE Dispatch(
        uint64_t quota_ms) = 0;

    virtual HRESULT STDMETHODCALLTYPE OpenWaitHandle(
        HANDLE *handle) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IGameInputDispatcher, 0x415eed2e, 0x98cb, 0x42c2, 0x8f,0x28, 0xb9,0x46,0x01,0x07,0x4e,0x31)
#endif
#else
typedef struct IGameInputDispatcherVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IGameInputDispatcher *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IGameInputDispatcher *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IGameInputDispatcher *This);

    /*** IGameInputDispatcher methods ***/
    bool (STDMETHODCALLTYPE *Dispatch)(
        IGameInputDispatcher *This,
        uint64_t quota_ms);

    HRESULT (STDMETHODCALLTYPE *OpenWaitHandle)(
        IGameInputDispatcher *This,
        HANDLE *handle);

    END_INTERFACE
} IGameInputDispatcherVtbl;

interface IGameInputDispatcher {
    CONST_VTBL IGameInputDispatcherVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IGameInputDispatcher_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IGameInputDispatcher_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IGameInputDispatcher_Release(This) (This)->lpVtbl->Release(This)
/*** IGameInputDispatcher methods ***/
#define IGameInputDispatcher_Dispatch(This,quota_ms) (This)->lpVtbl->Dispatch(This,quota_ms)
#define IGameInputDispatcher_OpenWaitHandle(This,handle) (This)->lpVtbl->OpenWaitHandle(This,handle)
#else
/*** IUnknown methods ***/
static inline HRESULT IGameInputDispatcher_QueryInterface(IGameInputDispatcher* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IGameInputDispatcher_AddRef(IGameInputDispatcher* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IGameInputDispatcher_Release(IGameInputDispatcher* This) {
    return This->lpVtbl->Release(This);
}
/*** IGameInputDispatcher methods ***/
static inline bool IGameInputDispatcher_Dispatch(IGameInputDispatcher* This,uint64_t quota_ms) {
    return This->lpVtbl->Dispatch(This,quota_ms);
}
static inline HRESULT IGameInputDispatcher_OpenWaitHandle(IGameInputDispatcher* This,HANDLE *handle) {
    return This->lpVtbl->OpenWaitHandle(This,handle);
}
#endif
#endif

#endif


#endif  /* __IGameInputDispatcher_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IGameInputForceFeedbackEffect_v0 interface
 */
#ifndef __IGameInputForceFeedbackEffect_v0_INTERFACE_DEFINED__
#define __IGameInputForceFeedbackEffect_v0_INTERFACE_DEFINED__

DEFINE_GUID(IID_IGameInputForceFeedbackEffect_v0, 0x51bda05e, 0xf742, 0x45d9, 0xb0,0x85, 0x94,0x44,0xae,0x48,0x38,0x1d);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("51bda05e-f742-45d9-b085-9444ae48381d")
IGameInputForceFeedbackEffect_v0 : public IUnknown
{
    virtual void STDMETHODCALLTYPE GetDevice(
        IUnknown **device) = 0;

    virtual uint32_t STDMETHODCALLTYPE GetMotorIndex(
        ) = 0;

    virtual float STDMETHODCALLTYPE GetGain(
        ) = 0;

    virtual void STDMETHODCALLTYPE SetGain(
        float gain) = 0;

    virtual void STDMETHODCALLTYPE GetParams(
        GameInputForceFeedbackParams *params) = 0;

    virtual bool STDMETHODCALLTYPE SetParams(
        const GameInputForceFeedbackParams *params) = 0;

    virtual GameInputFeedbackEffectState STDMETHODCALLTYPE GetState(
        ) = 0;

    virtual void STDMETHODCALLTYPE SetState(
        GameInputFeedbackEffectState state) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IGameInputForceFeedbackEffect_v0, 0x51bda05e, 0xf742, 0x45d9, 0xb0,0x85, 0x94,0x44,0xae,0x48,0x38,0x1d)
#endif
#else
typedef struct IGameInputForceFeedbackEffect_v0Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IGameInputForceFeedbackEffect_v0 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IGameInputForceFeedbackEffect_v0 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IGameInputForceFeedbackEffect_v0 *This);

    /*** IGameInputForceFeedbackEffect_v0 methods ***/
    void (STDMETHODCALLTYPE *GetDevice)(
        IGameInputForceFeedbackEffect_v0 *This,
        IUnknown **device);

    uint32_t (STDMETHODCALLTYPE *GetMotorIndex)(
        IGameInputForceFeedbackEffect_v0 *This);

    float (STDMETHODCALLTYPE *GetGain)(
        IGameInputForceFeedbackEffect_v0 *This);

    void (STDMETHODCALLTYPE *SetGain)(
        IGameInputForceFeedbackEffect_v0 *This,
        float gain);

    void (STDMETHODCALLTYPE *GetParams)(
        IGameInputForceFeedbackEffect_v0 *This,
        GameInputForceFeedbackParams *params);

    bool (STDMETHODCALLTYPE *SetParams)(
        IGameInputForceFeedbackEffect_v0 *This,
        const GameInputForceFeedbackParams *params);

    GameInputFeedbackEffectState (STDMETHODCALLTYPE *GetState)(
        IGameInputForceFeedbackEffect_v0 *This);

    void (STDMETHODCALLTYPE *SetState)(
        IGameInputForceFeedbackEffect_v0 *This,
        GameInputFeedbackEffectState state);

    END_INTERFACE
} IGameInputForceFeedbackEffect_v0Vtbl;

interface IGameInputForceFeedbackEffect_v0 {
    CONST_VTBL IGameInputForceFeedbackEffect_v0Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IGameInputForceFeedbackEffect_v0_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IGameInputForceFeedbackEffect_v0_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IGameInputForceFeedbackEffect_v0_Release(This) (This)->lpVtbl->Release(This)
/*** IGameInputForceFeedbackEffect_v0 methods ***/
#define IGameInputForceFeedbackEffect_v0_GetDevice(This,device) (This)->lpVtbl->GetDevice(This,device)
#define IGameInputForceFeedbackEffect_v0_GetMotorIndex(This) (This)->lpVtbl->GetMotorIndex(This)
#define IGameInputForceFeedbackEffect_v0_GetGain(This) (This)->lpVtbl->GetGain(This)
#define IGameInputForceFeedbackEffect_v0_SetGain(This,gain) (This)->lpVtbl->SetGain(This,gain)
#define IGameInputForceFeedbackEffect_v0_GetParams(This,params) (This)->lpVtbl->GetParams(This,params)
#define IGameInputForceFeedbackEffect_v0_SetParams(This,params) (This)->lpVtbl->SetParams(This,params)
#define IGameInputForceFeedbackEffect_v0_GetState(This) (This)->lpVtbl->GetState(This)
#define IGameInputForceFeedbackEffect_v0_SetState(This,state) (This)->lpVtbl->SetState(This,state)
#else
/*** IUnknown methods ***/
static inline HRESULT IGameInputForceFeedbackEffect_v0_QueryInterface(IGameInputForceFeedbackEffect_v0* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IGameInputForceFeedbackEffect_v0_AddRef(IGameInputForceFeedbackEffect_v0* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IGameInputForceFeedbackEffect_v0_Release(IGameInputForceFeedbackEffect_v0* This) {
    return This->lpVtbl->Release(This);
}
/*** IGameInputForceFeedbackEffect_v0 methods ***/
static inline void IGameInputForceFeedbackEffect_v0_GetDevice(IGameInputForceFeedbackEffect_v0* This,IUnknown **device) {
    This->lpVtbl->GetDevice(This,device);
}
static inline uint32_t IGameInputForceFeedbackEffect_v0_GetMotorIndex(IGameInputForceFeedbackEffect_v0* This) {
    return This->lpVtbl->GetMotorIndex(This);
}
static inline float IGameInputForceFeedbackEffect_v0_GetGain(IGameInputForceFeedbackEffect_v0* This) {
    return This->lpVtbl->GetGain(This);
}
static inline void IGameInputForceFeedbackEffect_v0_SetGain(IGameInputForceFeedbackEffect_v0* This,float gain) {
    This->lpVtbl->SetGain(This,gain);
}
static inline void IGameInputForceFeedbackEffect_v0_GetParams(IGameInputForceFeedbackEffect_v0* This,GameInputForceFeedbackParams *params) {
    This->lpVtbl->GetParams(This,params);
}
static inline bool IGameInputForceFeedbackEffect_v0_SetParams(IGameInputForceFeedbackEffect_v0* This,const GameInputForceFeedbackParams *params) {
    return This->lpVtbl->SetParams(This,params);
}
static inline GameInputFeedbackEffectState IGameInputForceFeedbackEffect_v0_GetState(IGameInputForceFeedbackEffect_v0* This) {
    return This->lpVtbl->GetState(This);
}
static inline void IGameInputForceFeedbackEffect_v0_SetState(IGameInputForceFeedbackEffect_v0* This,GameInputFeedbackEffectState state) {
    This->lpVtbl->SetState(This,state);
}
#endif
#endif

#endif


#endif  /* __IGameInputForceFeedbackEffect_v0_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IGameInputForceFeedbackEffect_v2 interface
 */
#ifndef __IGameInputForceFeedbackEffect_v2_INTERFACE_DEFINED__
#define __IGameInputForceFeedbackEffect_v2_INTERFACE_DEFINED__

DEFINE_GUID(IID_IGameInputForceFeedbackEffect_v2, 0xff61096a, 0x3373, 0x4093, 0xa1,0xdf, 0x6d,0x31,0x84,0x6b,0x35,0x11);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("ff61096a-3373-4093-a1df-6d31846b3511")
IGameInputForceFeedbackEffect_v2 : public IUnknown
{
    virtual void STDMETHODCALLTYPE GetDevice(
        IGameInputDevice_v2 *device) = 0;

    virtual uint32_t STDMETHODCALLTYPE GetMotorIndex(
        ) = 0;

    virtual float STDMETHODCALLTYPE GetGain(
        ) = 0;

    virtual void STDMETHODCALLTYPE SetGain(
        float gain) = 0;

    virtual void STDMETHODCALLTYPE GetParams(
        GameInputForceFeedbackParams *params) = 0;

    virtual bool STDMETHODCALLTYPE SetParams(
        const GameInputForceFeedbackParams *params) = 0;

    virtual GameInputFeedbackEffectState STDMETHODCALLTYPE GetState(
        ) = 0;

    virtual void STDMETHODCALLTYPE SetState(
        GameInputFeedbackEffectState state) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IGameInputForceFeedbackEffect_v2, 0xff61096a, 0x3373, 0x4093, 0xa1,0xdf, 0x6d,0x31,0x84,0x6b,0x35,0x11)
#endif
#else
typedef struct IGameInputForceFeedbackEffect_v2Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IGameInputForceFeedbackEffect_v2 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IGameInputForceFeedbackEffect_v2 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IGameInputForceFeedbackEffect_v2 *This);

    /*** IGameInputForceFeedbackEffect_v2 methods ***/
    void (STDMETHODCALLTYPE *GetDevice)(
        IGameInputForceFeedbackEffect_v2 *This,
        IGameInputDevice_v2 *device);

    uint32_t (STDMETHODCALLTYPE *GetMotorIndex)(
        IGameInputForceFeedbackEffect_v2 *This);

    float (STDMETHODCALLTYPE *GetGain)(
        IGameInputForceFeedbackEffect_v2 *This);

    void (STDMETHODCALLTYPE *SetGain)(
        IGameInputForceFeedbackEffect_v2 *This,
        float gain);

    void (STDMETHODCALLTYPE *GetParams)(
        IGameInputForceFeedbackEffect_v2 *This,
        GameInputForceFeedbackParams *params);

    bool (STDMETHODCALLTYPE *SetParams)(
        IGameInputForceFeedbackEffect_v2 *This,
        const GameInputForceFeedbackParams *params);

    GameInputFeedbackEffectState (STDMETHODCALLTYPE *GetState)(
        IGameInputForceFeedbackEffect_v2 *This);

    void (STDMETHODCALLTYPE *SetState)(
        IGameInputForceFeedbackEffect_v2 *This,
        GameInputFeedbackEffectState state);

    END_INTERFACE
} IGameInputForceFeedbackEffect_v2Vtbl;

interface IGameInputForceFeedbackEffect_v2 {
    CONST_VTBL IGameInputForceFeedbackEffect_v2Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IGameInputForceFeedbackEffect_v2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IGameInputForceFeedbackEffect_v2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IGameInputForceFeedbackEffect_v2_Release(This) (This)->lpVtbl->Release(This)
/*** IGameInputForceFeedbackEffect_v2 methods ***/
#define IGameInputForceFeedbackEffect_v2_GetDevice(This,device) (This)->lpVtbl->GetDevice(This,device)
#define IGameInputForceFeedbackEffect_v2_GetMotorIndex(This) (This)->lpVtbl->GetMotorIndex(This)
#define IGameInputForceFeedbackEffect_v2_GetGain(This) (This)->lpVtbl->GetGain(This)
#define IGameInputForceFeedbackEffect_v2_SetGain(This,gain) (This)->lpVtbl->SetGain(This,gain)
#define IGameInputForceFeedbackEffect_v2_GetParams(This,params) (This)->lpVtbl->GetParams(This,params)
#define IGameInputForceFeedbackEffect_v2_SetParams(This,params) (This)->lpVtbl->SetParams(This,params)
#define IGameInputForceFeedbackEffect_v2_GetState(This) (This)->lpVtbl->GetState(This)
#define IGameInputForceFeedbackEffect_v2_SetState(This,state) (This)->lpVtbl->SetState(This,state)
#else
/*** IUnknown methods ***/
static inline HRESULT IGameInputForceFeedbackEffect_v2_QueryInterface(IGameInputForceFeedbackEffect_v2* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IGameInputForceFeedbackEffect_v2_AddRef(IGameInputForceFeedbackEffect_v2* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IGameInputForceFeedbackEffect_v2_Release(IGameInputForceFeedbackEffect_v2* This) {
    return This->lpVtbl->Release(This);
}
/*** IGameInputForceFeedbackEffect_v2 methods ***/
static inline void IGameInputForceFeedbackEffect_v2_GetDevice(IGameInputForceFeedbackEffect_v2* This,IGameInputDevice_v2 *device) {
    This->lpVtbl->GetDevice(This,device);
}
static inline uint32_t IGameInputForceFeedbackEffect_v2_GetMotorIndex(IGameInputForceFeedbackEffect_v2* This) {
    return This->lpVtbl->GetMotorIndex(This);
}
static inline float IGameInputForceFeedbackEffect_v2_GetGain(IGameInputForceFeedbackEffect_v2* This) {
    return This->lpVtbl->GetGain(This);
}
static inline void IGameInputForceFeedbackEffect_v2_SetGain(IGameInputForceFeedbackEffect_v2* This,float gain) {
    This->lpVtbl->SetGain(This,gain);
}
static inline void IGameInputForceFeedbackEffect_v2_GetParams(IGameInputForceFeedbackEffect_v2* This,GameInputForceFeedbackParams *params) {
    This->lpVtbl->GetParams(This,params);
}
static inline bool IGameInputForceFeedbackEffect_v2_SetParams(IGameInputForceFeedbackEffect_v2* This,const GameInputForceFeedbackParams *params) {
    return This->lpVtbl->SetParams(This,params);
}
static inline GameInputFeedbackEffectState IGameInputForceFeedbackEffect_v2_GetState(IGameInputForceFeedbackEffect_v2* This) {
    return This->lpVtbl->GetState(This);
}
static inline void IGameInputForceFeedbackEffect_v2_SetState(IGameInputForceFeedbackEffect_v2* This,GameInputFeedbackEffectState state) {
    This->lpVtbl->SetState(This,state);
}
#endif
#endif

#endif


#endif  /* __IGameInputForceFeedbackEffect_v2_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IGameInputRawDeviceReport_v0 interface
 */
#ifndef __IGameInputRawDeviceReport_v0_INTERFACE_DEFINED__
#define __IGameInputRawDeviceReport_v0_INTERFACE_DEFINED__

DEFINE_GUID(IID_IGameInputRawDeviceReport_v0, 0x61f08cf1, 0x1ffc, 0x40ca, 0xa2,0xb8, 0xe1,0xab,0x8b,0xc5,0xb6,0xdc);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("61f08cf1-1ffc-40ca-a2b8-e1ab8bc5b6dc")
IGameInputRawDeviceReport_v0 : public IUnknown
{
    virtual void STDMETHODCALLTYPE GetDevice(
        IGameInputDevice_v0 **device) = 0;

    virtual const GameInputRawDeviceReportInfo_v0 * STDMETHODCALLTYPE GetReportInfo(
        ) = 0;

    virtual size_t STDMETHODCALLTYPE GetRawDataSize(
        ) = 0;

    virtual size_t STDMETHODCALLTYPE GetRawData(
        size_t size,
        void *buffer) = 0;

    virtual bool STDMETHODCALLTYPE SetRawData(
        size_t size,
        const void *buffer) = 0;

    virtual bool STDMETHODCALLTYPE GetItemValue(
        uint32_t index,
        int64_t *value) = 0;

    virtual bool STDMETHODCALLTYPE SetItemValue(
        uint32_t index,
        int64_t value) = 0;

    virtual bool STDMETHODCALLTYPE ResetItemValue(
        uint32_t index) = 0;

    virtual bool STDMETHODCALLTYPE ResetAllItems(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IGameInputRawDeviceReport_v0, 0x61f08cf1, 0x1ffc, 0x40ca, 0xa2,0xb8, 0xe1,0xab,0x8b,0xc5,0xb6,0xdc)
#endif
#else
typedef struct IGameInputRawDeviceReport_v0Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IGameInputRawDeviceReport_v0 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IGameInputRawDeviceReport_v0 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IGameInputRawDeviceReport_v0 *This);

    /*** IGameInputRawDeviceReport_v0 methods ***/
    void (STDMETHODCALLTYPE *GetDevice)(
        IGameInputRawDeviceReport_v0 *This,
        IGameInputDevice_v0 **device);

    const GameInputRawDeviceReportInfo_v0 * (STDMETHODCALLTYPE *GetReportInfo)(
        IGameInputRawDeviceReport_v0 *This);

    size_t (STDMETHODCALLTYPE *GetRawDataSize)(
        IGameInputRawDeviceReport_v0 *This);

    size_t (STDMETHODCALLTYPE *GetRawData)(
        IGameInputRawDeviceReport_v0 *This,
        size_t size,
        void *buffer);

    bool (STDMETHODCALLTYPE *SetRawData)(
        IGameInputRawDeviceReport_v0 *This,
        size_t size,
        const void *buffer);

    bool (STDMETHODCALLTYPE *GetItemValue)(
        IGameInputRawDeviceReport_v0 *This,
        uint32_t index,
        int64_t *value);

    bool (STDMETHODCALLTYPE *SetItemValue)(
        IGameInputRawDeviceReport_v0 *This,
        uint32_t index,
        int64_t value);

    bool (STDMETHODCALLTYPE *ResetItemValue)(
        IGameInputRawDeviceReport_v0 *This,
        uint32_t index);

    bool (STDMETHODCALLTYPE *ResetAllItems)(
        IGameInputRawDeviceReport_v0 *This);

    END_INTERFACE
} IGameInputRawDeviceReport_v0Vtbl;

interface IGameInputRawDeviceReport_v0 {
    CONST_VTBL IGameInputRawDeviceReport_v0Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IGameInputRawDeviceReport_v0_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IGameInputRawDeviceReport_v0_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IGameInputRawDeviceReport_v0_Release(This) (This)->lpVtbl->Release(This)
/*** IGameInputRawDeviceReport_v0 methods ***/
#define IGameInputRawDeviceReport_v0_GetDevice(This,device) (This)->lpVtbl->GetDevice(This,device)
#define IGameInputRawDeviceReport_v0_GetReportInfo(This) (This)->lpVtbl->GetReportInfo(This)
#define IGameInputRawDeviceReport_v0_GetRawDataSize(This) (This)->lpVtbl->GetRawDataSize(This)
#define IGameInputRawDeviceReport_v0_GetRawData(This,size,buffer) (This)->lpVtbl->GetRawData(This,size,buffer)
#define IGameInputRawDeviceReport_v0_SetRawData(This,size,buffer) (This)->lpVtbl->SetRawData(This,size,buffer)
#define IGameInputRawDeviceReport_v0_GetItemValue(This,index,value) (This)->lpVtbl->GetItemValue(This,index,value)
#define IGameInputRawDeviceReport_v0_SetItemValue(This,index,value) (This)->lpVtbl->SetItemValue(This,index,value)
#define IGameInputRawDeviceReport_v0_ResetItemValue(This,index) (This)->lpVtbl->ResetItemValue(This,index)
#define IGameInputRawDeviceReport_v0_ResetAllItems(This) (This)->lpVtbl->ResetAllItems(This)
#else
/*** IUnknown methods ***/
static inline HRESULT IGameInputRawDeviceReport_v0_QueryInterface(IGameInputRawDeviceReport_v0* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IGameInputRawDeviceReport_v0_AddRef(IGameInputRawDeviceReport_v0* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IGameInputRawDeviceReport_v0_Release(IGameInputRawDeviceReport_v0* This) {
    return This->lpVtbl->Release(This);
}
/*** IGameInputRawDeviceReport_v0 methods ***/
static inline void IGameInputRawDeviceReport_v0_GetDevice(IGameInputRawDeviceReport_v0* This,IGameInputDevice_v0 **device) {
    This->lpVtbl->GetDevice(This,device);
}
static inline const GameInputRawDeviceReportInfo_v0 * IGameInputRawDeviceReport_v0_GetReportInfo(IGameInputRawDeviceReport_v0* This) {
    return This->lpVtbl->GetReportInfo(This);
}
static inline size_t IGameInputRawDeviceReport_v0_GetRawDataSize(IGameInputRawDeviceReport_v0* This) {
    return This->lpVtbl->GetRawDataSize(This);
}
static inline size_t IGameInputRawDeviceReport_v0_GetRawData(IGameInputRawDeviceReport_v0* This,size_t size,void *buffer) {
    return This->lpVtbl->GetRawData(This,size,buffer);
}
static inline bool IGameInputRawDeviceReport_v0_SetRawData(IGameInputRawDeviceReport_v0* This,size_t size,const void *buffer) {
    return This->lpVtbl->SetRawData(This,size,buffer);
}
static inline bool IGameInputRawDeviceReport_v0_GetItemValue(IGameInputRawDeviceReport_v0* This,uint32_t index,int64_t *value) {
    return This->lpVtbl->GetItemValue(This,index,value);
}
static inline bool IGameInputRawDeviceReport_v0_SetItemValue(IGameInputRawDeviceReport_v0* This,uint32_t index,int64_t value) {
    return This->lpVtbl->SetItemValue(This,index,value);
}
static inline bool IGameInputRawDeviceReport_v0_ResetItemValue(IGameInputRawDeviceReport_v0* This,uint32_t index) {
    return This->lpVtbl->ResetItemValue(This,index);
}
static inline bool IGameInputRawDeviceReport_v0_ResetAllItems(IGameInputRawDeviceReport_v0* This) {
    return This->lpVtbl->ResetAllItems(This);
}
#endif
#endif

#endif


#endif  /* __IGameInputRawDeviceReport_v0_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IGameInputRawDeviceReport_v3 interface
 */
#ifndef __IGameInputRawDeviceReport_v3_INTERFACE_DEFINED__
#define __IGameInputRawDeviceReport_v3_INTERFACE_DEFINED__

DEFINE_GUID(IID_IGameInputRawDeviceReport_v3, 0x05a42d89, 0x2cb6, 0x45a3, 0x87,0x4d, 0xe6,0x35,0x72,0x35,0x87,0xab);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("05a42d89-2cb6-45a3-874d-e635723587ab")
IGameInputRawDeviceReport_v3 : public IUnknown
{
    virtual void STDMETHODCALLTYPE GetDevice(
        IGameInputDevice_v3 **device) = 0;

    virtual void STDMETHODCALLTYPE GetReportInfo(
        GameInputRawDeviceReportInfo_v3 *info) = 0;

    virtual size_t STDMETHODCALLTYPE GetRawDataSize(
        ) = 0;

    virtual size_t STDMETHODCALLTYPE GetRawData(
        size_t size,
        void *buffer) = 0;

    virtual bool STDMETHODCALLTYPE SetRawData(
        size_t size,
        const void *buffer) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IGameInputRawDeviceReport_v3, 0x05a42d89, 0x2cb6, 0x45a3, 0x87,0x4d, 0xe6,0x35,0x72,0x35,0x87,0xab)
#endif
#else
typedef struct IGameInputRawDeviceReport_v3Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IGameInputRawDeviceReport_v3 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IGameInputRawDeviceReport_v3 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IGameInputRawDeviceReport_v3 *This);

    /*** IGameInputRawDeviceReport_v3 methods ***/
    void (STDMETHODCALLTYPE *GetDevice)(
        IGameInputRawDeviceReport_v3 *This,
        IGameInputDevice_v3 **device);

    void (STDMETHODCALLTYPE *GetReportInfo)(
        IGameInputRawDeviceReport_v3 *This,
        GameInputRawDeviceReportInfo_v3 *info);

    size_t (STDMETHODCALLTYPE *GetRawDataSize)(
        IGameInputRawDeviceReport_v3 *This);

    size_t (STDMETHODCALLTYPE *GetRawData)(
        IGameInputRawDeviceReport_v3 *This,
        size_t size,
        void *buffer);

    bool (STDMETHODCALLTYPE *SetRawData)(
        IGameInputRawDeviceReport_v3 *This,
        size_t size,
        const void *buffer);

    END_INTERFACE
} IGameInputRawDeviceReport_v3Vtbl;

interface IGameInputRawDeviceReport_v3 {
    CONST_VTBL IGameInputRawDeviceReport_v3Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IGameInputRawDeviceReport_v3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IGameInputRawDeviceReport_v3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IGameInputRawDeviceReport_v3_Release(This) (This)->lpVtbl->Release(This)
/*** IGameInputRawDeviceReport_v3 methods ***/
#define IGameInputRawDeviceReport_v3_GetDevice(This,device) (This)->lpVtbl->GetDevice(This,device)
#define IGameInputRawDeviceReport_v3_GetReportInfo(This,info) (This)->lpVtbl->GetReportInfo(This,info)
#define IGameInputRawDeviceReport_v3_GetRawDataSize(This) (This)->lpVtbl->GetRawDataSize(This)
#define IGameInputRawDeviceReport_v3_GetRawData(This,size,buffer) (This)->lpVtbl->GetRawData(This,size,buffer)
#define IGameInputRawDeviceReport_v3_SetRawData(This,size,buffer) (This)->lpVtbl->SetRawData(This,size,buffer)
#else
/*** IUnknown methods ***/
static inline HRESULT IGameInputRawDeviceReport_v3_QueryInterface(IGameInputRawDeviceReport_v3* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IGameInputRawDeviceReport_v3_AddRef(IGameInputRawDeviceReport_v3* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IGameInputRawDeviceReport_v3_Release(IGameInputRawDeviceReport_v3* This) {
    return This->lpVtbl->Release(This);
}
/*** IGameInputRawDeviceReport_v3 methods ***/
static inline void IGameInputRawDeviceReport_v3_GetDevice(IGameInputRawDeviceReport_v3* This,IGameInputDevice_v3 **device) {
    This->lpVtbl->GetDevice(This,device);
}
static inline void IGameInputRawDeviceReport_v3_GetReportInfo(IGameInputRawDeviceReport_v3* This,GameInputRawDeviceReportInfo_v3 *info) {
    This->lpVtbl->GetReportInfo(This,info);
}
static inline size_t IGameInputRawDeviceReport_v3_GetRawDataSize(IGameInputRawDeviceReport_v3* This) {
    return This->lpVtbl->GetRawDataSize(This);
}
static inline size_t IGameInputRawDeviceReport_v3_GetRawData(IGameInputRawDeviceReport_v3* This,size_t size,void *buffer) {
    return This->lpVtbl->GetRawData(This,size,buffer);
}
static inline bool IGameInputRawDeviceReport_v3_SetRawData(IGameInputRawDeviceReport_v3* This,size_t size,const void *buffer) {
    return This->lpVtbl->SetRawData(This,size,buffer);
}
#endif
#endif

#endif


#endif  /* __IGameInputRawDeviceReport_v3_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IGameInputMapper interface
 */
#ifndef __IGameInputMapper_INTERFACE_DEFINED__
#define __IGameInputMapper_INTERFACE_DEFINED__

DEFINE_GUID(IID_IGameInputMapper, 0x3c600700, 0xf16c, 0x49ce, 0x9b,0xe6, 0x6a,0x2e,0xf7,0x52,0xed,0x5e);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("3c600700-f16c-49ce-9be6-6a2ef752ed5e")
IGameInputMapper : public IUnknown
{
    virtual bool STDMETHODCALLTYPE GetArcadeStickButtonMappingInfo(
        GameInputArcadeStickButtons button,
        GameInputButtonMapping *mapping) = 0;

    virtual bool STDMETHODCALLTYPE GetFlightStickAxisMappingInfo(
        GameInputFlightStickAxes axis,
        GameInputAxisMapping *mapping) = 0;

    virtual bool STDMETHODCALLTYPE GetFlightStickButtonMappingInfo(
        GameInputFlightStickButtons button,
        GameInputButtonMapping *mapping) = 0;

    virtual bool STDMETHODCALLTYPE GetGamepadAxisMappingInfo(
        GameInputGamepadAxes axis,
        GameInputAxisMapping *mapping) = 0;

    virtual bool STDMETHODCALLTYPE GetGamepadButtonMappingInfo(
        GameInputGamepadButtons button,
        GameInputButtonMapping *mapping) = 0;

    virtual bool STDMETHODCALLTYPE GetRacingWheelAxisMappingInfo(
        GameInputRacingWheelAxes axis,
        GameInputAxisMapping *mapping) = 0;

    virtual bool STDMETHODCALLTYPE GetRacingWheelButtonMappingInfo(
        GameInputRacingWheelButtons button,
        GameInputButtonMapping *mapping) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IGameInputMapper, 0x3c600700, 0xf16c, 0x49ce, 0x9b,0xe6, 0x6a,0x2e,0xf7,0x52,0xed,0x5e)
#endif
#else
typedef struct IGameInputMapperVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IGameInputMapper *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IGameInputMapper *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IGameInputMapper *This);

    /*** IGameInputMapper methods ***/
    bool (STDMETHODCALLTYPE *GetArcadeStickButtonMappingInfo)(
        IGameInputMapper *This,
        GameInputArcadeStickButtons button,
        GameInputButtonMapping *mapping);

    bool (STDMETHODCALLTYPE *GetFlightStickAxisMappingInfo)(
        IGameInputMapper *This,
        GameInputFlightStickAxes axis,
        GameInputAxisMapping *mapping);

    bool (STDMETHODCALLTYPE *GetFlightStickButtonMappingInfo)(
        IGameInputMapper *This,
        GameInputFlightStickButtons button,
        GameInputButtonMapping *mapping);

    bool (STDMETHODCALLTYPE *GetGamepadAxisMappingInfo)(
        IGameInputMapper *This,
        GameInputGamepadAxes axis,
        GameInputAxisMapping *mapping);

    bool (STDMETHODCALLTYPE *GetGamepadButtonMappingInfo)(
        IGameInputMapper *This,
        GameInputGamepadButtons button,
        GameInputButtonMapping *mapping);

    bool (STDMETHODCALLTYPE *GetRacingWheelAxisMappingInfo)(
        IGameInputMapper *This,
        GameInputRacingWheelAxes axis,
        GameInputAxisMapping *mapping);

    bool (STDMETHODCALLTYPE *GetRacingWheelButtonMappingInfo)(
        IGameInputMapper *This,
        GameInputRacingWheelButtons button,
        GameInputButtonMapping *mapping);

    END_INTERFACE
} IGameInputMapperVtbl;

interface IGameInputMapper {
    CONST_VTBL IGameInputMapperVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IGameInputMapper_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IGameInputMapper_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IGameInputMapper_Release(This) (This)->lpVtbl->Release(This)
/*** IGameInputMapper methods ***/
#define IGameInputMapper_GetArcadeStickButtonMappingInfo(This,button,mapping) (This)->lpVtbl->GetArcadeStickButtonMappingInfo(This,button,mapping)
#define IGameInputMapper_GetFlightStickAxisMappingInfo(This,axis,mapping) (This)->lpVtbl->GetFlightStickAxisMappingInfo(This,axis,mapping)
#define IGameInputMapper_GetFlightStickButtonMappingInfo(This,button,mapping) (This)->lpVtbl->GetFlightStickButtonMappingInfo(This,button,mapping)
#define IGameInputMapper_GetGamepadAxisMappingInfo(This,axis,mapping) (This)->lpVtbl->GetGamepadAxisMappingInfo(This,axis,mapping)
#define IGameInputMapper_GetGamepadButtonMappingInfo(This,button,mapping) (This)->lpVtbl->GetGamepadButtonMappingInfo(This,button,mapping)
#define IGameInputMapper_GetRacingWheelAxisMappingInfo(This,axis,mapping) (This)->lpVtbl->GetRacingWheelAxisMappingInfo(This,axis,mapping)
#define IGameInputMapper_GetRacingWheelButtonMappingInfo(This,button,mapping) (This)->lpVtbl->GetRacingWheelButtonMappingInfo(This,button,mapping)
#else
/*** IUnknown methods ***/
static inline HRESULT IGameInputMapper_QueryInterface(IGameInputMapper* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IGameInputMapper_AddRef(IGameInputMapper* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IGameInputMapper_Release(IGameInputMapper* This) {
    return This->lpVtbl->Release(This);
}
/*** IGameInputMapper methods ***/
static inline bool IGameInputMapper_GetArcadeStickButtonMappingInfo(IGameInputMapper* This,GameInputArcadeStickButtons button,GameInputButtonMapping *mapping) {
    return This->lpVtbl->GetArcadeStickButtonMappingInfo(This,button,mapping);
}
static inline bool IGameInputMapper_GetFlightStickAxisMappingInfo(IGameInputMapper* This,GameInputFlightStickAxes axis,GameInputAxisMapping *mapping) {
    return This->lpVtbl->GetFlightStickAxisMappingInfo(This,axis,mapping);
}
static inline bool IGameInputMapper_GetFlightStickButtonMappingInfo(IGameInputMapper* This,GameInputFlightStickButtons button,GameInputButtonMapping *mapping) {
    return This->lpVtbl->GetFlightStickButtonMappingInfo(This,button,mapping);
}
static inline bool IGameInputMapper_GetGamepadAxisMappingInfo(IGameInputMapper* This,GameInputGamepadAxes axis,GameInputAxisMapping *mapping) {
    return This->lpVtbl->GetGamepadAxisMappingInfo(This,axis,mapping);
}
static inline bool IGameInputMapper_GetGamepadButtonMappingInfo(IGameInputMapper* This,GameInputGamepadButtons button,GameInputButtonMapping *mapping) {
    return This->lpVtbl->GetGamepadButtonMappingInfo(This,button,mapping);
}
static inline bool IGameInputMapper_GetRacingWheelAxisMappingInfo(IGameInputMapper* This,GameInputRacingWheelAxes axis,GameInputAxisMapping *mapping) {
    return This->lpVtbl->GetRacingWheelAxisMappingInfo(This,axis,mapping);
}
static inline bool IGameInputMapper_GetRacingWheelButtonMappingInfo(IGameInputMapper* This,GameInputRacingWheelButtons button,GameInputButtonMapping *mapping) {
    return This->lpVtbl->GetRacingWheelButtonMappingInfo(This,button,mapping);
}
#endif
#endif

#endif


#endif  /* __IGameInputMapper_INTERFACE_DEFINED__ */

#define FACILITY_GAMEINPUT (906)

#define GAMEINPUT_FACILITY (906)

#define GAMEINPUT_E_DEVICE_DISCONNECTED (0x838a0001)

#define GAMEINPUT_E_DEVICE_NOT_FOUND (0x838a0002)

#define GAMEINPUT_E_READING_NOT_FOUND (0x838a0003)

#define GAMEINPUT_E_REFERENCE_READING_TOO_OLD (0x838a0004)

#define GAMEINPUT_E_TIMESTAMP_OUT_OF_RANGE (0x838a0005)

#define GAMEINPUT_E_INSUFFICIENT_FORCE_FEEDBACK_RESOURCES (0x838a0006)

#define GAMEINPUT_E_FEEDBACK_NOT_SUPPORTED (0x838a0007)

#define GAMEINPUT_E_OBJECT_NO_LONGER_EXISTS (0x838a0008)

#define GAMEINPUT_E_CALLBACK_NOT_FOUND (0x838a0009)

#define GAMEINPUT_E_HAPTIC_INFO_NOT_FOUND (0x838a000a)

#define GAMEINPUT_E_AGGREGATE_OPERATION_NOT_SUPPORTED (0x838a000b)

#define GAMEINPUT_E_INPUT_KIND_NOT_PRESENT (0x838a000c)

HRESULT __stdcall  GameInputInitialize(REFIID iid,void **out);

#ifdef __WINESRC__
STDAPI GameInputCreate( IGameInput_v0 **out );
#else
struct GameInputLegacy;
STDAPI GameInputCreate( struct GameInputLegacy **out );
#endif

#ifdef __cplusplus
static inline HRESULT GameInputCreate( IGameInput **out )
{
    IUnknown *unk;
    HRESULT hr;

    *out = NULL;
    if (SUCCEEDED(hr = GameInputCreate( (struct GameInputLegacy **)&unk )))
    {
        hr = IUnknown_QueryInterface( unk, &IID_IGameInput, (void **)out );
        IUnknown_Release( unk );
    }

    return hr;
}
#endif /* __cplusplus */
#ifdef __cplusplus
}} /* namespace GameInput { namespace v2 { */
#endif /* __cplusplus */
/* Begin additional prototypes for all interfaces */


/* End additional prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __gameinput_h__ */
