- /*************************************************************************** 
- *                                                                          * 
- *   XInput.h -- This module defines XBOX controller APIs                   * 
- *               and constansts for the Windows platform.                   * 
- *                                                                          * 
- *   Copyright (c) Microsoft Corp. All rights reserved.                     * 
- *                                                                          * 
- ***************************************************************************/ 
- #ifndef _XINPUT_H_ 
- #define _XINPUT_H_ 
-   
- #include <windef.h> 
-   
- // Current name of the DLL shipped in the same SDK as this header. 
- // The name reflects the current version 
- #define XINPUT_DLL_A  "xinput1_3.dll" 
- #define XINPUT_DLL_W L"xinput1_3.dll" 
- #ifdef UNICODE 
-     #define XINPUT_DLL XINPUT_DLL_W 
- #else 
-     #define XINPUT_DLL XINPUT_DLL_A 
- #endif  
-   
- // 
- // Device types available in XINPUT_CAPABILITIES 
- // 
- #define XINPUT_DEVTYPE_GAMEPAD          0x01 
-   
- // 
- // Device subtypes available in XINPUT_CAPABILITIES 
- // 
- #define XINPUT_DEVSUBTYPE_GAMEPAD       0x01 
- #define XINPUT_DEVSUBTYPE_WHEEL         0x02 
- #define XINPUT_DEVSUBTYPE_ARCADE_STICK  0x03 
- #define XINPUT_DEVSUBTYPE_FLIGHT_SICK   0x04 
- #define XINPUT_DEVSUBTYPE_DANCE_PAD     0x05 
- #define XINPUT_DEVSUBTYPE_GUITAR        0x06 
- #define XINPUT_DEVSUBTYPE_DRUM_KIT      0x08 
-   
- // 
- // Flags for XINPUT_CAPABILITIES 
- // 
- #define XINPUT_CAPS_VOICE_SUPPORTED     0x0004 
-   
- // 
- // Constants for gamepad buttons 
- // 
- #define XINPUT_GAMEPAD_DPAD_UP          0x0001 
- #define XINPUT_GAMEPAD_DPAD_DOWN        0x0002 
- #define XINPUT_GAMEPAD_DPAD_LEFT        0x0004 
- #define XINPUT_GAMEPAD_DPAD_RIGHT       0x0008 
- #define XINPUT_GAMEPAD_START            0x0010 
- #define XINPUT_GAMEPAD_BACK             0x0020 
- #define XINPUT_GAMEPAD_LEFT_THUMB       0x0040 
- #define XINPUT_GAMEPAD_RIGHT_THUMB      0x0080 
- #define XINPUT_GAMEPAD_LEFT_SHOULDER    0x0100 
- #define XINPUT_GAMEPAD_RIGHT_SHOULDER   0x0200 
- #define XINPUT_GAMEPAD_A                0x1000 
- #define XINPUT_GAMEPAD_B                0x2000 
- #define XINPUT_GAMEPAD_X                0x4000 
- #define XINPUT_GAMEPAD_Y                0x8000 
-   
-   
- // 
- // Gamepad thresholds 
- // 
- #define XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE  7849 
- #define XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE 8689 
- #define XINPUT_GAMEPAD_TRIGGER_THRESHOLD    30 
-   
- // 
- // Flags to pass to XInputGetCapabilities 
- // 
- #define XINPUT_FLAG_GAMEPAD             0x00000001 
-   
- // 
- // Devices that support batteries 
- // 
- #define BATTERY_DEVTYPE_GAMEPAD         0x00 
- #define BATTERY_DEVTYPE_HEADSET         0x01 
-   
- // 
- // Flags for battery status level 
- // 
- #define BATTERY_TYPE_DISCONNECTED       0x00    // This device is not connected 
- #define BATTERY_TYPE_WIRED              0x01    // Wired device, no battery 
- #define BATTERY_TYPE_ALKALINE           0x02    // Alkaline battery source 
- #define BATTERY_TYPE_NIMH               0x03    // Nickel Metal Hydride battery source 
- #define BATTERY_TYPE_UNKNOWN            0xFF    // Cannot determine the battery type 
-   
- // These are only valid for wireless, connected devices, with known battery types 
- // The amount of use time remaining depends on the type of device. 
- #define BATTERY_LEVEL_EMPTY             0x00 
- #define BATTERY_LEVEL_LOW               0x01 
- #define BATTERY_LEVEL_MEDIUM            0x02 
- #define BATTERY_LEVEL_FULL              0x03 
-   
- // User index definitions 
- #define XUSER_MAX_COUNT                 4 
-   
- #define XUSER_INDEX_ANY                 0x000000FF 
-   
-   
- // 
- // Codes returned for the gamepad keystroke 
- // 
-   
- #define VK_PAD_A                        0x5800 
- #define VK_PAD_B                        0x5801 
- #define VK_PAD_X                        0x5802 
- #define VK_PAD_Y                        0x5803 
- #define VK_PAD_RSHOULDER                0x5804 
- #define VK_PAD_LSHOULDER                0x5805 
- #define VK_PAD_LTRIGGER                 0x5806 
- #define VK_PAD_RTRIGGER                 0x5807 
-   
- #define VK_PAD_DPAD_UP                  0x5810 
- #define VK_PAD_DPAD_DOWN                0x5811 
- #define VK_PAD_DPAD_LEFT                0x5812 
- #define VK_PAD_DPAD_RIGHT               0x5813 
- #define VK_PAD_START                    0x5814 
- #define VK_PAD_BACK                     0x5815 
- #define VK_PAD_LTHUMB_PRESS             0x5816 
- #define VK_PAD_RTHUMB_PRESS             0x5817 
-   
- #define VK_PAD_LTHUMB_UP                0x5820 
- #define VK_PAD_LTHUMB_DOWN              0x5821 
- #define VK_PAD_LTHUMB_RIGHT             0x5822 
- #define VK_PAD_LTHUMB_LEFT              0x5823 
- #define VK_PAD_LTHUMB_UPLEFT            0x5824 
- #define VK_PAD_LTHUMB_UPRIGHT           0x5825 
- #define VK_PAD_LTHUMB_DOWNRIGHT         0x5826 
- #define VK_PAD_LTHUMB_DOWNLEFT          0x5827 
-   
- #define VK_PAD_RTHUMB_UP                0x5830 
- #define VK_PAD_RTHUMB_DOWN              0x5831 
- #define VK_PAD_RTHUMB_RIGHT             0x5832 
- #define VK_PAD_RTHUMB_LEFT              0x5833 
- #define VK_PAD_RTHUMB_UPLEFT            0x5834 
- #define VK_PAD_RTHUMB_UPRIGHT           0x5835 
- #define VK_PAD_RTHUMB_DOWNRIGHT         0x5836 
- #define VK_PAD_RTHUMB_DOWNLEFT          0x5837 
-   
- // 
- // Flags used in XINPUT_KEYSTROKE 
- // 
- #define XINPUT_KEYSTROKE_KEYDOWN        0x0001 
- #define XINPUT_KEYSTROKE_KEYUP          0x0002 
- #define XINPUT_KEYSTROKE_REPEAT         0x0004 
-   
- // 
- // Structures used by XInput APIs 
- // 
- typedef struct _XINPUT_GAMEPAD 
- { 
-     WORD                                wButtons; 
-     BYTE                                bLeftTrigger; 
-     BYTE                                bRightTrigger; 
-     SHORT                               sThumbLX; 
-     SHORT                               sThumbLY; 
-     SHORT                               sThumbRX; 
-     SHORT                               sThumbRY; 
- } XINPUT_GAMEPAD, *PXINPUT_GAMEPAD; 
-   
- typedef struct _XINPUT_STATE 
- { 
-     DWORD                               dwPacketNumber; 
-     XINPUT_GAMEPAD                      Gamepad; 
- } XINPUT_STATE, *PXINPUT_STATE; 
-   
- typedef struct _XINPUT_VIBRATION 
- { 
-     WORD                                wLeftMotorSpeed; 
-     WORD                                wRightMotorSpeed; 
- } XINPUT_VIBRATION, *PXINPUT_VIBRATION; 
-   
- typedef struct _XINPUT_CAPABILITIES 
- { 
-     BYTE                                Type; 
-     BYTE                                SubType; 
-     WORD                                Flags; 
-     XINPUT_GAMEPAD                      Gamepad; 
-     XINPUT_VIBRATION                    Vibration; 
- } XINPUT_CAPABILITIES, *PXINPUT_CAPABILITIES; 
-   
- typedef struct _XINPUT_BATTERY_INFORMATION 
- { 
-     BYTE BatteryType; 
-     BYTE BatteryLevel; 
- } XINPUT_BATTERY_INFORMATION, *PXINPUT_BATTERY_INFORMATION; 
-   
- typedef struct _XINPUT_KEYSTROKE 
- { 
-     WORD    VirtualKey; 
-     WCHAR   Unicode; 
-     WORD    Flags; 
-     BYTE    UserIndex; 
-     BYTE    HidCode; 
- } XINPUT_KEYSTROKE, *PXINPUT_KEYSTROKE; 
-   
- // 
- // XInput APIs 
- // 
- #ifdef __cplusplus 
- extern "C" { 
- #endif 
-   
- DWORD WINAPI XInputGetState 
- ( 
-     DWORD         dwUserIndex,  // [in] Index of the gamer associated with the device 
-     XINPUT_STATE* pState        // [out] Receives the current state 
- ); 
-   
- DWORD WINAPI XInputSetState 
- ( 
-     DWORD             dwUserIndex,  // [in] Index of the gamer associated with the device 
-     XINPUT_VIBRATION* pVibration    // [in, out] The vibration information to send to the controller 
- ); 
-   
- DWORD WINAPI XInputGetCapabilities 
- ( 
-     DWORD                dwUserIndex,   // [in] Index of the gamer associated with the device 
-     DWORD                dwFlags,       // [in] Input flags that identify the device type 
-     XINPUT_CAPABILITIES* pCapabilities  // [out] Receives the capabilities 
- ); 
-   
- void WINAPI XInputEnable 
- ( 
-     BOOL enable     // [in] Indicates whether xinput is enabled or disabled.  
- ); 
-   
- DWORD WINAPI XInputGetDSoundAudioDeviceGuids 
- ( 
-     DWORD dwUserIndex,          // [in] Index of the gamer associated with the device 
-     GUID* pDSoundRenderGuid,    // [out] DSound device ID for render 
-     GUID* pDSoundCaptureGuid    // [out] DSound device ID for capture 
- ); 
-   
- DWORD WINAPI XInputGetBatteryInformation 
- ( 
-     DWORD                       dwUserIndex,        // [in]  Index of the gamer associated with the device 
-     BYTE                        devType,            // [in]  Which device on this user index 
-     XINPUT_BATTERY_INFORMATION* pBatteryInformation // [out] Contains the level and types of batteries 
- ); 
-   
- DWORD WINAPI XInputGetKeystroke 
- ( 
-     DWORD dwUserIndex,              // [in]  Index of the gamer associated with the device 
-     DWORD dwReserved,               // [in]  Reserved for future use 
-     PXINPUT_KEYSTROKE pKeystroke    // [out] Pointer to an XINPUT_KEYSTROKE structure that receives an input event. 
- ); 
-   
- #ifdef __cplusplus 
- } 
- #endif 
-   
- #endif  //_XINPUT_H_ 
-   
-