Subversion Repositories Games.Chess Giants

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. /***************************************************************************
  2. *                                                                          *
  3. *   XInput.h -- This module defines XBOX controller APIs                   *
  4. *               and constansts for the Windows platform.                   *
  5. *                                                                          *
  6. *   Copyright (c) Microsoft Corp. All rights reserved.                     *
  7. *                                                                          *
  8. ***************************************************************************/
  9. #ifndef _XINPUT_H_
  10. #define _XINPUT_H_
  11.  
  12. #include <windef.h>
  13.  
  14. // Current name of the DLL shipped in the same SDK as this header.
  15. // The name reflects the current version
  16. #define XINPUT_DLL_A  "xinput1_3.dll"
  17. #define XINPUT_DLL_W L"xinput1_3.dll"
  18. #ifdef UNICODE
  19.     #define XINPUT_DLL XINPUT_DLL_W
  20. #else
  21.     #define XINPUT_DLL XINPUT_DLL_A
  22. #endif
  23.  
  24. //
  25. // Device types available in XINPUT_CAPABILITIES
  26. //
  27. #define XINPUT_DEVTYPE_GAMEPAD          0x01
  28.  
  29. //
  30. // Device subtypes available in XINPUT_CAPABILITIES
  31. //
  32. #define XINPUT_DEVSUBTYPE_GAMEPAD       0x01
  33. #define XINPUT_DEVSUBTYPE_WHEEL         0x02
  34. #define XINPUT_DEVSUBTYPE_ARCADE_STICK  0x03
  35. #define XINPUT_DEVSUBTYPE_FLIGHT_SICK   0x04
  36. #define XINPUT_DEVSUBTYPE_DANCE_PAD     0x05
  37. #define XINPUT_DEVSUBTYPE_GUITAR        0x06
  38. #define XINPUT_DEVSUBTYPE_DRUM_KIT      0x08
  39.  
  40. //
  41. // Flags for XINPUT_CAPABILITIES
  42. //
  43. #define XINPUT_CAPS_VOICE_SUPPORTED     0x0004
  44.  
  45. //
  46. // Constants for gamepad buttons
  47. //
  48. #define XINPUT_GAMEPAD_DPAD_UP          0x0001
  49. #define XINPUT_GAMEPAD_DPAD_DOWN        0x0002
  50. #define XINPUT_GAMEPAD_DPAD_LEFT        0x0004
  51. #define XINPUT_GAMEPAD_DPAD_RIGHT       0x0008
  52. #define XINPUT_GAMEPAD_START            0x0010
  53. #define XINPUT_GAMEPAD_BACK             0x0020
  54. #define XINPUT_GAMEPAD_LEFT_THUMB       0x0040
  55. #define XINPUT_GAMEPAD_RIGHT_THUMB      0x0080
  56. #define XINPUT_GAMEPAD_LEFT_SHOULDER    0x0100
  57. #define XINPUT_GAMEPAD_RIGHT_SHOULDER   0x0200
  58. #define XINPUT_GAMEPAD_A                0x1000
  59. #define XINPUT_GAMEPAD_B                0x2000
  60. #define XINPUT_GAMEPAD_X                0x4000
  61. #define XINPUT_GAMEPAD_Y                0x8000
  62.  
  63.  
  64. //
  65. // Gamepad thresholds
  66. //
  67. #define XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE  7849
  68. #define XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE 8689
  69. #define XINPUT_GAMEPAD_TRIGGER_THRESHOLD    30
  70.  
  71. //
  72. // Flags to pass to XInputGetCapabilities
  73. //
  74. #define XINPUT_FLAG_GAMEPAD             0x00000001
  75.  
  76. //
  77. // Devices that support batteries
  78. //
  79. #define BATTERY_DEVTYPE_GAMEPAD         0x00
  80. #define BATTERY_DEVTYPE_HEADSET         0x01
  81.  
  82. //
  83. // Flags for battery status level
  84. //
  85. #define BATTERY_TYPE_DISCONNECTED       0x00    // This device is not connected
  86. #define BATTERY_TYPE_WIRED              0x01    // Wired device, no battery
  87. #define BATTERY_TYPE_ALKALINE           0x02    // Alkaline battery source
  88. #define BATTERY_TYPE_NIMH               0x03    // Nickel Metal Hydride battery source
  89. #define BATTERY_TYPE_UNKNOWN            0xFF    // Cannot determine the battery type
  90.  
  91. // These are only valid for wireless, connected devices, with known battery types
  92. // The amount of use time remaining depends on the type of device.
  93. #define BATTERY_LEVEL_EMPTY             0x00
  94. #define BATTERY_LEVEL_LOW               0x01
  95. #define BATTERY_LEVEL_MEDIUM            0x02
  96. #define BATTERY_LEVEL_FULL              0x03
  97.  
  98. // User index definitions
  99. #define XUSER_MAX_COUNT                 4
  100.  
  101. #define XUSER_INDEX_ANY                 0x000000FF
  102.  
  103.  
  104. //
  105. // Codes returned for the gamepad keystroke
  106. //
  107.  
  108. #define VK_PAD_A                        0x5800
  109. #define VK_PAD_B                        0x5801
  110. #define VK_PAD_X                        0x5802
  111. #define VK_PAD_Y                        0x5803
  112. #define VK_PAD_RSHOULDER                0x5804
  113. #define VK_PAD_LSHOULDER                0x5805
  114. #define VK_PAD_LTRIGGER                 0x5806
  115. #define VK_PAD_RTRIGGER                 0x5807
  116.  
  117. #define VK_PAD_DPAD_UP                  0x5810
  118. #define VK_PAD_DPAD_DOWN                0x5811
  119. #define VK_PAD_DPAD_LEFT                0x5812
  120. #define VK_PAD_DPAD_RIGHT               0x5813
  121. #define VK_PAD_START                    0x5814
  122. #define VK_PAD_BACK                     0x5815
  123. #define VK_PAD_LTHUMB_PRESS             0x5816
  124. #define VK_PAD_RTHUMB_PRESS             0x5817
  125.  
  126. #define VK_PAD_LTHUMB_UP                0x5820
  127. #define VK_PAD_LTHUMB_DOWN              0x5821
  128. #define VK_PAD_LTHUMB_RIGHT             0x5822
  129. #define VK_PAD_LTHUMB_LEFT              0x5823
  130. #define VK_PAD_LTHUMB_UPLEFT            0x5824
  131. #define VK_PAD_LTHUMB_UPRIGHT           0x5825
  132. #define VK_PAD_LTHUMB_DOWNRIGHT         0x5826
  133. #define VK_PAD_LTHUMB_DOWNLEFT          0x5827
  134.  
  135. #define VK_PAD_RTHUMB_UP                0x5830
  136. #define VK_PAD_RTHUMB_DOWN              0x5831
  137. #define VK_PAD_RTHUMB_RIGHT             0x5832
  138. #define VK_PAD_RTHUMB_LEFT              0x5833
  139. #define VK_PAD_RTHUMB_UPLEFT            0x5834
  140. #define VK_PAD_RTHUMB_UPRIGHT           0x5835
  141. #define VK_PAD_RTHUMB_DOWNRIGHT         0x5836
  142. #define VK_PAD_RTHUMB_DOWNLEFT          0x5837
  143.  
  144. //
  145. // Flags used in XINPUT_KEYSTROKE
  146. //
  147. #define XINPUT_KEYSTROKE_KEYDOWN        0x0001
  148. #define XINPUT_KEYSTROKE_KEYUP          0x0002
  149. #define XINPUT_KEYSTROKE_REPEAT         0x0004
  150.  
  151. //
  152. // Structures used by XInput APIs
  153. //
  154. typedef struct _XINPUT_GAMEPAD
  155. {
  156.     WORD                                wButtons;
  157.     BYTE                                bLeftTrigger;
  158.     BYTE                                bRightTrigger;
  159.     SHORT                               sThumbLX;
  160.     SHORT                               sThumbLY;
  161.     SHORT                               sThumbRX;
  162.     SHORT                               sThumbRY;
  163. } XINPUT_GAMEPAD, *PXINPUT_GAMEPAD;
  164.  
  165. typedef struct _XINPUT_STATE
  166. {
  167.     DWORD                               dwPacketNumber;
  168.     XINPUT_GAMEPAD                      Gamepad;
  169. } XINPUT_STATE, *PXINPUT_STATE;
  170.  
  171. typedef struct _XINPUT_VIBRATION
  172. {
  173.     WORD                                wLeftMotorSpeed;
  174.     WORD                                wRightMotorSpeed;
  175. } XINPUT_VIBRATION, *PXINPUT_VIBRATION;
  176.  
  177. typedef struct _XINPUT_CAPABILITIES
  178. {
  179.     BYTE                                Type;
  180.     BYTE                                SubType;
  181.     WORD                                Flags;
  182.     XINPUT_GAMEPAD                      Gamepad;
  183.     XINPUT_VIBRATION                    Vibration;
  184. } XINPUT_CAPABILITIES, *PXINPUT_CAPABILITIES;
  185.  
  186. typedef struct _XINPUT_BATTERY_INFORMATION
  187. {
  188.     BYTE BatteryType;
  189.     BYTE BatteryLevel;
  190. } XINPUT_BATTERY_INFORMATION, *PXINPUT_BATTERY_INFORMATION;
  191.  
  192. typedef struct _XINPUT_KEYSTROKE
  193. {
  194.     WORD    VirtualKey;
  195.     WCHAR   Unicode;
  196.     WORD    Flags;
  197.     BYTE    UserIndex;
  198.     BYTE    HidCode;
  199. } XINPUT_KEYSTROKE, *PXINPUT_KEYSTROKE;
  200.  
  201. //
  202. // XInput APIs
  203. //
  204. #ifdef __cplusplus
  205. extern "C" {
  206. #endif
  207.  
  208. DWORD WINAPI XInputGetState
  209. (
  210.     DWORD         dwUserIndex,  // [in] Index of the gamer associated with the device
  211.     XINPUT_STATE* pState        // [out] Receives the current state
  212. );
  213.  
  214. DWORD WINAPI XInputSetState
  215. (
  216.     DWORD             dwUserIndex,  // [in] Index of the gamer associated with the device
  217.     XINPUT_VIBRATION* pVibration    // [in, out] The vibration information to send to the controller
  218. );
  219.  
  220. DWORD WINAPI XInputGetCapabilities
  221. (
  222.     DWORD                dwUserIndex,   // [in] Index of the gamer associated with the device
  223.     DWORD                dwFlags,       // [in] Input flags that identify the device type
  224.     XINPUT_CAPABILITIES* pCapabilities  // [out] Receives the capabilities
  225. );
  226.  
  227. void WINAPI XInputEnable
  228. (
  229.     BOOL enable     // [in] Indicates whether xinput is enabled or disabled.
  230. );
  231.  
  232. DWORD WINAPI XInputGetDSoundAudioDeviceGuids
  233. (
  234.     DWORD dwUserIndex,          // [in] Index of the gamer associated with the device
  235.     GUID* pDSoundRenderGuid,    // [out] DSound device ID for render
  236.     GUID* pDSoundCaptureGuid    // [out] DSound device ID for capture
  237. );
  238.  
  239. DWORD WINAPI XInputGetBatteryInformation
  240. (
  241.     DWORD                       dwUserIndex,        // [in]  Index of the gamer associated with the device
  242.     BYTE                        devType,            // [in]  Which device on this user index
  243.     XINPUT_BATTERY_INFORMATION* pBatteryInformation // [out] Contains the level and types of batteries
  244. );
  245.  
  246. DWORD WINAPI XInputGetKeystroke
  247. (
  248.     DWORD dwUserIndex,              // [in]  Index of the gamer associated with the device
  249.     DWORD dwReserved,               // [in]  Reserved for future use
  250.     PXINPUT_KEYSTROKE pKeystroke    // [out] Pointer to an XINPUT_KEYSTROKE structure that receives an input event.
  251. );
  252.  
  253. #ifdef __cplusplus
  254. }
  255. #endif
  256.  
  257. #endif  //_XINPUT_H_
  258.  
  259.