/*** Autogenerated by WIDL 11.8 from ../wine/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 __v0_IGameInput_FWD_DEFINED__
#define __v0_IGameInput_FWD_DEFINED__
typedef interface v0_IGameInput v0_IGameInput;
#ifdef __cplusplus
interface v0_IGameInput;
#endif /* __cplusplus */
#endif

#ifndef __v1_IGameInput_FWD_DEFINED__
#define __v1_IGameInput_FWD_DEFINED__
typedef interface v1_IGameInput v1_IGameInput;
#ifdef __cplusplus
interface v1_IGameInput;
#endif /* __cplusplus */
#endif

#ifndef __v2_IGameInput_FWD_DEFINED__
#define __v2_IGameInput_FWD_DEFINED__
typedef interface v2_IGameInput v2_IGameInput;
#ifdef __cplusplus
interface v2_IGameInput;
#endif /* __cplusplus */
#endif

#ifndef __v0_IGameInputReading_FWD_DEFINED__
#define __v0_IGameInputReading_FWD_DEFINED__
typedef interface v0_IGameInputReading v0_IGameInputReading;
#ifdef __cplusplus
interface v0_IGameInputReading;
#endif /* __cplusplus */
#endif

#ifndef __v1_IGameInputReading_FWD_DEFINED__
#define __v1_IGameInputReading_FWD_DEFINED__
typedef interface v1_IGameInputReading v1_IGameInputReading;
#ifdef __cplusplus
interface v1_IGameInputReading;
#endif /* __cplusplus */
#endif

#ifndef __v2_IGameInputReading_FWD_DEFINED__
#define __v2_IGameInputReading_FWD_DEFINED__
typedef interface v2_IGameInputReading v2_IGameInputReading;
#ifdef __cplusplus
interface v2_IGameInputReading;
#endif /* __cplusplus */
#endif

#ifndef __v0_IGameInputDevice_FWD_DEFINED__
#define __v0_IGameInputDevice_FWD_DEFINED__
typedef interface v0_IGameInputDevice v0_IGameInputDevice;
#ifdef __cplusplus
interface v0_IGameInputDevice;
#endif /* __cplusplus */
#endif

#ifndef __v1_IGameInputDevice_FWD_DEFINED__
#define __v1_IGameInputDevice_FWD_DEFINED__
typedef interface v1_IGameInputDevice v1_IGameInputDevice;
#ifdef __cplusplus
interface v1_IGameInputDevice;
#endif /* __cplusplus */
#endif

#ifndef __v2_IGameInputDevice_FWD_DEFINED__
#define __v2_IGameInputDevice_FWD_DEFINED__
typedef interface v2_IGameInputDevice v2_IGameInputDevice;
#ifdef __cplusplus
interface v2_IGameInputDevice;
#endif /* __cplusplus */
#endif

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

#ifndef __v0_IGameInputForceFeedbackEffect_FWD_DEFINED__
#define __v0_IGameInputForceFeedbackEffect_FWD_DEFINED__
typedef interface v0_IGameInputForceFeedbackEffect v0_IGameInputForceFeedbackEffect;
#ifdef __cplusplus
interface v0_IGameInputForceFeedbackEffect;
#endif /* __cplusplus */
#endif

#ifndef __v2_IGameInputForceFeedbackEffect_FWD_DEFINED__
#define __v2_IGameInputForceFeedbackEffect_FWD_DEFINED__
typedef interface v2_IGameInputForceFeedbackEffect v2_IGameInputForceFeedbackEffect;
#ifdef __cplusplus
interface v2_IGameInputForceFeedbackEffect;
#endif /* __cplusplus */
#endif

#ifndef __IGameInputRawDeviceReport_FWD_DEFINED__
#define __IGameInputRawDeviceReport_FWD_DEFINED__
typedef interface IGameInputRawDeviceReport IGameInputRawDeviceReport;
#ifdef __cplusplus
interface IGameInputRawDeviceReport;
#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 2
#ifdef __cplusplus
namespace GameInput { namespace v2 {
#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) v ## ver ## _ ## func
# 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 GameInputEnumerationKind GameInputEnumerationKind;
typedef enum GameInputFeedbackAxes GameInputFeedbackAxes;
typedef enum GameInputFeedbackEffectState GameInputFeedbackEffectState;
typedef enum GameInputFlightStickButtons GameInputFlightStickButtons;
typedef enum GameInputFocusPolicy GameInputFocusPolicy;
typedef enum GameInputForceFeedbackEffectKind GameInputForceFeedbackEffectKind;
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 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 GameInputArcadeStickInfo;
typedef struct GameInputArcadeStickState GameInputArcadeStickState;
typedef struct GameInputBatteryState GameInputBatteryState;
typedef struct v0_GameInputControllerAxisInfo v0_GameInputControllerAxisInfo;
typedef struct v1_GameInputControllerAxisInfo v1_GameInputControllerAxisInfo;
typedef struct v1_GameInputControllerAxisInfo v2_GameInputControllerAxisInfo;
#define GameInputControllerAxisInfo GAMEINPUT_NAME(GameInputControllerAxisInfo)
typedef struct v0_GameInputControllerButtonInfo v0_GameInputControllerButtonInfo;
typedef struct v1_GameInputControllerButtonInfo v1_GameInputControllerButtonInfo;
typedef struct v1_GameInputControllerButtonInfo v2_GameInputControllerButtonInfo;
#define GameInputControllerButtonInfo GAMEINPUT_NAME(GameInputControllerButtonInfo)
typedef struct v0_GameInputControllerSwitchInfo v0_GameInputControllerSwitchInfo;
typedef struct v1_GameInputControllerSwitchInfo v1_GameInputControllerSwitchInfo;
typedef struct v1_GameInputControllerSwitchInfo v2_GameInputControllerSwitchInfo;
#define GameInputControllerSwitchInfo GAMEINPUT_NAME(GameInputControllerSwitchInfo)
typedef struct v0_GameInputDeviceInfo v0_GameInputDeviceInfo;
typedef struct v1_GameInputDeviceInfo v1_GameInputDeviceInfo;
typedef struct v2_GameInputDeviceInfo v2_GameInputDeviceInfo;
#define GameInputDeviceInfo GAMEINPUT_NAME(GameInputDeviceInfo)
typedef struct GameInputFlightStickInfo GameInputFlightStickInfo;
typedef struct GameInputFlightStickState GameInputFlightStickState;
typedef struct GameInputForceFeedbackConditionParams GameInputForceFeedbackConditionParams;
typedef struct GameInputForceFeedbackConstantParams GameInputForceFeedbackConstantParams;
typedef struct GameInputForceFeedbackEnvelope GameInputForceFeedbackEnvelope;
typedef struct GameInputForceFeedbackMagnitude GameInputForceFeedbackMagnitude;
typedef struct v0_GameInputForceFeedbackMotorInfo v0_GameInputForceFeedbackMotorInfo;
typedef struct v1_GameInputForceFeedbackMotorInfo v1_GameInputForceFeedbackMotorInfo;
typedef struct v1_GameInputForceFeedbackMotorInfo v2_GameInputForceFeedbackMotorInfo;
#define GameInputForceFeedbackMotorInfo GAMEINPUT_NAME(GameInputForceFeedbackMotorInfo)
typedef struct GameInputForceFeedbackParams GameInputForceFeedbackParams;
typedef struct GameInputForceFeedbackPeriodicParams GameInputForceFeedbackPeriodicParams;
typedef struct GameInputForceFeedbackRampParams GameInputForceFeedbackRampParams;
typedef struct GameInputGamepadInfo GameInputGamepadInfo;
typedef struct GameInputGamepadState GameInputGamepadState;
typedef struct GameInputHapticFeedbackMotorInfo GameInputHapticFeedbackMotorInfo;
typedef struct GameInputHapticFeedbackParams GameInputHapticFeedbackParams;
typedef struct GameInputHapticInfo GameInputHapticInfo;
typedef struct GameInputHapticWaveformInfo GameInputHapticWaveformInfo;
typedef struct v0_GameInputKeyboardInfo v0_GameInputKeyboardInfo;
typedef struct v1_GameInputKeyboardInfo v1_GameInputKeyboardInfo;
typedef struct v1_GameInputKeyboardInfo v2_GameInputKeyboardInfo;
#define GameInputKeyboardInfo GAMEINPUT_NAME(GameInputKeyboardInfo)
typedef struct GameInputKeyState GameInputKeyState;
typedef struct GameInputMotionInfo GameInputMotionInfo;
typedef struct GameInputMotionState GameInputMotionState;
typedef struct v0_GameInputMouseInfo v0_GameInputMouseInfo;
typedef struct v1_GameInputMouseInfo v1_GameInputMouseInfo;
typedef struct v1_GameInputMouseInfo v2_GameInputMouseInfo;
#define GameInputMouseInfo GAMEINPUT_NAME(GameInputMouseInfo)
typedef struct v0_GameInputMouseState v0_GameInputMouseState;
typedef struct v1_GameInputMouseState v1_GameInputMouseState;
typedef struct v1_GameInputMouseState v2_GameInputMouseState;
#define GameInputMouseState GAMEINPUT_NAME(GameInputMouseState)
typedef struct GameInputRacingWheelInfo GameInputRacingWheelInfo;
typedef struct GameInputRacingWheelState GameInputRacingWheelState;
typedef struct GameInputRawDeviceItemCollectionInfo GameInputRawDeviceItemCollectionInfo;
typedef struct GameInputRawDeviceReportInfo 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 __v0_IGameInput_FWD_DEFINED__
#define __v0_IGameInput_FWD_DEFINED__
typedef interface v0_IGameInput v0_IGameInput;
#ifdef __cplusplus
interface v0_IGameInput;
#endif /* __cplusplus */
#endif

#ifndef __v1_IGameInput_FWD_DEFINED__
#define __v1_IGameInput_FWD_DEFINED__
typedef interface v1_IGameInput v1_IGameInput;
#ifdef __cplusplus
interface v1_IGameInput;
#endif /* __cplusplus */
#endif

#ifndef __v2_IGameInput_FWD_DEFINED__
#define __v2_IGameInput_FWD_DEFINED__
typedef interface v2_IGameInput v2_IGameInput;
#ifdef __cplusplus
interface v2_IGameInput;
#endif /* __cplusplus */
#endif

#define IGameInput GAMEINPUT_NAME(IGameInput)
#ifndef __v0_IGameInputReading_FWD_DEFINED__
#define __v0_IGameInputReading_FWD_DEFINED__
typedef interface v0_IGameInputReading v0_IGameInputReading;
#ifdef __cplusplus
interface v0_IGameInputReading;
#endif /* __cplusplus */
#endif

#ifndef __v1_IGameInputReading_FWD_DEFINED__
#define __v1_IGameInputReading_FWD_DEFINED__
typedef interface v1_IGameInputReading v1_IGameInputReading;
#ifdef __cplusplus
interface v1_IGameInputReading;
#endif /* __cplusplus */
#endif

#ifndef __v2_IGameInputReading_FWD_DEFINED__
#define __v2_IGameInputReading_FWD_DEFINED__
typedef interface v2_IGameInputReading v2_IGameInputReading;
#ifdef __cplusplus
interface v2_IGameInputReading;
#endif /* __cplusplus */
#endif

#define IGameInputReading GAMEINPUT_NAME(IGameInputReading)
#ifndef __v0_IGameInputDevice_FWD_DEFINED__
#define __v0_IGameInputDevice_FWD_DEFINED__
typedef interface v0_IGameInputDevice v0_IGameInputDevice;
#ifdef __cplusplus
interface v0_IGameInputDevice;
#endif /* __cplusplus */
#endif

#ifndef __v1_IGameInputDevice_FWD_DEFINED__
#define __v1_IGameInputDevice_FWD_DEFINED__
typedef interface v1_IGameInputDevice v1_IGameInputDevice;
#ifdef __cplusplus
interface v1_IGameInputDevice;
#endif /* __cplusplus */
#endif

#ifndef __v2_IGameInputDevice_FWD_DEFINED__
#define __v2_IGameInputDevice_FWD_DEFINED__
typedef interface v2_IGameInputDevice v2_IGameInputDevice;
#ifdef __cplusplus
interface v2_IGameInputDevice;
#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 __v0_IGameInputForceFeedbackEffect_FWD_DEFINED__
#define __v0_IGameInputForceFeedbackEffect_FWD_DEFINED__
typedef interface v0_IGameInputForceFeedbackEffect v0_IGameInputForceFeedbackEffect;
#ifdef __cplusplus
interface v0_IGameInputForceFeedbackEffect;
#endif /* __cplusplus */
#endif

#ifndef __v2_IGameInputForceFeedbackEffect_FWD_DEFINED__
#define __v2_IGameInputForceFeedbackEffect_FWD_DEFINED__
typedef interface v2_IGameInputForceFeedbackEffect v2_IGameInputForceFeedbackEffect;
#ifdef __cplusplus
interface v2_IGameInputForceFeedbackEffect;
#endif /* __cplusplus */
#endif

#define IGameInputForceFeedbackEffect GAMEINPUT_NAME(IGameInputForceFeedbackEffect)
#ifndef __IGameInputRawDeviceReport_FWD_DEFINED__
#define __IGameInputRawDeviceReport_FWD_DEFINED__
typedef interface IGameInputRawDeviceReport IGameInputRawDeviceReport;
#ifdef __cplusplus
interface IGameInputRawDeviceReport;
#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 *v0_GameInputReadingCallback)(GameInputCallbackToken token,void *context,v0_IGameInputReading *reading,bool has_overrun);
typedef void (__stdcall *v1_GameInputReadingCallback)(GameInputCallbackToken token,void *context,v1_IGameInputReading *reading);
typedef void (__stdcall *v2_GameInputReadingCallback)(GameInputCallbackToken token,void *context,v2_IGameInputReading *reading);
#define GameInputReadingCallback GAMEINPUT_NAME(GameInputReadingCallback)
typedef void (__stdcall *v0_GameInputDeviceCallback)(GameInputCallbackToken token,void *context,v0_IGameInputDevice *device,uint64_t timestamp,GameInputDeviceStatus current_status,GameInputDeviceStatus previous_status);
typedef void (__stdcall *v1_GameInputDeviceCallback)(GameInputCallbackToken token,void *context,v1_IGameInputDevice *device,uint64_t timestamp,GameInputDeviceStatus current_status,GameInputDeviceStatus previous_status);
typedef void (__stdcall *v2_GameInputDeviceCallback)(GameInputCallbackToken token,void *context,v2_IGameInputDevice *device,uint64_t timestamp,GameInputDeviceStatus current_status,GameInputDeviceStatus previous_status);
#define GameInputDeviceCallback GAMEINPUT_NAME(GameInputDeviceCallback)
typedef void (__stdcall *v0_GameInputSystemButtonCallback)(GameInputCallbackToken token,void *context,v0_IGameInputDevice *device,uint64_t timestamp,GameInputSystemButtons current_buttons,GameInputSystemButtons previous_buttons);
typedef void (__stdcall *v1_GameInputSystemButtonCallback)(GameInputCallbackToken token,void *context,v1_IGameInputDevice *device,uint64_t timestamp,GameInputSystemButtons current_buttons,GameInputSystemButtons previous_buttons);
typedef void (__stdcall *v2_GameInputSystemButtonCallback)(GameInputCallbackToken token,void *context,v2_IGameInputDevice *device,uint64_t timestamp,GameInputSystemButtons current_buttons,GameInputSystemButtons previous_buttons);
#define GameInputSystemButtonCallback GAMEINPUT_NAME(GameInputSystemButtonCallback)
typedef void (__stdcall *v0_GameInputKeyboardLayoutCallback)(GameInputCallbackToken token,void *context,v0_IGameInputDevice *device,uint64_t timestamp,uint32_t current_layout,uint32_t previous_layout);
typedef void (__stdcall *v1_GameInputKeyboardLayoutCallback)(GameInputCallbackToken token,void *context,v1_IGameInputDevice *device,uint64_t timestamp,uint32_t current_layout,uint32_t previous_layout);
typedef void (__stdcall *v2_GameInputKeyboardLayoutCallback)(GameInputCallbackToken token,void *context,v2_IGameInputDevice *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 = 0x1000000
};
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
};
enum GameInputGamepadButtons {
    GameInputGamepadNone = 0x0,
    GameInputGamepadMenu = 0x1,
    GameInputGamepadView = 0x2,
    GameInputGamepadA = 0x4,
    GameInputGamepadB = 0x8,
    GameInputGamepadX = 0x10,
    GameInputGamepadY = 0x20,
    GameInputGamepadDPadUp = 0x40,
    GameInputGamepadDPadDown = 0x80,
    GameInputGamepadDPadLeft = 0x100,
    GameInputGamepadDPadRight = 0x200,
    GameInputGamepadLeftShoulder = 0x400,
    GameInputGamepadRightShoulder = 0x800,
    GameInputGamepadLeftThumbstick = 0x1000,
    GameInputGamepadRightThumbstick = 0x2000
};
enum GameInputRacingWheelButtons {
    GameInputRacingWheelNone = 0x0,
    GameInputRacingWheelMenu = 0x1,
    GameInputRacingWheelView = 0x2,
    GameInputRacingWheelPreviousGear = 0x4,
    GameInputRacingWheelNextGear = 0x8,
    GameInputRacingWheelDpadUp = 0x10,
    GameInputRacingWheelDpadDown = 0x20,
    GameInputRacingWheelDpadLeft = 0x40,
    GameInputRacingWheelDpadRight = 0x80
};
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 GameInputDeviceStatus {
    GameInputDeviceNoStatus = 0x0,
    GameInputDeviceConnected = 0x1,
    GameInputDeviceInputEnabled = 0x2,
    GameInputDeviceOutputEnabled = 0x4,
    GameInputDeviceRawIoEnabled = 0x8,
    GameInputDeviceAudioCapture = 0x10,
    GameInputDeviceAudioRender = 0x20,
    GameInputDeviceSynchronized = 0x40,
    GameInputDeviceWireless = 0x80,
    GameInputDeviceUserIdle = 0x100000,
    GameInputDeviceHapticInfoReady = 0x200000,
    v0_GameInputDeviceAnyStatus = 0xffffff,
    v1_GameInputDeviceAnyStatus = 0xffffffff,
    v2_GameInputDeviceAnyStatus = 0xffffffff
};
#define GameInputDeviceAnyStatus GAMEINPUT_NAME(GameInputDeviceAnyStatus)
enum GameInputBatteryStatus {
    GameInputBatteryUnknown = -1,
    GameInputBatteryNotPresent = 0,
    GameInputBatteryDischarging = 1,
    GameInputBatteryIdle = 2,
    GameInputBatteryCharging = 3
};
enum GameInputDeviceFamily {
    GameInputFamilyVirtual = -1,
    GameInputFamilyAggregate = 0,
    GameInputFamilyXboxOne = 1,
    GameInputFamilyXbox360 = 2,
    GameInputFamilyHid = 3,
    GameInputFamilyI8042 = 4
};
enum GameInputDeviceCapabilities {
    GameInputDeviceCapabilityNone = 0x0,
    GameInputDeviceCapabilityAudio = 0x1,
    GameInputDeviceCapabilityPluginModule = 0x2,
    GameInputDeviceCapabilityPowerOff = 0x4,
    GameInputDeviceCapabilitySynchronization = 0x8,
    GameInputDeviceCapabilityWireless = 0x10
};
enum GameInputRawDeviceReportKind {
    GameInputRawInputReport = 0,
    GameInputRawOutputReport = 1,
    GameInputRawFeatureReport = 2
};
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 = 121,
    GameInputLabelP2 = 122,
    GameInputLabelP3 = 123,
    GameInputLabelP4 = 124
};
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
};
struct GameInputKeyState {
    uint32_t scanCode;
    uint32_t codePoint;
    uint8_t virtualKey;
    bool isDeadKey;
};
struct v0_GameInputMouseState {
    GameInputMouseButtons buttons;
    int64_t positionX;
    int64_t positionY;
    int64_t wheelX;
    int64_t wheelY;
};
struct v1_GameInputMouseState {
    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 {
    GameInputRawDeviceReportKind kind;
    uint32_t id;
    uint32_t size;
    uint32_t itemCount;
    const GameInputRawDeviceReportItemInfo *items;
};
struct v0_GameInputControllerAxisInfo {
    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 *inputReport;
    const GameInputRawDeviceReportItemInfo *inputReportItem;
};
struct v1_GameInputControllerAxisInfo {
    GameInputKind mappedInputKinds;
    GameInputLabel label;
};
struct v0_GameInputControllerButtonInfo {
    GameInputKind mappedInputKinds;
    GameInputLabel label;
    uint16_t legacyDInputIndex;
    uint16_t legacyHidIndex;
    uint32_t rawReportIndex;
    const GameInputRawDeviceReportInfo *inputReport;
    const GameInputRawDeviceReportItemInfo *inputReportItem;
};
struct v1_GameInputControllerButtonInfo {
    GameInputKind mappedInputKinds;
    GameInputLabel label;
};
struct v0_GameInputControllerSwitchInfo {
    GameInputKind mappedInputKinds;
    GameInputLabel label;
    GameInputLabel positionLabels[9];
    GameInputSwitchKind kind;
    uint16_t legacyDInputIndex;
    uint16_t legacyHidIndex;
    uint32_t rawReportIndex;
    const GameInputRawDeviceReportInfo *inputReport;
    const GameInputRawDeviceReportItemInfo *inputReportItem;
};
struct v1_GameInputControllerSwitchInfo {
    GameInputKind mappedInputKinds;
    GameInputLabel label;
    GameInputSwitchKind kind;
};
struct v0_GameInputKeyboardInfo {
    GameInputKeyboardKind kind;
    uint32_t layout;
    uint32_t keyCount;
    uint32_t functionKeyCount;
    uint32_t maxSimultaneousKeys;
    uint32_t platformType;
    uint32_t platformSubtype;
    const GameInputString *nativeLanguage;
};
struct v1_GameInputKeyboardInfo {
    GameInputKeyboardKind kind;
    uint32_t layout;
    uint32_t keyCount;
    uint32_t functionKeyCount;
    uint32_t maxSimultaneousKeys;
    uint32_t platformType;
    uint32_t platformSubtype;
};
struct v0_GameInputMouseInfo {
    GameInputMouseButtons supportedButtons;
    uint32_t sampleRate;
    uint32_t sensorDpi;
    bool hasWheelX;
    bool hasWheelY;
};
struct v1_GameInputMouseInfo {
    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 {
    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 GameInputFlightStickInfo {
    GameInputLabel menuButtonLabel;
    GameInputLabel viewButtonLabel;
    GameInputLabel firePrimaryButtonLabel;
    GameInputLabel fireSecondaryButtonLabel;
    GameInputSwitchKind hatSwitchKind;
};
struct GameInputGamepadInfo {
    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 GameInputRacingWheelInfo {
    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 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 v0_GameInputForceFeedbackMotorInfo {
    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 v1_GameInputForceFeedbackMotorInfo {
    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 v0_GameInputDeviceInfo {
    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 *inputReportInfo;
    const GameInputRawDeviceReportInfo *outputReportInfo;
    const GameInputRawDeviceReportInfo *featureReportInfo;
    const v0_GameInputControllerAxisInfo *controllerAxisInfo;
    const v0_GameInputControllerButtonInfo *controllerButtonInfo;
    const v0_GameInputControllerSwitchInfo *controllerSwitchInfo;
    const v0_GameInputKeyboardInfo *keyboardInfo;
    const v0_GameInputMouseInfo *mouseInfo;
    const GameInputTouchSensorInfo *touchSensorInfo;
    const GameInputMotionInfo *motionInfo;
    const GameInputArcadeStickInfo *arcadeStickInfo;
    const GameInputFlightStickInfo *flightStickInfo;
    const GameInputGamepadInfo *gamepadInfo;
    const GameInputRacingWheelInfo *racingWheelInfo;
    const GameInputUiNavigationInfo *uiNavigationInfo;
    const v0_GameInputForceFeedbackMotorInfo *forceFeedbackMotorInfo;
    const GameInputHapticFeedbackMotorInfo *hapticFeedbackMotorInfo;
    const GameInputString *displayName;
    const GameInputString *deviceStrings;
    const void *deviceDescriptorData;
    GameInputSystemButtons supportedSystemButtons;
};
struct v1_GameInputDeviceInfo {
    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 v1_GameInputKeyboardInfo *keyboardInfo;
    const v1_GameInputMouseInfo *mouseInfo;
    const GameInputArcadeStickInfo *arcadeStickInfo;
    const GameInputFlightStickInfo *flightStickInfo;
    const GameInputGamepadInfo *gamepadInfo;
    const GameInputRacingWheelInfo *racingWheelInfo;
    const GameInputUiNavigationInfo *uiNavigationInfo;
    uint32_t controllerAxisCount;
    const v1_GameInputControllerAxisInfo *controllerAxisInfo;
    uint32_t controllerButtonCount;
    const v1_GameInputControllerButtonInfo *controllerButtonInfo;
    uint32_t controllerSwitchCount;
    const v1_GameInputControllerSwitchInfo *controllerSwitchInfo;
    uint32_t forceFeedbackMotorCount;
    const v1_GameInputForceFeedbackMotorInfo *forceFeedbackMotorInfo;
};
struct v2_GameInputDeviceInfo {
    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 v2_GameInputKeyboardInfo *keyboardInfo;
    const v2_GameInputMouseInfo *mouseInfo;
    const GameInputSensorsInfo *sensorsInfo;
    const GameInputArcadeStickInfo *arcadeStickInfo;
    const GameInputFlightStickInfo *flightStickInfo;
    const GameInputGamepadInfo *gamepadInfo;
    const GameInputRacingWheelInfo *racingWheelInfo;
    const GameInputUiNavigationInfo *uiNavigationInfo;
    uint32_t controllerAxisCount;
    const v2_GameInputControllerAxisInfo *controllerAxisInfo;
    uint32_t controllerButtonCount;
    const v2_GameInputControllerButtonInfo *controllerButtonInfo;
    uint32_t controllerSwitchCount;
    const v2_GameInputControllerSwitchInfo *controllerSwitchInfo;
    uint32_t forceFeedbackMotorCount;
    const v2_GameInputForceFeedbackMotorInfo *forceFeedbackMotorInfo;
};
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;
};
/*****************************************************************************
 * v0_IGameInput interface
 */
#ifndef __v0_IGameInput_INTERFACE_DEFINED__
#define __v0_IGameInput_INTERFACE_DEFINED__

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

    virtual HRESULT STDMETHODCALLTYPE GetCurrentReading(
        GameInputKind kind,
        v0_IGameInputDevice *device,
        v0_IGameInputReading **reading) = 0;

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

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

    virtual HRESULT STDMETHODCALLTYPE GetTemporalReading(
        uint64_t timestamp,
        v0_IGameInputDevice *device,
        v0_IGameInputReading **reading) = 0;

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

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

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

    virtual HRESULT STDMETHODCALLTYPE RegisterKeyboardLayoutCallback(
        v0_IGameInputDevice *device,
        void *context,
        v0_GameInputKeyboardLayoutCallback 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,
        v0_IGameInputDevice **device) = 0;

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

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

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

    virtual HRESULT STDMETHODCALLTYPE FindDeviceFromPlatformString(
        const WCHAR *value,
        v0_IGameInputDevice **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(v0_IGameInput, 0x11be2a7e, 0x4254, 0x445a, 0x9c,0x09, 0xff,0xc4,0x0f,0x00,0x69,0x18)
#endif
#else
typedef struct v0_IGameInputVtbl {
    BEGIN_INTERFACE

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

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

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

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

    HRESULT (STDMETHODCALLTYPE *GetCurrentReading)(
        v0_IGameInput *This,
        GameInputKind kind,
        v0_IGameInputDevice *device,
        v0_IGameInputReading **reading);

    HRESULT (STDMETHODCALLTYPE *GetNextReading)(
        v0_IGameInput *This,
        v0_IGameInputReading *reference,
        GameInputKind kind,
        v0_IGameInputDevice *device,
        v0_IGameInputReading **reading);

    HRESULT (STDMETHODCALLTYPE *GetPreviousReading)(
        v0_IGameInput *This,
        v0_IGameInputReading *reference,
        GameInputKind kind,
        v0_IGameInputDevice *device,
        v0_IGameInputReading **reading);

    HRESULT (STDMETHODCALLTYPE *GetTemporalReading)(
        v0_IGameInput *This,
        uint64_t timestamp,
        v0_IGameInputDevice *device,
        v0_IGameInputReading **reading);

    HRESULT (STDMETHODCALLTYPE *RegisterReadingCallback)(
        v0_IGameInput *This,
        v0_IGameInputDevice *device,
        GameInputKind kind,
        float threshold,
        void *context,
        v0_GameInputReadingCallback callback,
        GameInputCallbackToken *token);

    HRESULT (STDMETHODCALLTYPE *RegisterDeviceCallback)(
        v0_IGameInput *This,
        v0_IGameInputDevice *device,
        GameInputKind kind,
        GameInputDeviceStatus filter,
        GameInputEnumerationKind enum_kind,
        void *context,
        v0_GameInputDeviceCallback callback,
        GameInputCallbackToken *token);

    HRESULT (STDMETHODCALLTYPE *RegisterSystemButtonCallback)(
        v0_IGameInput *This,
        v0_IGameInputDevice *device,
        GameInputSystemButtons filter,
        void *context,
        v0_GameInputSystemButtonCallback callback,
        GameInputCallbackToken *token);

    HRESULT (STDMETHODCALLTYPE *RegisterKeyboardLayoutCallback)(
        v0_IGameInput *This,
        v0_IGameInputDevice *device,
        void *context,
        v0_GameInputKeyboardLayoutCallback callback,
        GameInputCallbackToken *token);

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

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

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

    HRESULT (STDMETHODCALLTYPE *CreateAggregateDevice)(
        v0_IGameInput *This,
        GameInputKind kind,
        v0_IGameInputDevice **device);

    HRESULT (STDMETHODCALLTYPE *FindDeviceFromId)(
        v0_IGameInput *This,
        const APP_LOCAL_DEVICE_ID *value,
        v0_IGameInputDevice **device);

    HRESULT (STDMETHODCALLTYPE *FindDeviceFromObject)(
        v0_IGameInput *This,
        IUnknown *value,
        v0_IGameInputDevice **device);

    HRESULT (STDMETHODCALLTYPE *FindDeviceFromPlatformHandle)(
        v0_IGameInput *This,
        HANDLE value,
        v0_IGameInputDevice **device);

    HRESULT (STDMETHODCALLTYPE *FindDeviceFromPlatformString)(
        v0_IGameInput *This,
        const WCHAR *value,
        v0_IGameInputDevice **device);

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

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

    END_INTERFACE
} v0_IGameInputVtbl;

interface v0_IGameInput {
    CONST_VTBL v0_IGameInputVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define v0_IGameInput_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define v0_IGameInput_AddRef(This) (This)->lpVtbl->AddRef(This)
#define v0_IGameInput_Release(This) (This)->lpVtbl->Release(This)
/*** v0_IGameInput methods ***/
#define v0_IGameInput_GetCurrentTimestamp(This) (This)->lpVtbl->GetCurrentTimestamp(This)
#define v0_IGameInput_GetCurrentReading(This,kind,device,reading) (This)->lpVtbl->GetCurrentReading(This,kind,device,reading)
#define v0_IGameInput_GetNextReading(This,reference,kind,device,reading) (This)->lpVtbl->GetNextReading(This,reference,kind,device,reading)
#define v0_IGameInput_GetPreviousReading(This,reference,kind,device,reading) (This)->lpVtbl->GetPreviousReading(This,reference,kind,device,reading)
#define v0_IGameInput_GetTemporalReading(This,timestamp,device,reading) (This)->lpVtbl->GetTemporalReading(This,timestamp,device,reading)
#define v0_IGameInput_RegisterReadingCallback(This,device,kind,threshold,context,callback,token) (This)->lpVtbl->RegisterReadingCallback(This,device,kind,threshold,context,callback,token)
#define v0_IGameInput_RegisterDeviceCallback(This,device,kind,filter,enum_kind,context,callback,token) (This)->lpVtbl->RegisterDeviceCallback(This,device,kind,filter,enum_kind,context,callback,token)
#define v0_IGameInput_RegisterSystemButtonCallback(This,device,filter,context,callback,token) (This)->lpVtbl->RegisterSystemButtonCallback(This,device,filter,context,callback,token)
#define v0_IGameInput_RegisterKeyboardLayoutCallback(This,device,context,callback,token) (This)->lpVtbl->RegisterKeyboardLayoutCallback(This,device,context,callback,token)
#define v0_IGameInput_StopCallback(This,token) (This)->lpVtbl->StopCallback(This,token)
#define v0_IGameInput_UnregisterCallback(This,token,timeout_ms) (This)->lpVtbl->UnregisterCallback(This,token,timeout_ms)
#define v0_IGameInput_CreateDispatcher(This,dispatcher) (This)->lpVtbl->CreateDispatcher(This,dispatcher)
#define v0_IGameInput_CreateAggregateDevice(This,kind,device) (This)->lpVtbl->CreateAggregateDevice(This,kind,device)
#define v0_IGameInput_FindDeviceFromId(This,value,device) (This)->lpVtbl->FindDeviceFromId(This,value,device)
#define v0_IGameInput_FindDeviceFromObject(This,value,device) (This)->lpVtbl->FindDeviceFromObject(This,value,device)
#define v0_IGameInput_FindDeviceFromPlatformHandle(This,value,device) (This)->lpVtbl->FindDeviceFromPlatformHandle(This,value,device)
#define v0_IGameInput_FindDeviceFromPlatformString(This,value,device) (This)->lpVtbl->FindDeviceFromPlatformString(This,value,device)
#define v0_IGameInput_EnableOemDeviceSupport(This,vid,pid,iface,collection) (This)->lpVtbl->EnableOemDeviceSupport(This,vid,pid,iface,collection)
#define v0_IGameInput_SetFocusPolicy(This,policy) (This)->lpVtbl->SetFocusPolicy(This,policy)
#else
/*** IUnknown methods ***/
static inline HRESULT v0_IGameInput_QueryInterface(v0_IGameInput* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG v0_IGameInput_AddRef(v0_IGameInput* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG v0_IGameInput_Release(v0_IGameInput* This) {
    return This->lpVtbl->Release(This);
}
/*** v0_IGameInput methods ***/
static inline uint64_t v0_IGameInput_GetCurrentTimestamp(v0_IGameInput* This) {
    return This->lpVtbl->GetCurrentTimestamp(This);
}
static inline HRESULT v0_IGameInput_GetCurrentReading(v0_IGameInput* This,GameInputKind kind,v0_IGameInputDevice *device,v0_IGameInputReading **reading) {
    return This->lpVtbl->GetCurrentReading(This,kind,device,reading);
}
static inline HRESULT v0_IGameInput_GetNextReading(v0_IGameInput* This,v0_IGameInputReading *reference,GameInputKind kind,v0_IGameInputDevice *device,v0_IGameInputReading **reading) {
    return This->lpVtbl->GetNextReading(This,reference,kind,device,reading);
}
static inline HRESULT v0_IGameInput_GetPreviousReading(v0_IGameInput* This,v0_IGameInputReading *reference,GameInputKind kind,v0_IGameInputDevice *device,v0_IGameInputReading **reading) {
    return This->lpVtbl->GetPreviousReading(This,reference,kind,device,reading);
}
static inline HRESULT v0_IGameInput_GetTemporalReading(v0_IGameInput* This,uint64_t timestamp,v0_IGameInputDevice *device,v0_IGameInputReading **reading) {
    return This->lpVtbl->GetTemporalReading(This,timestamp,device,reading);
}
static inline HRESULT v0_IGameInput_RegisterReadingCallback(v0_IGameInput* This,v0_IGameInputDevice *device,GameInputKind kind,float threshold,void *context,v0_GameInputReadingCallback callback,GameInputCallbackToken *token) {
    return This->lpVtbl->RegisterReadingCallback(This,device,kind,threshold,context,callback,token);
}
static inline HRESULT v0_IGameInput_RegisterDeviceCallback(v0_IGameInput* This,v0_IGameInputDevice *device,GameInputKind kind,GameInputDeviceStatus filter,GameInputEnumerationKind enum_kind,void *context,v0_GameInputDeviceCallback callback,GameInputCallbackToken *token) {
    return This->lpVtbl->RegisterDeviceCallback(This,device,kind,filter,enum_kind,context,callback,token);
}
static inline HRESULT v0_IGameInput_RegisterSystemButtonCallback(v0_IGameInput* This,v0_IGameInputDevice *device,GameInputSystemButtons filter,void *context,v0_GameInputSystemButtonCallback callback,GameInputCallbackToken *token) {
    return This->lpVtbl->RegisterSystemButtonCallback(This,device,filter,context,callback,token);
}
static inline HRESULT v0_IGameInput_RegisterKeyboardLayoutCallback(v0_IGameInput* This,v0_IGameInputDevice *device,void *context,v0_GameInputKeyboardLayoutCallback callback,GameInputCallbackToken *token) {
    return This->lpVtbl->RegisterKeyboardLayoutCallback(This,device,context,callback,token);
}
static inline void v0_IGameInput_StopCallback(v0_IGameInput* This,GameInputCallbackToken token) {
    This->lpVtbl->StopCallback(This,token);
}
static inline bool v0_IGameInput_UnregisterCallback(v0_IGameInput* This,GameInputCallbackToken token,uint64_t timeout_ms) {
    return This->lpVtbl->UnregisterCallback(This,token,timeout_ms);
}
static inline HRESULT v0_IGameInput_CreateDispatcher(v0_IGameInput* This,IGameInputDispatcher **dispatcher) {
    return This->lpVtbl->CreateDispatcher(This,dispatcher);
}
static inline HRESULT v0_IGameInput_CreateAggregateDevice(v0_IGameInput* This,GameInputKind kind,v0_IGameInputDevice **device) {
    return This->lpVtbl->CreateAggregateDevice(This,kind,device);
}
static inline HRESULT v0_IGameInput_FindDeviceFromId(v0_IGameInput* This,const APP_LOCAL_DEVICE_ID *value,v0_IGameInputDevice **device) {
    return This->lpVtbl->FindDeviceFromId(This,value,device);
}
static inline HRESULT v0_IGameInput_FindDeviceFromObject(v0_IGameInput* This,IUnknown *value,v0_IGameInputDevice **device) {
    return This->lpVtbl->FindDeviceFromObject(This,value,device);
}
static inline HRESULT v0_IGameInput_FindDeviceFromPlatformHandle(v0_IGameInput* This,HANDLE value,v0_IGameInputDevice **device) {
    return This->lpVtbl->FindDeviceFromPlatformHandle(This,value,device);
}
static inline HRESULT v0_IGameInput_FindDeviceFromPlatformString(v0_IGameInput* This,const WCHAR *value,v0_IGameInputDevice **device) {
    return This->lpVtbl->FindDeviceFromPlatformString(This,value,device);
}
static inline HRESULT v0_IGameInput_EnableOemDeviceSupport(v0_IGameInput* 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 v0_IGameInput_SetFocusPolicy(v0_IGameInput* This,GameInputFocusPolicy policy) {
    This->lpVtbl->SetFocusPolicy(This,policy);
}
#endif
#endif

#endif


#endif  /* __v0_IGameInput_INTERFACE_DEFINED__ */

/*****************************************************************************
 * v1_IGameInput interface
 */
#ifndef __v1_IGameInput_INTERFACE_DEFINED__
#define __v1_IGameInput_INTERFACE_DEFINED__

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

    virtual HRESULT STDMETHODCALLTYPE GetCurrentReading(
        GameInputKind kind,
        v1_IGameInputDevice *device,
        v1_IGameInputReading **reading) = 0;

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

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

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

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

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

    virtual HRESULT STDMETHODCALLTYPE RegisterKeyboardLayoutCallback(
        v1_IGameInputDevice *device,
        void *context,
        v1_GameInputKeyboardLayoutCallback 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,
        v1_IGameInputDevice **device) = 0;

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

    virtual void STDMETHODCALLTYPE SetFocusPolicy(
        GameInputFocusPolicy policy) = 0;

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

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

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

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

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

    HRESULT (STDMETHODCALLTYPE *GetCurrentReading)(
        v1_IGameInput *This,
        GameInputKind kind,
        v1_IGameInputDevice *device,
        v1_IGameInputReading **reading);

    HRESULT (STDMETHODCALLTYPE *GetNextReading)(
        v1_IGameInput *This,
        v1_IGameInputReading *reference,
        GameInputKind kind,
        v1_IGameInputDevice *device,
        v1_IGameInputReading **reading);

    HRESULT (STDMETHODCALLTYPE *GetPreviousReading)(
        v1_IGameInput *This,
        v1_IGameInputReading *reference,
        GameInputKind kind,
        v1_IGameInputDevice *device,
        v1_IGameInputReading **reading);

    HRESULT (STDMETHODCALLTYPE *RegisterReadingCallback)(
        v1_IGameInput *This,
        v1_IGameInputDevice *device,
        GameInputKind kind,
        void *context,
        v1_GameInputReadingCallback callback,
        GameInputCallbackToken *token);

    HRESULT (STDMETHODCALLTYPE *RegisterDeviceCallback)(
        v1_IGameInput *This,
        v1_IGameInputDevice *device,
        GameInputKind kind,
        GameInputDeviceStatus filter,
        GameInputEnumerationKind enum_kind,
        void *context,
        v1_GameInputDeviceCallback callback,
        GameInputCallbackToken *token);

    HRESULT (STDMETHODCALLTYPE *RegisterSystemButtonCallback)(
        v1_IGameInput *This,
        v1_IGameInputDevice *device,
        GameInputSystemButtons filter,
        void *context,
        v1_GameInputSystemButtonCallback callback,
        GameInputCallbackToken *token);

    HRESULT (STDMETHODCALLTYPE *RegisterKeyboardLayoutCallback)(
        v1_IGameInput *This,
        v1_IGameInputDevice *device,
        void *context,
        v1_GameInputKeyboardLayoutCallback callback,
        GameInputCallbackToken *token);

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

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

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

    HRESULT (STDMETHODCALLTYPE *FindDeviceFromId)(
        v1_IGameInput *This,
        const APP_LOCAL_DEVICE_ID *value,
        v1_IGameInputDevice **device);

    HRESULT (STDMETHODCALLTYPE *FindDeviceFromPlatformString)(
        v1_IGameInput *This,
        const WCHAR *value,
        v1_IGameInputDevice **device);

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

    END_INTERFACE
} v1_IGameInputVtbl;

interface v1_IGameInput {
    CONST_VTBL v1_IGameInputVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define v1_IGameInput_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define v1_IGameInput_AddRef(This) (This)->lpVtbl->AddRef(This)
#define v1_IGameInput_Release(This) (This)->lpVtbl->Release(This)
/*** v1_IGameInput methods ***/
#define v1_IGameInput_GetCurrentTimestamp(This) (This)->lpVtbl->GetCurrentTimestamp(This)
#define v1_IGameInput_GetCurrentReading(This,kind,device,reading) (This)->lpVtbl->GetCurrentReading(This,kind,device,reading)
#define v1_IGameInput_GetNextReading(This,reference,kind,device,reading) (This)->lpVtbl->GetNextReading(This,reference,kind,device,reading)
#define v1_IGameInput_GetPreviousReading(This,reference,kind,device,reading) (This)->lpVtbl->GetPreviousReading(This,reference,kind,device,reading)
#define v1_IGameInput_RegisterReadingCallback(This,device,kind,context,callback,token) (This)->lpVtbl->RegisterReadingCallback(This,device,kind,context,callback,token)
#define v1_IGameInput_RegisterDeviceCallback(This,device,kind,filter,enum_kind,context,callback,token) (This)->lpVtbl->RegisterDeviceCallback(This,device,kind,filter,enum_kind,context,callback,token)
#define v1_IGameInput_RegisterSystemButtonCallback(This,device,filter,context,callback,token) (This)->lpVtbl->RegisterSystemButtonCallback(This,device,filter,context,callback,token)
#define v1_IGameInput_RegisterKeyboardLayoutCallback(This,device,context,callback,token) (This)->lpVtbl->RegisterKeyboardLayoutCallback(This,device,context,callback,token)
#define v1_IGameInput_StopCallback(This,token) (This)->lpVtbl->StopCallback(This,token)
#define v1_IGameInput_UnregisterCallback(This,token) (This)->lpVtbl->UnregisterCallback(This,token)
#define v1_IGameInput_CreateDispatcher(This,dispatcher) (This)->lpVtbl->CreateDispatcher(This,dispatcher)
#define v1_IGameInput_FindDeviceFromId(This,value,device) (This)->lpVtbl->FindDeviceFromId(This,value,device)
#define v1_IGameInput_FindDeviceFromPlatformString(This,value,device) (This)->lpVtbl->FindDeviceFromPlatformString(This,value,device)
#define v1_IGameInput_SetFocusPolicy(This,policy) (This)->lpVtbl->SetFocusPolicy(This,policy)
#else
/*** IUnknown methods ***/
static inline HRESULT v1_IGameInput_QueryInterface(v1_IGameInput* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG v1_IGameInput_AddRef(v1_IGameInput* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG v1_IGameInput_Release(v1_IGameInput* This) {
    return This->lpVtbl->Release(This);
}
/*** v1_IGameInput methods ***/
static inline uint64_t v1_IGameInput_GetCurrentTimestamp(v1_IGameInput* This) {
    return This->lpVtbl->GetCurrentTimestamp(This);
}
static inline HRESULT v1_IGameInput_GetCurrentReading(v1_IGameInput* This,GameInputKind kind,v1_IGameInputDevice *device,v1_IGameInputReading **reading) {
    return This->lpVtbl->GetCurrentReading(This,kind,device,reading);
}
static inline HRESULT v1_IGameInput_GetNextReading(v1_IGameInput* This,v1_IGameInputReading *reference,GameInputKind kind,v1_IGameInputDevice *device,v1_IGameInputReading **reading) {
    return This->lpVtbl->GetNextReading(This,reference,kind,device,reading);
}
static inline HRESULT v1_IGameInput_GetPreviousReading(v1_IGameInput* This,v1_IGameInputReading *reference,GameInputKind kind,v1_IGameInputDevice *device,v1_IGameInputReading **reading) {
    return This->lpVtbl->GetPreviousReading(This,reference,kind,device,reading);
}
static inline HRESULT v1_IGameInput_RegisterReadingCallback(v1_IGameInput* This,v1_IGameInputDevice *device,GameInputKind kind,void *context,v1_GameInputReadingCallback callback,GameInputCallbackToken *token) {
    return This->lpVtbl->RegisterReadingCallback(This,device,kind,context,callback,token);
}
static inline HRESULT v1_IGameInput_RegisterDeviceCallback(v1_IGameInput* This,v1_IGameInputDevice *device,GameInputKind kind,GameInputDeviceStatus filter,GameInputEnumerationKind enum_kind,void *context,v1_GameInputDeviceCallback callback,GameInputCallbackToken *token) {
    return This->lpVtbl->RegisterDeviceCallback(This,device,kind,filter,enum_kind,context,callback,token);
}
static inline HRESULT v1_IGameInput_RegisterSystemButtonCallback(v1_IGameInput* This,v1_IGameInputDevice *device,GameInputSystemButtons filter,void *context,v1_GameInputSystemButtonCallback callback,GameInputCallbackToken *token) {
    return This->lpVtbl->RegisterSystemButtonCallback(This,device,filter,context,callback,token);
}
static inline HRESULT v1_IGameInput_RegisterKeyboardLayoutCallback(v1_IGameInput* This,v1_IGameInputDevice *device,void *context,v1_GameInputKeyboardLayoutCallback callback,GameInputCallbackToken *token) {
    return This->lpVtbl->RegisterKeyboardLayoutCallback(This,device,context,callback,token);
}
static inline void v1_IGameInput_StopCallback(v1_IGameInput* This,GameInputCallbackToken token) {
    This->lpVtbl->StopCallback(This,token);
}
static inline bool v1_IGameInput_UnregisterCallback(v1_IGameInput* This,GameInputCallbackToken token) {
    return This->lpVtbl->UnregisterCallback(This,token);
}
static inline HRESULT v1_IGameInput_CreateDispatcher(v1_IGameInput* This,IGameInputDispatcher **dispatcher) {
    return This->lpVtbl->CreateDispatcher(This,dispatcher);
}
static inline HRESULT v1_IGameInput_FindDeviceFromId(v1_IGameInput* This,const APP_LOCAL_DEVICE_ID *value,v1_IGameInputDevice **device) {
    return This->lpVtbl->FindDeviceFromId(This,value,device);
}
static inline HRESULT v1_IGameInput_FindDeviceFromPlatformString(v1_IGameInput* This,const WCHAR *value,v1_IGameInputDevice **device) {
    return This->lpVtbl->FindDeviceFromPlatformString(This,value,device);
}
static inline void v1_IGameInput_SetFocusPolicy(v1_IGameInput* This,GameInputFocusPolicy policy) {
    This->lpVtbl->SetFocusPolicy(This,policy);
}
#endif
#endif

#endif


#endif  /* __v1_IGameInput_INTERFACE_DEFINED__ */

/*****************************************************************************
 * v2_IGameInput interface
 */
#ifndef __v2_IGameInput_INTERFACE_DEFINED__
#define __v2_IGameInput_INTERFACE_DEFINED__

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

    virtual HRESULT STDMETHODCALLTYPE GetCurrentReading(
        GameInputKind kind,
        v2_IGameInputDevice *device,
        v2_IGameInputReading **reading) = 0;

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

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

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

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

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

    virtual HRESULT STDMETHODCALLTYPE RegisterKeyboardLayoutCallback(
        v2_IGameInputDevice *device,
        void *context,
        v2_GameInputKeyboardLayoutCallback 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,
        v2_IGameInputDevice **device) = 0;

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

    virtual void STDMETHODCALLTYPE SetFocusPolicy(
        GameInputFocusPolicy policy) = 0;

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

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

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

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

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

    HRESULT (STDMETHODCALLTYPE *GetCurrentReading)(
        v2_IGameInput *This,
        GameInputKind kind,
        v2_IGameInputDevice *device,
        v2_IGameInputReading **reading);

    HRESULT (STDMETHODCALLTYPE *GetNextReading)(
        v2_IGameInput *This,
        v2_IGameInputReading *reference,
        GameInputKind kind,
        v2_IGameInputDevice *device,
        v2_IGameInputReading **reading);

    HRESULT (STDMETHODCALLTYPE *GetPreviousReading)(
        v2_IGameInput *This,
        v2_IGameInputReading *reference,
        GameInputKind kind,
        v2_IGameInputDevice *device,
        v2_IGameInputReading **reading);

    HRESULT (STDMETHODCALLTYPE *RegisterReadingCallback)(
        v2_IGameInput *This,
        v2_IGameInputDevice *device,
        GameInputKind kind,
        void *context,
        v2_GameInputReadingCallback callback,
        GameInputCallbackToken *token);

    HRESULT (STDMETHODCALLTYPE *RegisterDeviceCallback)(
        v2_IGameInput *This,
        v2_IGameInputDevice *device,
        GameInputKind kind,
        GameInputDeviceStatus filter,
        GameInputEnumerationKind enum_kind,
        void *context,
        v2_GameInputDeviceCallback callback,
        GameInputCallbackToken *token);

    HRESULT (STDMETHODCALLTYPE *RegisterSystemButtonCallback)(
        v2_IGameInput *This,
        v2_IGameInputDevice *device,
        GameInputSystemButtons filter,
        void *context,
        v2_GameInputSystemButtonCallback callback,
        GameInputCallbackToken *token);

    HRESULT (STDMETHODCALLTYPE *RegisterKeyboardLayoutCallback)(
        v2_IGameInput *This,
        v2_IGameInputDevice *device,
        void *context,
        v2_GameInputKeyboardLayoutCallback callback,
        GameInputCallbackToken *token);

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

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

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

    HRESULT (STDMETHODCALLTYPE *FindDeviceFromId)(
        v2_IGameInput *This,
        const APP_LOCAL_DEVICE_ID *value,
        v2_IGameInputDevice **device);

    HRESULT (STDMETHODCALLTYPE *FindDeviceFromPlatformString)(
        v2_IGameInput *This,
        const WCHAR *value,
        v2_IGameInputDevice **device);

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

    END_INTERFACE
} v2_IGameInputVtbl;

interface v2_IGameInput {
    CONST_VTBL v2_IGameInputVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define v2_IGameInput_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define v2_IGameInput_AddRef(This) (This)->lpVtbl->AddRef(This)
#define v2_IGameInput_Release(This) (This)->lpVtbl->Release(This)
/*** v2_IGameInput methods ***/
#define v2_IGameInput_GetCurrentTimestamp(This) (This)->lpVtbl->GetCurrentTimestamp(This)
#define v2_IGameInput_GetCurrentReading(This,kind,device,reading) (This)->lpVtbl->GetCurrentReading(This,kind,device,reading)
#define v2_IGameInput_GetNextReading(This,reference,kind,device,reading) (This)->lpVtbl->GetNextReading(This,reference,kind,device,reading)
#define v2_IGameInput_GetPreviousReading(This,reference,kind,device,reading) (This)->lpVtbl->GetPreviousReading(This,reference,kind,device,reading)
#define v2_IGameInput_RegisterReadingCallback(This,device,kind,context,callback,token) (This)->lpVtbl->RegisterReadingCallback(This,device,kind,context,callback,token)
#define v2_IGameInput_RegisterDeviceCallback(This,device,kind,filter,enum_kind,context,callback,token) (This)->lpVtbl->RegisterDeviceCallback(This,device,kind,filter,enum_kind,context,callback,token)
#define v2_IGameInput_RegisterSystemButtonCallback(This,device,filter,context,callback,token) (This)->lpVtbl->RegisterSystemButtonCallback(This,device,filter,context,callback,token)
#define v2_IGameInput_RegisterKeyboardLayoutCallback(This,device,context,callback,token) (This)->lpVtbl->RegisterKeyboardLayoutCallback(This,device,context,callback,token)
#define v2_IGameInput_StopCallback(This,token) (This)->lpVtbl->StopCallback(This,token)
#define v2_IGameInput_UnregisterCallback(This,token) (This)->lpVtbl->UnregisterCallback(This,token)
#define v2_IGameInput_CreateDispatcher(This,dispatcher) (This)->lpVtbl->CreateDispatcher(This,dispatcher)
#define v2_IGameInput_FindDeviceFromId(This,value,device) (This)->lpVtbl->FindDeviceFromId(This,value,device)
#define v2_IGameInput_FindDeviceFromPlatformString(This,value,device) (This)->lpVtbl->FindDeviceFromPlatformString(This,value,device)
#define v2_IGameInput_SetFocusPolicy(This,policy) (This)->lpVtbl->SetFocusPolicy(This,policy)
#else
/*** IUnknown methods ***/
static inline HRESULT v2_IGameInput_QueryInterface(v2_IGameInput* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG v2_IGameInput_AddRef(v2_IGameInput* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG v2_IGameInput_Release(v2_IGameInput* This) {
    return This->lpVtbl->Release(This);
}
/*** v2_IGameInput methods ***/
static inline uint64_t v2_IGameInput_GetCurrentTimestamp(v2_IGameInput* This) {
    return This->lpVtbl->GetCurrentTimestamp(This);
}
static inline HRESULT v2_IGameInput_GetCurrentReading(v2_IGameInput* This,GameInputKind kind,v2_IGameInputDevice *device,v2_IGameInputReading **reading) {
    return This->lpVtbl->GetCurrentReading(This,kind,device,reading);
}
static inline HRESULT v2_IGameInput_GetNextReading(v2_IGameInput* This,v2_IGameInputReading *reference,GameInputKind kind,v2_IGameInputDevice *device,v2_IGameInputReading **reading) {
    return This->lpVtbl->GetNextReading(This,reference,kind,device,reading);
}
static inline HRESULT v2_IGameInput_GetPreviousReading(v2_IGameInput* This,v2_IGameInputReading *reference,GameInputKind kind,v2_IGameInputDevice *device,v2_IGameInputReading **reading) {
    return This->lpVtbl->GetPreviousReading(This,reference,kind,device,reading);
}
static inline HRESULT v2_IGameInput_RegisterReadingCallback(v2_IGameInput* This,v2_IGameInputDevice *device,GameInputKind kind,void *context,v2_GameInputReadingCallback callback,GameInputCallbackToken *token) {
    return This->lpVtbl->RegisterReadingCallback(This,device,kind,context,callback,token);
}
static inline HRESULT v2_IGameInput_RegisterDeviceCallback(v2_IGameInput* This,v2_IGameInputDevice *device,GameInputKind kind,GameInputDeviceStatus filter,GameInputEnumerationKind enum_kind,void *context,v2_GameInputDeviceCallback callback,GameInputCallbackToken *token) {
    return This->lpVtbl->RegisterDeviceCallback(This,device,kind,filter,enum_kind,context,callback,token);
}
static inline HRESULT v2_IGameInput_RegisterSystemButtonCallback(v2_IGameInput* This,v2_IGameInputDevice *device,GameInputSystemButtons filter,void *context,v2_GameInputSystemButtonCallback callback,GameInputCallbackToken *token) {
    return This->lpVtbl->RegisterSystemButtonCallback(This,device,filter,context,callback,token);
}
static inline HRESULT v2_IGameInput_RegisterKeyboardLayoutCallback(v2_IGameInput* This,v2_IGameInputDevice *device,void *context,v2_GameInputKeyboardLayoutCallback callback,GameInputCallbackToken *token) {
    return This->lpVtbl->RegisterKeyboardLayoutCallback(This,device,context,callback,token);
}
static inline void v2_IGameInput_StopCallback(v2_IGameInput* This,GameInputCallbackToken token) {
    This->lpVtbl->StopCallback(This,token);
}
static inline bool v2_IGameInput_UnregisterCallback(v2_IGameInput* This,GameInputCallbackToken token) {
    return This->lpVtbl->UnregisterCallback(This,token);
}
static inline HRESULT v2_IGameInput_CreateDispatcher(v2_IGameInput* This,IGameInputDispatcher **dispatcher) {
    return This->lpVtbl->CreateDispatcher(This,dispatcher);
}
static inline HRESULT v2_IGameInput_FindDeviceFromId(v2_IGameInput* This,const APP_LOCAL_DEVICE_ID *value,v2_IGameInputDevice **device) {
    return This->lpVtbl->FindDeviceFromId(This,value,device);
}
static inline HRESULT v2_IGameInput_FindDeviceFromPlatformString(v2_IGameInput* This,const WCHAR *value,v2_IGameInputDevice **device) {
    return This->lpVtbl->FindDeviceFromPlatformString(This,value,device);
}
static inline void v2_IGameInput_SetFocusPolicy(v2_IGameInput* This,GameInputFocusPolicy policy) {
    This->lpVtbl->SetFocusPolicy(This,policy);
}
#endif
#endif

#endif


#endif  /* __v2_IGameInput_INTERFACE_DEFINED__ */

/*****************************************************************************
 * v0_IGameInputReading interface
 */
#ifndef __v0_IGameInputReading_INTERFACE_DEFINED__
#define __v0_IGameInputReading_INTERFACE_DEFINED__

DEFINE_GUID(IID_v0_IGameInputReading, 0x2156947a, 0xe1fa, 0x4de0, 0xa3,0x0b, 0xd8,0x12,0x93,0x1d,0xbd,0x8d);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("2156947a-e1fa-4de0-a30b-d812931dbd8d")
v0_IGameInputReading : 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(
        v0_IGameInputDevice **device) = 0;

    virtual bool STDMETHODCALLTYPE GetRawReport(
        IGameInputRawDeviceReport **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(
        v0_GameInputMouseState *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(v0_IGameInputReading, 0x2156947a, 0xe1fa, 0x4de0, 0xa3,0x0b, 0xd8,0x12,0x93,0x1d,0xbd,0x8d)
#endif
#else
typedef struct v0_IGameInputReadingVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

    void (STDMETHODCALLTYPE *GetDevice)(
        v0_IGameInputReading *This,
        v0_IGameInputDevice **device);

    bool (STDMETHODCALLTYPE *GetRawReport)(
        v0_IGameInputReading *This,
        IGameInputRawDeviceReport **report);

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

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

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

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

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

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

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

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

    bool (STDMETHODCALLTYPE *GetMouseState)(
        v0_IGameInputReading *This,
        v0_GameInputMouseState *state);

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

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

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

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

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

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

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

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

    END_INTERFACE
} v0_IGameInputReadingVtbl;

interface v0_IGameInputReading {
    CONST_VTBL v0_IGameInputReadingVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define v0_IGameInputReading_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define v0_IGameInputReading_AddRef(This) (This)->lpVtbl->AddRef(This)
#define v0_IGameInputReading_Release(This) (This)->lpVtbl->Release(This)
/*** v0_IGameInputReading methods ***/
#define v0_IGameInputReading_GetInputKind(This) (This)->lpVtbl->GetInputKind(This)
#define v0_IGameInputReading_GetSequenceNumber(This,kind) (This)->lpVtbl->GetSequenceNumber(This,kind)
#define v0_IGameInputReading_GetTimestamp(This) (This)->lpVtbl->GetTimestamp(This)
#define v0_IGameInputReading_GetDevice(This,device) (This)->lpVtbl->GetDevice(This,device)
#define v0_IGameInputReading_GetRawReport(This,report) (This)->lpVtbl->GetRawReport(This,report)
#define v0_IGameInputReading_GetControllerAxisCount(This) (This)->lpVtbl->GetControllerAxisCount(This)
#define v0_IGameInputReading_GetControllerAxisState(This,count,state) (This)->lpVtbl->GetControllerAxisState(This,count,state)
#define v0_IGameInputReading_GetControllerButtonCount(This) (This)->lpVtbl->GetControllerButtonCount(This)
#define v0_IGameInputReading_GetControllerButtonState(This,count,state) (This)->lpVtbl->GetControllerButtonState(This,count,state)
#define v0_IGameInputReading_GetControllerSwitchCount(This) (This)->lpVtbl->GetControllerSwitchCount(This)
#define v0_IGameInputReading_GetControllerSwitchState(This,count,state) (This)->lpVtbl->GetControllerSwitchState(This,count,state)
#define v0_IGameInputReading_GetKeyCount(This) (This)->lpVtbl->GetKeyCount(This)
#define v0_IGameInputReading_GetKeyState(This,count,state) (This)->lpVtbl->GetKeyState(This,count,state)
#define v0_IGameInputReading_GetMouseState(This,state) (This)->lpVtbl->GetMouseState(This,state)
#define v0_IGameInputReading_GetTouchCount(This) (This)->lpVtbl->GetTouchCount(This)
#define v0_IGameInputReading_GetTouchState(This,count,state) (This)->lpVtbl->GetTouchState(This,count,state)
#define v0_IGameInputReading_GetMotionState(This,state) (This)->lpVtbl->GetMotionState(This,state)
#define v0_IGameInputReading_GetArcadeStickState(This,state) (This)->lpVtbl->GetArcadeStickState(This,state)
#define v0_IGameInputReading_GetFlightStickState(This,state) (This)->lpVtbl->GetFlightStickState(This,state)
#define v0_IGameInputReading_GetGamepadState(This,state) (This)->lpVtbl->GetGamepadState(This,state)
#define v0_IGameInputReading_GetRacingWheelState(This,state) (This)->lpVtbl->GetRacingWheelState(This,state)
#define v0_IGameInputReading_GetUiNavigationState(This,state) (This)->lpVtbl->GetUiNavigationState(This,state)
#else
/*** IUnknown methods ***/
static inline HRESULT v0_IGameInputReading_QueryInterface(v0_IGameInputReading* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG v0_IGameInputReading_AddRef(v0_IGameInputReading* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG v0_IGameInputReading_Release(v0_IGameInputReading* This) {
    return This->lpVtbl->Release(This);
}
/*** v0_IGameInputReading methods ***/
static inline GameInputKind v0_IGameInputReading_GetInputKind(v0_IGameInputReading* This) {
    return This->lpVtbl->GetInputKind(This);
}
static inline uint64_t v0_IGameInputReading_GetSequenceNumber(v0_IGameInputReading* This,GameInputKind kind) {
    return This->lpVtbl->GetSequenceNumber(This,kind);
}
static inline uint64_t v0_IGameInputReading_GetTimestamp(v0_IGameInputReading* This) {
    return This->lpVtbl->GetTimestamp(This);
}
static inline void v0_IGameInputReading_GetDevice(v0_IGameInputReading* This,v0_IGameInputDevice **device) {
    This->lpVtbl->GetDevice(This,device);
}
static inline bool v0_IGameInputReading_GetRawReport(v0_IGameInputReading* This,IGameInputRawDeviceReport **report) {
    return This->lpVtbl->GetRawReport(This,report);
}
static inline uint32_t v0_IGameInputReading_GetControllerAxisCount(v0_IGameInputReading* This) {
    return This->lpVtbl->GetControllerAxisCount(This);
}
static inline uint32_t v0_IGameInputReading_GetControllerAxisState(v0_IGameInputReading* This,uint32_t count,float *state) {
    return This->lpVtbl->GetControllerAxisState(This,count,state);
}
static inline uint32_t v0_IGameInputReading_GetControllerButtonCount(v0_IGameInputReading* This) {
    return This->lpVtbl->GetControllerButtonCount(This);
}
static inline uint32_t v0_IGameInputReading_GetControllerButtonState(v0_IGameInputReading* This,uint32_t count,bool *state) {
    return This->lpVtbl->GetControllerButtonState(This,count,state);
}
static inline uint32_t v0_IGameInputReading_GetControllerSwitchCount(v0_IGameInputReading* This) {
    return This->lpVtbl->GetControllerSwitchCount(This);
}
static inline uint32_t v0_IGameInputReading_GetControllerSwitchState(v0_IGameInputReading* This,uint32_t count,GameInputSwitchPosition *state) {
    return This->lpVtbl->GetControllerSwitchState(This,count,state);
}
static inline uint32_t v0_IGameInputReading_GetKeyCount(v0_IGameInputReading* This) {
    return This->lpVtbl->GetKeyCount(This);
}
static inline uint32_t v0_IGameInputReading_GetKeyState(v0_IGameInputReading* This,uint32_t count,GameInputKeyState *state) {
    return This->lpVtbl->GetKeyState(This,count,state);
}
static inline bool v0_IGameInputReading_GetMouseState(v0_IGameInputReading* This,v0_GameInputMouseState *state) {
    return This->lpVtbl->GetMouseState(This,state);
}
static inline uint32_t v0_IGameInputReading_GetTouchCount(v0_IGameInputReading* This) {
    return This->lpVtbl->GetTouchCount(This);
}
static inline uint32_t v0_IGameInputReading_GetTouchState(v0_IGameInputReading* This,uint32_t count,GameInputTouchState *state) {
    return This->lpVtbl->GetTouchState(This,count,state);
}
static inline bool v0_IGameInputReading_GetMotionState(v0_IGameInputReading* This,GameInputMotionState *state) {
    return This->lpVtbl->GetMotionState(This,state);
}
static inline bool v0_IGameInputReading_GetArcadeStickState(v0_IGameInputReading* This,GameInputArcadeStickState *state) {
    return This->lpVtbl->GetArcadeStickState(This,state);
}
static inline bool v0_IGameInputReading_GetFlightStickState(v0_IGameInputReading* This,GameInputFlightStickState *state) {
    return This->lpVtbl->GetFlightStickState(This,state);
}
static inline bool v0_IGameInputReading_GetGamepadState(v0_IGameInputReading* This,GameInputGamepadState *state) {
    return This->lpVtbl->GetGamepadState(This,state);
}
static inline bool v0_IGameInputReading_GetRacingWheelState(v0_IGameInputReading* This,GameInputRacingWheelState *state) {
    return This->lpVtbl->GetRacingWheelState(This,state);
}
static inline bool v0_IGameInputReading_GetUiNavigationState(v0_IGameInputReading* This,GameInputUiNavigationState *state) {
    return This->lpVtbl->GetUiNavigationState(This,state);
}
#endif
#endif

#endif


#endif  /* __v0_IGameInputReading_INTERFACE_DEFINED__ */

/*****************************************************************************
 * v1_IGameInputReading interface
 */
#ifndef __v1_IGameInputReading_INTERFACE_DEFINED__
#define __v1_IGameInputReading_INTERFACE_DEFINED__

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

    virtual uint64_t STDMETHODCALLTYPE GetTimestamp(
        ) = 0;

    virtual void STDMETHODCALLTYPE GetDevice(
        v1_IGameInputDevice **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(
        v1_GameInputMouseState *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(v1_IGameInputReading, 0x86318e60, 0x0b3c, 0x40d6, 0xbe,0xfa, 0xc6,0x2f,0x2d,0x95,0x27,0x24)
#endif
#else
typedef struct v1_IGameInputReadingVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

    void (STDMETHODCALLTYPE *GetDevice)(
        v1_IGameInputReading *This,
        v1_IGameInputDevice **device);

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

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

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

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

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

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

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

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

    bool (STDMETHODCALLTYPE *GetMouseState)(
        v1_IGameInputReading *This,
        v1_GameInputMouseState *state);

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

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

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

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

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

    END_INTERFACE
} v1_IGameInputReadingVtbl;

interface v1_IGameInputReading {
    CONST_VTBL v1_IGameInputReadingVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define v1_IGameInputReading_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define v1_IGameInputReading_AddRef(This) (This)->lpVtbl->AddRef(This)
#define v1_IGameInputReading_Release(This) (This)->lpVtbl->Release(This)
/*** v1_IGameInputReading methods ***/
#define v1_IGameInputReading_GetInputKind(This) (This)->lpVtbl->GetInputKind(This)
#define v1_IGameInputReading_GetTimestamp(This) (This)->lpVtbl->GetTimestamp(This)
#define v1_IGameInputReading_GetDevice(This,device) (This)->lpVtbl->GetDevice(This,device)
#define v1_IGameInputReading_GetControllerAxisCount(This) (This)->lpVtbl->GetControllerAxisCount(This)
#define v1_IGameInputReading_GetControllerAxisState(This,count,state) (This)->lpVtbl->GetControllerAxisState(This,count,state)
#define v1_IGameInputReading_GetControllerButtonCount(This) (This)->lpVtbl->GetControllerButtonCount(This)
#define v1_IGameInputReading_GetControllerButtonState(This,count,state) (This)->lpVtbl->GetControllerButtonState(This,count,state)
#define v1_IGameInputReading_GetControllerSwitchCount(This) (This)->lpVtbl->GetControllerSwitchCount(This)
#define v1_IGameInputReading_GetControllerSwitchState(This,count,state) (This)->lpVtbl->GetControllerSwitchState(This,count,state)
#define v1_IGameInputReading_GetKeyCount(This) (This)->lpVtbl->GetKeyCount(This)
#define v1_IGameInputReading_GetKeyState(This,count,state) (This)->lpVtbl->GetKeyState(This,count,state)
#define v1_IGameInputReading_GetMouseState(This,state) (This)->lpVtbl->GetMouseState(This,state)
#define v1_IGameInputReading_GetArcadeStickState(This,state) (This)->lpVtbl->GetArcadeStickState(This,state)
#define v1_IGameInputReading_GetFlightStickState(This,state) (This)->lpVtbl->GetFlightStickState(This,state)
#define v1_IGameInputReading_GetGamepadState(This,state) (This)->lpVtbl->GetGamepadState(This,state)
#define v1_IGameInputReading_GetRacingWheelState(This,state) (This)->lpVtbl->GetRacingWheelState(This,state)
#define v1_IGameInputReading_GetUiNavigationState(This,state) (This)->lpVtbl->GetUiNavigationState(This,state)
#else
/*** IUnknown methods ***/
static inline HRESULT v1_IGameInputReading_QueryInterface(v1_IGameInputReading* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG v1_IGameInputReading_AddRef(v1_IGameInputReading* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG v1_IGameInputReading_Release(v1_IGameInputReading* This) {
    return This->lpVtbl->Release(This);
}
/*** v1_IGameInputReading methods ***/
static inline GameInputKind v1_IGameInputReading_GetInputKind(v1_IGameInputReading* This) {
    return This->lpVtbl->GetInputKind(This);
}
static inline uint64_t v1_IGameInputReading_GetTimestamp(v1_IGameInputReading* This) {
    return This->lpVtbl->GetTimestamp(This);
}
static inline void v1_IGameInputReading_GetDevice(v1_IGameInputReading* This,v1_IGameInputDevice **device) {
    This->lpVtbl->GetDevice(This,device);
}
static inline uint32_t v1_IGameInputReading_GetControllerAxisCount(v1_IGameInputReading* This) {
    return This->lpVtbl->GetControllerAxisCount(This);
}
static inline uint32_t v1_IGameInputReading_GetControllerAxisState(v1_IGameInputReading* This,uint32_t count,float *state) {
    return This->lpVtbl->GetControllerAxisState(This,count,state);
}
static inline uint32_t v1_IGameInputReading_GetControllerButtonCount(v1_IGameInputReading* This) {
    return This->lpVtbl->GetControllerButtonCount(This);
}
static inline uint32_t v1_IGameInputReading_GetControllerButtonState(v1_IGameInputReading* This,uint32_t count,bool *state) {
    return This->lpVtbl->GetControllerButtonState(This,count,state);
}
static inline uint32_t v1_IGameInputReading_GetControllerSwitchCount(v1_IGameInputReading* This) {
    return This->lpVtbl->GetControllerSwitchCount(This);
}
static inline uint32_t v1_IGameInputReading_GetControllerSwitchState(v1_IGameInputReading* This,uint32_t count,GameInputSwitchPosition *state) {
    return This->lpVtbl->GetControllerSwitchState(This,count,state);
}
static inline uint32_t v1_IGameInputReading_GetKeyCount(v1_IGameInputReading* This) {
    return This->lpVtbl->GetKeyCount(This);
}
static inline uint32_t v1_IGameInputReading_GetKeyState(v1_IGameInputReading* This,uint32_t count,GameInputKeyState *state) {
    return This->lpVtbl->GetKeyState(This,count,state);
}
static inline bool v1_IGameInputReading_GetMouseState(v1_IGameInputReading* This,v1_GameInputMouseState *state) {
    return This->lpVtbl->GetMouseState(This,state);
}
static inline bool v1_IGameInputReading_GetArcadeStickState(v1_IGameInputReading* This,GameInputArcadeStickState *state) {
    return This->lpVtbl->GetArcadeStickState(This,state);
}
static inline bool v1_IGameInputReading_GetFlightStickState(v1_IGameInputReading* This,GameInputFlightStickState *state) {
    return This->lpVtbl->GetFlightStickState(This,state);
}
static inline bool v1_IGameInputReading_GetGamepadState(v1_IGameInputReading* This,GameInputGamepadState *state) {
    return This->lpVtbl->GetGamepadState(This,state);
}
static inline bool v1_IGameInputReading_GetRacingWheelState(v1_IGameInputReading* This,GameInputRacingWheelState *state) {
    return This->lpVtbl->GetRacingWheelState(This,state);
}
static inline bool v1_IGameInputReading_GetUiNavigationState(v1_IGameInputReading* This,GameInputUiNavigationState *state) {
    return This->lpVtbl->GetUiNavigationState(This,state);
}
#endif
#endif

#endif


#endif  /* __v1_IGameInputReading_INTERFACE_DEFINED__ */

/*****************************************************************************
 * v2_IGameInputReading interface
 */
#ifndef __v2_IGameInputReading_INTERFACE_DEFINED__
#define __v2_IGameInputReading_INTERFACE_DEFINED__

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

    virtual uint64_t STDMETHODCALLTYPE GetTimestamp(
        ) = 0;

    virtual void STDMETHODCALLTYPE GetDevice(
        v2_IGameInputDevice **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(
        v2_GameInputMouseState *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(v2_IGameInputReading, 0x65f06483, 0xdb76, 0x40b7, 0xb7,0x45, 0xf5,0x91,0xfa,0xe5,0x5f,0xc9)
#endif
#else
typedef struct v2_IGameInputReadingVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

    void (STDMETHODCALLTYPE *GetDevice)(
        v2_IGameInputReading *This,
        v2_IGameInputDevice **device);

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

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

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

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

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

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

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

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

    bool (STDMETHODCALLTYPE *GetMouseState)(
        v2_IGameInputReading *This,
        v2_GameInputMouseState *state);

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

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

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

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

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

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

    END_INTERFACE
} v2_IGameInputReadingVtbl;

interface v2_IGameInputReading {
    CONST_VTBL v2_IGameInputReadingVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define v2_IGameInputReading_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define v2_IGameInputReading_AddRef(This) (This)->lpVtbl->AddRef(This)
#define v2_IGameInputReading_Release(This) (This)->lpVtbl->Release(This)
/*** v2_IGameInputReading methods ***/
#define v2_IGameInputReading_GetInputKind(This) (This)->lpVtbl->GetInputKind(This)
#define v2_IGameInputReading_GetTimestamp(This) (This)->lpVtbl->GetTimestamp(This)
#define v2_IGameInputReading_GetDevice(This,device) (This)->lpVtbl->GetDevice(This,device)
#define v2_IGameInputReading_GetControllerAxisCount(This) (This)->lpVtbl->GetControllerAxisCount(This)
#define v2_IGameInputReading_GetControllerAxisState(This,count,state) (This)->lpVtbl->GetControllerAxisState(This,count,state)
#define v2_IGameInputReading_GetControllerButtonCount(This) (This)->lpVtbl->GetControllerButtonCount(This)
#define v2_IGameInputReading_GetControllerButtonState(This,count,state) (This)->lpVtbl->GetControllerButtonState(This,count,state)
#define v2_IGameInputReading_GetControllerSwitchCount(This) (This)->lpVtbl->GetControllerSwitchCount(This)
#define v2_IGameInputReading_GetControllerSwitchState(This,count,state) (This)->lpVtbl->GetControllerSwitchState(This,count,state)
#define v2_IGameInputReading_GetKeyCount(This) (This)->lpVtbl->GetKeyCount(This)
#define v2_IGameInputReading_GetKeyState(This,count,state) (This)->lpVtbl->GetKeyState(This,count,state)
#define v2_IGameInputReading_GetMouseState(This,state) (This)->lpVtbl->GetMouseState(This,state)
#define v2_IGameInputReading_GetSensorsState(This,state) (This)->lpVtbl->GetSensorsState(This,state)
#define v2_IGameInputReading_GetArcadeStickState(This,state) (This)->lpVtbl->GetArcadeStickState(This,state)
#define v2_IGameInputReading_GetFlightStickState(This,state) (This)->lpVtbl->GetFlightStickState(This,state)
#define v2_IGameInputReading_GetGamepadState(This,state) (This)->lpVtbl->GetGamepadState(This,state)
#define v2_IGameInputReading_GetRacingWheelState(This,state) (This)->lpVtbl->GetRacingWheelState(This,state)
#define v2_IGameInputReading_GetUiNavigationState(This,state) (This)->lpVtbl->GetUiNavigationState(This,state)
#else
/*** IUnknown methods ***/
static inline HRESULT v2_IGameInputReading_QueryInterface(v2_IGameInputReading* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG v2_IGameInputReading_AddRef(v2_IGameInputReading* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG v2_IGameInputReading_Release(v2_IGameInputReading* This) {
    return This->lpVtbl->Release(This);
}
/*** v2_IGameInputReading methods ***/
static inline GameInputKind v2_IGameInputReading_GetInputKind(v2_IGameInputReading* This) {
    return This->lpVtbl->GetInputKind(This);
}
static inline uint64_t v2_IGameInputReading_GetTimestamp(v2_IGameInputReading* This) {
    return This->lpVtbl->GetTimestamp(This);
}
static inline void v2_IGameInputReading_GetDevice(v2_IGameInputReading* This,v2_IGameInputDevice **device) {
    This->lpVtbl->GetDevice(This,device);
}
static inline uint32_t v2_IGameInputReading_GetControllerAxisCount(v2_IGameInputReading* This) {
    return This->lpVtbl->GetControllerAxisCount(This);
}
static inline uint32_t v2_IGameInputReading_GetControllerAxisState(v2_IGameInputReading* This,uint32_t count,float *state) {
    return This->lpVtbl->GetControllerAxisState(This,count,state);
}
static inline uint32_t v2_IGameInputReading_GetControllerButtonCount(v2_IGameInputReading* This) {
    return This->lpVtbl->GetControllerButtonCount(This);
}
static inline uint32_t v2_IGameInputReading_GetControllerButtonState(v2_IGameInputReading* This,uint32_t count,bool *state) {
    return This->lpVtbl->GetControllerButtonState(This,count,state);
}
static inline uint32_t v2_IGameInputReading_GetControllerSwitchCount(v2_IGameInputReading* This) {
    return This->lpVtbl->GetControllerSwitchCount(This);
}
static inline uint32_t v2_IGameInputReading_GetControllerSwitchState(v2_IGameInputReading* This,uint32_t count,GameInputSwitchPosition *state) {
    return This->lpVtbl->GetControllerSwitchState(This,count,state);
}
static inline uint32_t v2_IGameInputReading_GetKeyCount(v2_IGameInputReading* This) {
    return This->lpVtbl->GetKeyCount(This);
}
static inline uint32_t v2_IGameInputReading_GetKeyState(v2_IGameInputReading* This,uint32_t count,GameInputKeyState *state) {
    return This->lpVtbl->GetKeyState(This,count,state);
}
static inline bool v2_IGameInputReading_GetMouseState(v2_IGameInputReading* This,v2_GameInputMouseState *state) {
    return This->lpVtbl->GetMouseState(This,state);
}
static inline bool v2_IGameInputReading_GetSensorsState(v2_IGameInputReading* This,GameInputSensorsState *state) {
    return This->lpVtbl->GetSensorsState(This,state);
}
static inline bool v2_IGameInputReading_GetArcadeStickState(v2_IGameInputReading* This,GameInputArcadeStickState *state) {
    return This->lpVtbl->GetArcadeStickState(This,state);
}
static inline bool v2_IGameInputReading_GetFlightStickState(v2_IGameInputReading* This,GameInputFlightStickState *state) {
    return This->lpVtbl->GetFlightStickState(This,state);
}
static inline bool v2_IGameInputReading_GetGamepadState(v2_IGameInputReading* This,GameInputGamepadState *state) {
    return This->lpVtbl->GetGamepadState(This,state);
}
static inline bool v2_IGameInputReading_GetRacingWheelState(v2_IGameInputReading* This,GameInputRacingWheelState *state) {
    return This->lpVtbl->GetRacingWheelState(This,state);
}
static inline bool v2_IGameInputReading_GetUiNavigationState(v2_IGameInputReading* This,GameInputUiNavigationState *state) {
    return This->lpVtbl->GetUiNavigationState(This,state);
}
#endif
#endif

#endif


#endif  /* __v2_IGameInputReading_INTERFACE_DEFINED__ */

/*****************************************************************************
 * v0_IGameInputDevice interface
 */
#ifndef __v0_IGameInputDevice_INTERFACE_DEFINED__
#define __v0_IGameInputDevice_INTERFACE_DEFINED__

DEFINE_GUID(IID_v0_IGameInputDevice, 0x31dd86fb, 0x4c1b, 0x408a, 0x86,0x8f, 0x43,0x9b,0x3c,0xd4,0x71,0x25);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("31dd86fb-4c1b-408a-868f-439b3cd47125")
v0_IGameInputDevice : public IUnknown
{
    virtual const v0_GameInputDeviceInfo * 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,
        v0_IGameInputForceFeedbackEffect **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 **report) = 0;

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

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

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

    virtual HRESULT STDMETHODCALLTYPE SendRawDeviceOutputWithResponse(
        IGameInputRawDeviceReport *request,
        IGameInputRawDeviceReport **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(v0_IGameInputDevice, 0x31dd86fb, 0x4c1b, 0x408a, 0x86,0x8f, 0x43,0x9b,0x3c,0xd4,0x71,0x25)
#endif
#else
typedef struct v0_IGameInputDeviceVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** v0_IGameInputDevice methods ***/
    const v0_GameInputDeviceInfo * (STDMETHODCALLTYPE *GetDeviceInfo)(
        v0_IGameInputDevice *This);

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

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

    HRESULT (STDMETHODCALLTYPE *CreateForceFeedbackEffect)(
        v0_IGameInputDevice *This,
        uint32_t motor,
        const GameInputForceFeedbackParams *params,
        v0_IGameInputForceFeedbackEffect **effect);

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

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

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

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

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

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

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

    HRESULT (STDMETHODCALLTYPE *CreateRawDeviceReport)(
        v0_IGameInputDevice *This,
        uint32_t id,
        GameInputRawDeviceReportKind kind,
        IGameInputRawDeviceReport **report);

    HRESULT (STDMETHODCALLTYPE *GetRawDeviceFeature)(
        v0_IGameInputDevice *This,
        uint32_t id,
        IGameInputRawDeviceReport **report);

    HRESULT (STDMETHODCALLTYPE *SetRawDeviceFeature)(
        v0_IGameInputDevice *This,
        IGameInputRawDeviceReport *report);

    HRESULT (STDMETHODCALLTYPE *SendRawDeviceOutput)(
        v0_IGameInputDevice *This,
        IGameInputRawDeviceReport *report);

    HRESULT (STDMETHODCALLTYPE *SendRawDeviceOutputWithResponse)(
        v0_IGameInputDevice *This,
        IGameInputRawDeviceReport *request,
        IGameInputRawDeviceReport **reply);

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

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

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

    END_INTERFACE
} v0_IGameInputDeviceVtbl;

interface v0_IGameInputDevice {
    CONST_VTBL v0_IGameInputDeviceVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define v0_IGameInputDevice_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define v0_IGameInputDevice_AddRef(This) (This)->lpVtbl->AddRef(This)
#define v0_IGameInputDevice_Release(This) (This)->lpVtbl->Release(This)
/*** v0_IGameInputDevice methods ***/
#define v0_IGameInputDevice_GetDeviceInfo(This) (This)->lpVtbl->GetDeviceInfo(This)
#define v0_IGameInputDevice_GetDeviceStatus(This) (This)->lpVtbl->GetDeviceStatus(This)
#define v0_IGameInputDevice_GetBatteryState(This,state) (This)->lpVtbl->GetBatteryState(This,state)
#define v0_IGameInputDevice_CreateForceFeedbackEffect(This,motor,params,effect) (This)->lpVtbl->CreateForceFeedbackEffect(This,motor,params,effect)
#define v0_IGameInputDevice_IsForceFeedbackMotorPoweredOn(This,motor) (This)->lpVtbl->IsForceFeedbackMotorPoweredOn(This,motor)
#define v0_IGameInputDevice_SetForceFeedbackMotorGain(This,motor,gain) (This)->lpVtbl->SetForceFeedbackMotorGain(This,motor,gain)
#define v0_IGameInputDevice_SetHapticMotorState(This,motor,params) (This)->lpVtbl->SetHapticMotorState(This,motor,params)
#define v0_IGameInputDevice_SetRumbleState(This,params) (This)->lpVtbl->SetRumbleState(This,params)
#define v0_IGameInputDevice_SetInputSynchronizationState(This,enabled) (This)->lpVtbl->SetInputSynchronizationState(This,enabled)
#define v0_IGameInputDevice_SendInputSynchronizationHint(This) (This)->lpVtbl->SendInputSynchronizationHint(This)
#define v0_IGameInputDevice_PowerOff(This) (This)->lpVtbl->PowerOff(This)
#define v0_IGameInputDevice_CreateRawDeviceReport(This,id,kind,report) (This)->lpVtbl->CreateRawDeviceReport(This,id,kind,report)
#define v0_IGameInputDevice_GetRawDeviceFeature(This,id,report) (This)->lpVtbl->GetRawDeviceFeature(This,id,report)
#define v0_IGameInputDevice_SetRawDeviceFeature(This,report) (This)->lpVtbl->SetRawDeviceFeature(This,report)
#define v0_IGameInputDevice_SendRawDeviceOutput(This,report) (This)->lpVtbl->SendRawDeviceOutput(This,report)
#define v0_IGameInputDevice_SendRawDeviceOutputWithResponse(This,request,reply) (This)->lpVtbl->SendRawDeviceOutputWithResponse(This,request,reply)
#define v0_IGameInputDevice_ExecuteRawDeviceIoControl(This,code,in_size,input,out_size,output,size) (This)->lpVtbl->ExecuteRawDeviceIoControl(This,code,in_size,input,out_size,output,size)
#define v0_IGameInputDevice_AcquireExclusiveRawDeviceAccess(This,timeout_ms) (This)->lpVtbl->AcquireExclusiveRawDeviceAccess(This,timeout_ms)
#define v0_IGameInputDevice_ReleaseExclusiveRawDeviceAccess(This) (This)->lpVtbl->ReleaseExclusiveRawDeviceAccess(This)
#else
/*** IUnknown methods ***/
static inline HRESULT v0_IGameInputDevice_QueryInterface(v0_IGameInputDevice* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG v0_IGameInputDevice_AddRef(v0_IGameInputDevice* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG v0_IGameInputDevice_Release(v0_IGameInputDevice* This) {
    return This->lpVtbl->Release(This);
}
/*** v0_IGameInputDevice methods ***/
static inline const v0_GameInputDeviceInfo * v0_IGameInputDevice_GetDeviceInfo(v0_IGameInputDevice* This) {
    return This->lpVtbl->GetDeviceInfo(This);
}
static inline GameInputDeviceStatus v0_IGameInputDevice_GetDeviceStatus(v0_IGameInputDevice* This) {
    return This->lpVtbl->GetDeviceStatus(This);
}
static inline void v0_IGameInputDevice_GetBatteryState(v0_IGameInputDevice* This,GameInputBatteryState *state) {
    This->lpVtbl->GetBatteryState(This,state);
}
static inline HRESULT v0_IGameInputDevice_CreateForceFeedbackEffect(v0_IGameInputDevice* This,uint32_t motor,const GameInputForceFeedbackParams *params,v0_IGameInputForceFeedbackEffect **effect) {
    return This->lpVtbl->CreateForceFeedbackEffect(This,motor,params,effect);
}
static inline bool v0_IGameInputDevice_IsForceFeedbackMotorPoweredOn(v0_IGameInputDevice* This,uint32_t motor) {
    return This->lpVtbl->IsForceFeedbackMotorPoweredOn(This,motor);
}
static inline void v0_IGameInputDevice_SetForceFeedbackMotorGain(v0_IGameInputDevice* This,uint32_t motor,float gain) {
    This->lpVtbl->SetForceFeedbackMotorGain(This,motor,gain);
}
static inline HRESULT v0_IGameInputDevice_SetHapticMotorState(v0_IGameInputDevice* This,uint32_t motor,const GameInputHapticFeedbackParams *params) {
    return This->lpVtbl->SetHapticMotorState(This,motor,params);
}
static inline void v0_IGameInputDevice_SetRumbleState(v0_IGameInputDevice* This,const GameInputRumbleParams *params) {
    This->lpVtbl->SetRumbleState(This,params);
}
static inline void v0_IGameInputDevice_SetInputSynchronizationState(v0_IGameInputDevice* This,bool enabled) {
    This->lpVtbl->SetInputSynchronizationState(This,enabled);
}
static inline void v0_IGameInputDevice_SendInputSynchronizationHint(v0_IGameInputDevice* This) {
    This->lpVtbl->SendInputSynchronizationHint(This);
}
static inline void v0_IGameInputDevice_PowerOff(v0_IGameInputDevice* This) {
    This->lpVtbl->PowerOff(This);
}
static inline HRESULT v0_IGameInputDevice_CreateRawDeviceReport(v0_IGameInputDevice* This,uint32_t id,GameInputRawDeviceReportKind kind,IGameInputRawDeviceReport **report) {
    return This->lpVtbl->CreateRawDeviceReport(This,id,kind,report);
}
static inline HRESULT v0_IGameInputDevice_GetRawDeviceFeature(v0_IGameInputDevice* This,uint32_t id,IGameInputRawDeviceReport **report) {
    return This->lpVtbl->GetRawDeviceFeature(This,id,report);
}
static inline HRESULT v0_IGameInputDevice_SetRawDeviceFeature(v0_IGameInputDevice* This,IGameInputRawDeviceReport *report) {
    return This->lpVtbl->SetRawDeviceFeature(This,report);
}
static inline HRESULT v0_IGameInputDevice_SendRawDeviceOutput(v0_IGameInputDevice* This,IGameInputRawDeviceReport *report) {
    return This->lpVtbl->SendRawDeviceOutput(This,report);
}
static inline HRESULT v0_IGameInputDevice_SendRawDeviceOutputWithResponse(v0_IGameInputDevice* This,IGameInputRawDeviceReport *request,IGameInputRawDeviceReport **reply) {
    return This->lpVtbl->SendRawDeviceOutputWithResponse(This,request,reply);
}
static inline HRESULT v0_IGameInputDevice_ExecuteRawDeviceIoControl(v0_IGameInputDevice* 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 v0_IGameInputDevice_AcquireExclusiveRawDeviceAccess(v0_IGameInputDevice* This,uint64_t timeout_ms) {
    return This->lpVtbl->AcquireExclusiveRawDeviceAccess(This,timeout_ms);
}
static inline void v0_IGameInputDevice_ReleaseExclusiveRawDeviceAccess(v0_IGameInputDevice* This) {
    This->lpVtbl->ReleaseExclusiveRawDeviceAccess(This);
}
#endif
#endif

#endif


#endif  /* __v0_IGameInputDevice_INTERFACE_DEFINED__ */

/*****************************************************************************
 * v1_IGameInputDevice interface
 */
#ifndef __v1_IGameInputDevice_INTERFACE_DEFINED__
#define __v1_IGameInputDevice_INTERFACE_DEFINED__

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

    virtual GameInputDeviceStatus STDMETHODCALLTYPE GetDeviceStatus(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateForceFeedbackEffect(
        uint32_t motor,
        const GameInputForceFeedbackParams *params,
        v0_IGameInputForceFeedbackEffect **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(v1_IGameInputDevice, 0xb169652a, 0x4a32, 0x40d7, 0x9f,0xa9, 0x90,0x59,0x97,0x95,0x25,0x16)
#endif
#else
typedef struct v1_IGameInputDeviceVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** v1_IGameInputDevice methods ***/
    HRESULT (STDMETHODCALLTYPE *GetDeviceInfo)(
        v1_IGameInputDevice *This,
        const v1_GameInputDeviceInfo **info);

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

    HRESULT (STDMETHODCALLTYPE *CreateForceFeedbackEffect)(
        v1_IGameInputDevice *This,
        uint32_t motor,
        const GameInputForceFeedbackParams *params,
        v0_IGameInputForceFeedbackEffect **effect);

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

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

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

    END_INTERFACE
} v1_IGameInputDeviceVtbl;

interface v1_IGameInputDevice {
    CONST_VTBL v1_IGameInputDeviceVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define v1_IGameInputDevice_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define v1_IGameInputDevice_AddRef(This) (This)->lpVtbl->AddRef(This)
#define v1_IGameInputDevice_Release(This) (This)->lpVtbl->Release(This)
/*** v1_IGameInputDevice methods ***/
#define v1_IGameInputDevice_GetDeviceInfo(This,info) (This)->lpVtbl->GetDeviceInfo(This,info)
#define v1_IGameInputDevice_GetDeviceStatus(This) (This)->lpVtbl->GetDeviceStatus(This)
#define v1_IGameInputDevice_CreateForceFeedbackEffect(This,motor,params,effect) (This)->lpVtbl->CreateForceFeedbackEffect(This,motor,params,effect)
#define v1_IGameInputDevice_IsForceFeedbackMotorPoweredOn(This,motor) (This)->lpVtbl->IsForceFeedbackMotorPoweredOn(This,motor)
#define v1_IGameInputDevice_SetForceFeedbackMotorGain(This,motor,gain) (This)->lpVtbl->SetForceFeedbackMotorGain(This,motor,gain)
#define v1_IGameInputDevice_SetRumbleState(This,params) (This)->lpVtbl->SetRumbleState(This,params)
#else
/*** IUnknown methods ***/
static inline HRESULT v1_IGameInputDevice_QueryInterface(v1_IGameInputDevice* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG v1_IGameInputDevice_AddRef(v1_IGameInputDevice* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG v1_IGameInputDevice_Release(v1_IGameInputDevice* This) {
    return This->lpVtbl->Release(This);
}
/*** v1_IGameInputDevice methods ***/
static inline HRESULT v1_IGameInputDevice_GetDeviceInfo(v1_IGameInputDevice* This,const v1_GameInputDeviceInfo **info) {
    return This->lpVtbl->GetDeviceInfo(This,info);
}
static inline GameInputDeviceStatus v1_IGameInputDevice_GetDeviceStatus(v1_IGameInputDevice* This) {
    return This->lpVtbl->GetDeviceStatus(This);
}
static inline HRESULT v1_IGameInputDevice_CreateForceFeedbackEffect(v1_IGameInputDevice* This,uint32_t motor,const GameInputForceFeedbackParams *params,v0_IGameInputForceFeedbackEffect **effect) {
    return This->lpVtbl->CreateForceFeedbackEffect(This,motor,params,effect);
}
static inline bool v1_IGameInputDevice_IsForceFeedbackMotorPoweredOn(v1_IGameInputDevice* This,uint32_t motor) {
    return This->lpVtbl->IsForceFeedbackMotorPoweredOn(This,motor);
}
static inline void v1_IGameInputDevice_SetForceFeedbackMotorGain(v1_IGameInputDevice* This,uint32_t motor,float gain) {
    This->lpVtbl->SetForceFeedbackMotorGain(This,motor,gain);
}
static inline void v1_IGameInputDevice_SetRumbleState(v1_IGameInputDevice* This,const GameInputRumbleParams *params) {
    This->lpVtbl->SetRumbleState(This,params);
}
#endif
#endif

#endif


#endif  /* __v1_IGameInputDevice_INTERFACE_DEFINED__ */

/*****************************************************************************
 * v2_IGameInputDevice interface
 */
#ifndef __v2_IGameInputDevice_INTERFACE_DEFINED__
#define __v2_IGameInputDevice_INTERFACE_DEFINED__

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

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

    virtual GameInputDeviceStatus STDMETHODCALLTYPE GetDeviceStatus(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateForceFeedbackEffect(
        uint32_t motor,
        const GameInputForceFeedbackParams *params,
        v2_IGameInputForceFeedbackEffect **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(v2_IGameInputDevice, 0x39a0c9f2, 0xf055, 0x4089, 0x96,0xe7, 0x25,0xb2,0x75,0x6d,0x30,0x77)
#endif
#else
typedef struct v2_IGameInputDeviceVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** v2_IGameInputDevice methods ***/
    HRESULT (STDMETHODCALLTYPE *GetDeviceInfo)(
        v2_IGameInputDevice *This,
        const v2_GameInputDeviceInfo **info);

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

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

    HRESULT (STDMETHODCALLTYPE *CreateForceFeedbackEffect)(
        v2_IGameInputDevice *This,
        uint32_t motor,
        const GameInputForceFeedbackParams *params,
        v2_IGameInputForceFeedbackEffect **effect);

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

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

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

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

    END_INTERFACE
} v2_IGameInputDeviceVtbl;

interface v2_IGameInputDevice {
    CONST_VTBL v2_IGameInputDeviceVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define v2_IGameInputDevice_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define v2_IGameInputDevice_AddRef(This) (This)->lpVtbl->AddRef(This)
#define v2_IGameInputDevice_Release(This) (This)->lpVtbl->Release(This)
/*** v2_IGameInputDevice methods ***/
#define v2_IGameInputDevice_GetDeviceInfo(This,info) (This)->lpVtbl->GetDeviceInfo(This,info)
#define v2_IGameInputDevice_GetHapticInfo(This,info) (This)->lpVtbl->GetHapticInfo(This,info)
#define v2_IGameInputDevice_GetDeviceStatus(This) (This)->lpVtbl->GetDeviceStatus(This)
#define v2_IGameInputDevice_CreateForceFeedbackEffect(This,motor,params,effect) (This)->lpVtbl->CreateForceFeedbackEffect(This,motor,params,effect)
#define v2_IGameInputDevice_IsForceFeedbackMotorPoweredOn(This,motor) (This)->lpVtbl->IsForceFeedbackMotorPoweredOn(This,motor)
#define v2_IGameInputDevice_SetForceFeedbackMotorGain(This,motor,gain) (This)->lpVtbl->SetForceFeedbackMotorGain(This,motor,gain)
#define v2_IGameInputDevice_SetRumbleState(This,params) (This)->lpVtbl->SetRumbleState(This,params)
#define v2_IGameInputDevice_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 v2_IGameInputDevice_QueryInterface(v2_IGameInputDevice* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG v2_IGameInputDevice_AddRef(v2_IGameInputDevice* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG v2_IGameInputDevice_Release(v2_IGameInputDevice* This) {
    return This->lpVtbl->Release(This);
}
/*** v2_IGameInputDevice methods ***/
static inline HRESULT v2_IGameInputDevice_GetDeviceInfo(v2_IGameInputDevice* This,const v2_GameInputDeviceInfo **info) {
    return This->lpVtbl->GetDeviceInfo(This,info);
}
static inline HRESULT v2_IGameInputDevice_GetHapticInfo(v2_IGameInputDevice* This,GameInputHapticInfo *info) {
    return This->lpVtbl->GetHapticInfo(This,info);
}
static inline GameInputDeviceStatus v2_IGameInputDevice_GetDeviceStatus(v2_IGameInputDevice* This) {
    return This->lpVtbl->GetDeviceStatus(This);
}
static inline HRESULT v2_IGameInputDevice_CreateForceFeedbackEffect(v2_IGameInputDevice* This,uint32_t motor,const GameInputForceFeedbackParams *params,v2_IGameInputForceFeedbackEffect **effect) {
    return This->lpVtbl->CreateForceFeedbackEffect(This,motor,params,effect);
}
static inline bool v2_IGameInputDevice_IsForceFeedbackMotorPoweredOn(v2_IGameInputDevice* This,uint32_t motor) {
    return This->lpVtbl->IsForceFeedbackMotorPoweredOn(This,motor);
}
static inline void v2_IGameInputDevice_SetForceFeedbackMotorGain(v2_IGameInputDevice* This,uint32_t motor,float gain) {
    This->lpVtbl->SetForceFeedbackMotorGain(This,motor,gain);
}
static inline void v2_IGameInputDevice_SetRumbleState(v2_IGameInputDevice* This,const GameInputRumbleParams *params) {
    This->lpVtbl->SetRumbleState(This,params);
}
static inline HRESULT v2_IGameInputDevice_DirectInputEscape(v2_IGameInputDevice* 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  /* __v2_IGameInputDevice_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__ */

/*****************************************************************************
 * v0_IGameInputForceFeedbackEffect interface
 */
#ifndef __v0_IGameInputForceFeedbackEffect_INTERFACE_DEFINED__
#define __v0_IGameInputForceFeedbackEffect_INTERFACE_DEFINED__

DEFINE_GUID(IID_v0_IGameInputForceFeedbackEffect, 0x51bda05e, 0xf742, 0x45d9, 0xb0,0x85, 0x94,0x44,0xae,0x48,0x38,0x1d);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("51bda05e-f742-45d9-b085-9444ae48381d")
v0_IGameInputForceFeedbackEffect : 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(v0_IGameInputForceFeedbackEffect, 0x51bda05e, 0xf742, 0x45d9, 0xb0,0x85, 0x94,0x44,0xae,0x48,0x38,0x1d)
#endif
#else
typedef struct v0_IGameInputForceFeedbackEffectVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

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

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

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

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

    END_INTERFACE
} v0_IGameInputForceFeedbackEffectVtbl;

interface v0_IGameInputForceFeedbackEffect {
    CONST_VTBL v0_IGameInputForceFeedbackEffectVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define v0_IGameInputForceFeedbackEffect_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define v0_IGameInputForceFeedbackEffect_AddRef(This) (This)->lpVtbl->AddRef(This)
#define v0_IGameInputForceFeedbackEffect_Release(This) (This)->lpVtbl->Release(This)
/*** v0_IGameInputForceFeedbackEffect methods ***/
#define v0_IGameInputForceFeedbackEffect_GetDevice(This,device) (This)->lpVtbl->GetDevice(This,device)
#define v0_IGameInputForceFeedbackEffect_GetMotorIndex(This) (This)->lpVtbl->GetMotorIndex(This)
#define v0_IGameInputForceFeedbackEffect_GetGain(This) (This)->lpVtbl->GetGain(This)
#define v0_IGameInputForceFeedbackEffect_SetGain(This,gain) (This)->lpVtbl->SetGain(This,gain)
#define v0_IGameInputForceFeedbackEffect_GetParams(This,params) (This)->lpVtbl->GetParams(This,params)
#define v0_IGameInputForceFeedbackEffect_SetParams(This,params) (This)->lpVtbl->SetParams(This,params)
#define v0_IGameInputForceFeedbackEffect_GetState(This) (This)->lpVtbl->GetState(This)
#define v0_IGameInputForceFeedbackEffect_SetState(This,state) (This)->lpVtbl->SetState(This,state)
#else
/*** IUnknown methods ***/
static inline HRESULT v0_IGameInputForceFeedbackEffect_QueryInterface(v0_IGameInputForceFeedbackEffect* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG v0_IGameInputForceFeedbackEffect_AddRef(v0_IGameInputForceFeedbackEffect* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG v0_IGameInputForceFeedbackEffect_Release(v0_IGameInputForceFeedbackEffect* This) {
    return This->lpVtbl->Release(This);
}
/*** v0_IGameInputForceFeedbackEffect methods ***/
static inline void v0_IGameInputForceFeedbackEffect_GetDevice(v0_IGameInputForceFeedbackEffect* This,IUnknown **device) {
    This->lpVtbl->GetDevice(This,device);
}
static inline uint32_t v0_IGameInputForceFeedbackEffect_GetMotorIndex(v0_IGameInputForceFeedbackEffect* This) {
    return This->lpVtbl->GetMotorIndex(This);
}
static inline float v0_IGameInputForceFeedbackEffect_GetGain(v0_IGameInputForceFeedbackEffect* This) {
    return This->lpVtbl->GetGain(This);
}
static inline void v0_IGameInputForceFeedbackEffect_SetGain(v0_IGameInputForceFeedbackEffect* This,float gain) {
    This->lpVtbl->SetGain(This,gain);
}
static inline void v0_IGameInputForceFeedbackEffect_GetParams(v0_IGameInputForceFeedbackEffect* This,GameInputForceFeedbackParams *params) {
    This->lpVtbl->GetParams(This,params);
}
static inline bool v0_IGameInputForceFeedbackEffect_SetParams(v0_IGameInputForceFeedbackEffect* This,const GameInputForceFeedbackParams *params) {
    return This->lpVtbl->SetParams(This,params);
}
static inline GameInputFeedbackEffectState v0_IGameInputForceFeedbackEffect_GetState(v0_IGameInputForceFeedbackEffect* This) {
    return This->lpVtbl->GetState(This);
}
static inline void v0_IGameInputForceFeedbackEffect_SetState(v0_IGameInputForceFeedbackEffect* This,GameInputFeedbackEffectState state) {
    This->lpVtbl->SetState(This,state);
}
#endif
#endif

#endif


#endif  /* __v0_IGameInputForceFeedbackEffect_INTERFACE_DEFINED__ */

/*****************************************************************************
 * v2_IGameInputForceFeedbackEffect interface
 */
#ifndef __v2_IGameInputForceFeedbackEffect_INTERFACE_DEFINED__
#define __v2_IGameInputForceFeedbackEffect_INTERFACE_DEFINED__

DEFINE_GUID(IID_v2_IGameInputForceFeedbackEffect, 0xff61096a, 0x3373, 0x4093, 0xa1,0xdf, 0x6d,0x31,0x84,0x6b,0x35,0x11);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("ff61096a-3373-4093-a1df-6d31846b3511")
v2_IGameInputForceFeedbackEffect : public IUnknown
{
    virtual void STDMETHODCALLTYPE GetDevice(
        v2_IGameInputDevice *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(v2_IGameInputForceFeedbackEffect, 0xff61096a, 0x3373, 0x4093, 0xa1,0xdf, 0x6d,0x31,0x84,0x6b,0x35,0x11)
#endif
#else
typedef struct v2_IGameInputForceFeedbackEffectVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** v2_IGameInputForceFeedbackEffect methods ***/
    void (STDMETHODCALLTYPE *GetDevice)(
        v2_IGameInputForceFeedbackEffect *This,
        v2_IGameInputDevice *device);

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

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

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

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

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

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

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

    END_INTERFACE
} v2_IGameInputForceFeedbackEffectVtbl;

interface v2_IGameInputForceFeedbackEffect {
    CONST_VTBL v2_IGameInputForceFeedbackEffectVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define v2_IGameInputForceFeedbackEffect_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define v2_IGameInputForceFeedbackEffect_AddRef(This) (This)->lpVtbl->AddRef(This)
#define v2_IGameInputForceFeedbackEffect_Release(This) (This)->lpVtbl->Release(This)
/*** v2_IGameInputForceFeedbackEffect methods ***/
#define v2_IGameInputForceFeedbackEffect_GetDevice(This,device) (This)->lpVtbl->GetDevice(This,device)
#define v2_IGameInputForceFeedbackEffect_GetMotorIndex(This) (This)->lpVtbl->GetMotorIndex(This)
#define v2_IGameInputForceFeedbackEffect_GetGain(This) (This)->lpVtbl->GetGain(This)
#define v2_IGameInputForceFeedbackEffect_SetGain(This,gain) (This)->lpVtbl->SetGain(This,gain)
#define v2_IGameInputForceFeedbackEffect_GetParams(This,params) (This)->lpVtbl->GetParams(This,params)
#define v2_IGameInputForceFeedbackEffect_SetParams(This,params) (This)->lpVtbl->SetParams(This,params)
#define v2_IGameInputForceFeedbackEffect_GetState(This) (This)->lpVtbl->GetState(This)
#define v2_IGameInputForceFeedbackEffect_SetState(This,state) (This)->lpVtbl->SetState(This,state)
#else
/*** IUnknown methods ***/
static inline HRESULT v2_IGameInputForceFeedbackEffect_QueryInterface(v2_IGameInputForceFeedbackEffect* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG v2_IGameInputForceFeedbackEffect_AddRef(v2_IGameInputForceFeedbackEffect* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG v2_IGameInputForceFeedbackEffect_Release(v2_IGameInputForceFeedbackEffect* This) {
    return This->lpVtbl->Release(This);
}
/*** v2_IGameInputForceFeedbackEffect methods ***/
static inline void v2_IGameInputForceFeedbackEffect_GetDevice(v2_IGameInputForceFeedbackEffect* This,v2_IGameInputDevice *device) {
    This->lpVtbl->GetDevice(This,device);
}
static inline uint32_t v2_IGameInputForceFeedbackEffect_GetMotorIndex(v2_IGameInputForceFeedbackEffect* This) {
    return This->lpVtbl->GetMotorIndex(This);
}
static inline float v2_IGameInputForceFeedbackEffect_GetGain(v2_IGameInputForceFeedbackEffect* This) {
    return This->lpVtbl->GetGain(This);
}
static inline void v2_IGameInputForceFeedbackEffect_SetGain(v2_IGameInputForceFeedbackEffect* This,float gain) {
    This->lpVtbl->SetGain(This,gain);
}
static inline void v2_IGameInputForceFeedbackEffect_GetParams(v2_IGameInputForceFeedbackEffect* This,GameInputForceFeedbackParams *params) {
    This->lpVtbl->GetParams(This,params);
}
static inline bool v2_IGameInputForceFeedbackEffect_SetParams(v2_IGameInputForceFeedbackEffect* This,const GameInputForceFeedbackParams *params) {
    return This->lpVtbl->SetParams(This,params);
}
static inline GameInputFeedbackEffectState v2_IGameInputForceFeedbackEffect_GetState(v2_IGameInputForceFeedbackEffect* This) {
    return This->lpVtbl->GetState(This);
}
static inline void v2_IGameInputForceFeedbackEffect_SetState(v2_IGameInputForceFeedbackEffect* This,GameInputFeedbackEffectState state) {
    This->lpVtbl->SetState(This,state);
}
#endif
#endif

#endif


#endif  /* __v2_IGameInputForceFeedbackEffect_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IGameInputRawDeviceReport interface
 */
#ifndef __IGameInputRawDeviceReport_INTERFACE_DEFINED__
#define __IGameInputRawDeviceReport_INTERFACE_DEFINED__

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

    virtual const GameInputRawDeviceReportInfo * 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, 0x61f08cf1, 0x1ffc, 0x40ca, 0xa2,0xb8, 0xe1,0xab,0x8b,0xc5,0xb6,0xdc)
#endif
#else
typedef struct IGameInputRawDeviceReportVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IGameInputRawDeviceReport methods ***/
    void (STDMETHODCALLTYPE *GetDevice)(
        IGameInputRawDeviceReport *This,
        v0_IGameInputDevice **device);

    const GameInputRawDeviceReportInfo * (STDMETHODCALLTYPE *GetReportInfo)(
        IGameInputRawDeviceReport *This);

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

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

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

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

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

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

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

    END_INTERFACE
} IGameInputRawDeviceReportVtbl;

interface IGameInputRawDeviceReport {
    CONST_VTBL IGameInputRawDeviceReportVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IGameInputRawDeviceReport_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IGameInputRawDeviceReport_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IGameInputRawDeviceReport_Release(This) (This)->lpVtbl->Release(This)
/*** IGameInputRawDeviceReport methods ***/
#define IGameInputRawDeviceReport_GetDevice(This,device) (This)->lpVtbl->GetDevice(This,device)
#define IGameInputRawDeviceReport_GetReportInfo(This) (This)->lpVtbl->GetReportInfo(This)
#define IGameInputRawDeviceReport_GetRawDataSize(This) (This)->lpVtbl->GetRawDataSize(This)
#define IGameInputRawDeviceReport_GetRawData(This,size,buffer) (This)->lpVtbl->GetRawData(This,size,buffer)
#define IGameInputRawDeviceReport_SetRawData(This,size,buffer) (This)->lpVtbl->SetRawData(This,size,buffer)
#define IGameInputRawDeviceReport_GetItemValue(This,index,value) (This)->lpVtbl->GetItemValue(This,index,value)
#define IGameInputRawDeviceReport_SetItemValue(This,index,value) (This)->lpVtbl->SetItemValue(This,index,value)
#define IGameInputRawDeviceReport_ResetItemValue(This,index) (This)->lpVtbl->ResetItemValue(This,index)
#define IGameInputRawDeviceReport_ResetAllItems(This) (This)->lpVtbl->ResetAllItems(This)
#else
/*** IUnknown methods ***/
static inline HRESULT IGameInputRawDeviceReport_QueryInterface(IGameInputRawDeviceReport* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IGameInputRawDeviceReport_AddRef(IGameInputRawDeviceReport* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IGameInputRawDeviceReport_Release(IGameInputRawDeviceReport* This) {
    return This->lpVtbl->Release(This);
}
/*** IGameInputRawDeviceReport methods ***/
static inline void IGameInputRawDeviceReport_GetDevice(IGameInputRawDeviceReport* This,v0_IGameInputDevice **device) {
    This->lpVtbl->GetDevice(This,device);
}
static inline const GameInputRawDeviceReportInfo * IGameInputRawDeviceReport_GetReportInfo(IGameInputRawDeviceReport* This) {
    return This->lpVtbl->GetReportInfo(This);
}
static inline size_t IGameInputRawDeviceReport_GetRawDataSize(IGameInputRawDeviceReport* This) {
    return This->lpVtbl->GetRawDataSize(This);
}
static inline size_t IGameInputRawDeviceReport_GetRawData(IGameInputRawDeviceReport* This,size_t size,void *buffer) {
    return This->lpVtbl->GetRawData(This,size,buffer);
}
static inline bool IGameInputRawDeviceReport_SetRawData(IGameInputRawDeviceReport* This,size_t size,const void *buffer) {
    return This->lpVtbl->SetRawData(This,size,buffer);
}
static inline bool IGameInputRawDeviceReport_GetItemValue(IGameInputRawDeviceReport* This,uint32_t index,int64_t *value) {
    return This->lpVtbl->GetItemValue(This,index,value);
}
static inline bool IGameInputRawDeviceReport_SetItemValue(IGameInputRawDeviceReport* This,uint32_t index,int64_t value) {
    return This->lpVtbl->SetItemValue(This,index,value);
}
static inline bool IGameInputRawDeviceReport_ResetItemValue(IGameInputRawDeviceReport* This,uint32_t index) {
    return This->lpVtbl->ResetItemValue(This,index);
}
static inline bool IGameInputRawDeviceReport_ResetAllItems(IGameInputRawDeviceReport* This) {
    return This->lpVtbl->ResetAllItems(This);
}
#endif
#endif

#endif


#endif  /* __IGameInputRawDeviceReport_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)

#ifdef __WINESRC__
STDAPI GameInputCreate( v0_IGameInput **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__ */
