1 /// Translated from C to D
2 module glfw3.xinput;
3 
4 extern(Windows): @nogc: nothrow: __gshared:
5 
6 import core.sys.windows.windef;
7 
8 enum XINPUT_GAMEPAD_DPAD_UP =          0x0001;
9 enum XINPUT_GAMEPAD_DPAD_DOWN =        0x0002;
10 enum XINPUT_GAMEPAD_DPAD_LEFT =        0x0004;
11 enum XINPUT_GAMEPAD_DPAD_RIGHT =       0x0008;
12 enum XINPUT_GAMEPAD_START =            0x0010;
13 enum XINPUT_GAMEPAD_BACK =             0x0020;
14 enum XINPUT_GAMEPAD_LEFT_THUMB =       0x0040;
15 enum XINPUT_GAMEPAD_RIGHT_THUMB =      0x0080;
16 enum XINPUT_GAMEPAD_LEFT_SHOULDER =    0x0100;
17 enum XINPUT_GAMEPAD_RIGHT_SHOULDER =   0x0200;
18 enum XINPUT_GAMEPAD_A =                0x1000;
19 enum XINPUT_GAMEPAD_B =                0x2000;
20 enum XINPUT_GAMEPAD_X =                0x4000;
21 enum XINPUT_GAMEPAD_Y =                0x8000;
22 
23 enum XINPUT_KEYSTROKE_KEYDOWN =        0x0001;
24 enum XINPUT_KEYSTROKE_KEYUP =          0x0002;
25 enum XINPUT_KEYSTROKE_REPEAT =         0x0004;
26 
27 enum VK_PAD_A =                        0x5800;
28 enum VK_PAD_B =                        0x5801;
29 enum VK_PAD_X =                        0x5802;
30 enum VK_PAD_Y =                        0x5803;
31 enum VK_PAD_RSHOULDER =                0x5804;
32 enum VK_PAD_LSHOULDER =                0x5805;
33 enum VK_PAD_LTRIGGER =                 0x5806;
34 enum VK_PAD_RTRIGGER =                 0x5807;
35 enum VK_PAD_DPAD_UP =                  0x5810;
36 enum VK_PAD_DPAD_DOWN =                0x5811;
37 enum VK_PAD_DPAD_LEFT =                0x5812;
38 enum VK_PAD_DPAD_RIGHT =               0x5813;
39 enum VK_PAD_START =                    0x5814;
40 enum VK_PAD_BACK =                     0x5815;
41 enum VK_PAD_LTHUMB_PRESS =             0x5816;
42 enum VK_PAD_RTHUMB_PRESS =             0x5817;
43 enum VK_PAD_LTHUMB_UP =                0x5820;
44 enum VK_PAD_LTHUMB_DOWN =              0x5821;
45 enum VK_PAD_LTHUMB_RIGHT =             0x5822;
46 enum VK_PAD_LTHUMB_LEFT =              0x5823;
47 enum VK_PAD_LTHUMB_UPLEFT =            0x5824;
48 enum VK_PAD_LTHUMB_UPRIGHT =           0x5825;
49 enum VK_PAD_LTHUMB_DOWNRIGHT =         0x5826;
50 enum VK_PAD_LTHUMB_DOWNLEFT =          0x5827;
51 enum VK_PAD_RTHUMB_UP =                0x5830;
52 enum VK_PAD_RTHUMB_DOWN =              0x5831;
53 enum VK_PAD_RTHUMB_RIGHT =             0x5832;
54 enum VK_PAD_RTHUMB_LEFT =              0x5833;
55 enum VK_PAD_RTHUMB_UPLEFT =            0x5834;
56 enum VK_PAD_RTHUMB_UPRIGHT =           0x5835;
57 enum VK_PAD_RTHUMB_DOWNRIGHT =         0x5836;
58 enum VK_PAD_RTHUMB_DOWNLEFT =          0x5837;
59 
60 enum XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE =  7849;
61 enum XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE = 8689;
62 enum XINPUT_GAMEPAD_TRIGGER_THRESHOLD =    30;
63 
64 enum XINPUT_DEVTYPE_GAMEPAD =          0x01;
65 enum XINPUT_DEVSUBTYPE_GAMEPAD =       0x01;
66 enum XINPUT_DEVSUBTYPE_WHEEL =         0x02;
67 enum XINPUT_DEVSUBTYPE_ARCADE_STICK =  0x03;
68 enum XINPUT_DEVSUBTYPE_FLIGHT_SICK =   0x04;
69 enum XINPUT_DEVSUBTYPE_DANCE_PAD =     0x05;
70 enum XINPUT_DEVSUBTYPE_GUITAR =        0x06;
71 enum XINPUT_DEVSUBTYPE_DRUM_KIT =      0x08;
72 
73 enum XINPUT_CAPS_VOICE_SUPPORTED =     0x0004;
74 enum XINPUT_FLAG_GAMEPAD =             0x00000001;
75 
76 enum BATTERY_DEVTYPE_GAMEPAD =         0x00;
77 enum BATTERY_DEVTYPE_HEADSET =         0x01;
78 enum BATTERY_TYPE_DISCONNECTED =       0x00;
79 enum BATTERY_TYPE_WIRED =              0x01;
80 enum BATTERY_TYPE_ALKALINE =           0x02;
81 enum BATTERY_TYPE_NIMH =               0x03;
82 enum BATTERY_TYPE_UNKNOWN =            0xFF;
83 enum BATTERY_LEVEL_EMPTY =             0x00;
84 enum BATTERY_LEVEL_LOW =               0x01;
85 enum BATTERY_LEVEL_MEDIUM =            0x02;
86 enum BATTERY_LEVEL_FULL =              0x03;
87 
88 enum XUSER_MAX_COUNT =                 4;
89 enum XUSER_INDEX_ANY =                 0x000000FF;
90 
91 struct _XINPUT_GAMEPAD {
92     WORD wButtons;
93     BYTE bLeftTrigger;
94     BYTE bRightTrigger;
95     SHORT sThumbLX;
96     SHORT sThumbLY;
97     SHORT sThumbRX;
98     SHORT sThumbRY;
99 }
100 alias _XINPUT_GAMEPAD XINPUT_GAMEPAD;
101 alias _XINPUT_GAMEPAD* PXINPUT_GAMEPAD;
102 
103 struct _XINPUT_STATE {
104     DWORD dwPacketNumber;
105     XINPUT_GAMEPAD Gamepad;
106 }
107 alias _XINPUT_STATE XINPUT_STATE;
108 alias _XINPUT_STATE* PXINPUT_STATE;
109 
110 struct _XINPUT_VIBRATION {
111     WORD wLeftMotorSpeed = 0;
112     WORD wRightMotorSpeed = 0;
113 }
114 alias _XINPUT_VIBRATION XINPUT_VIBRATION;
115 alias _XINPUT_VIBRATION* PXINPUT_VIBRATION;
116 
117 struct _XINPUT_CAPABILITIES {
118     BYTE Type;
119     BYTE SubType;
120     WORD Flags;
121     XINPUT_GAMEPAD Gamepad;
122     XINPUT_VIBRATION Vibration;
123 }
124 alias _XINPUT_CAPABILITIES XINPUT_CAPABILITIES;
125 alias _XINPUT_CAPABILITIES* PXINPUT_CAPABILITIES;
126 
127 struct _XINPUT_KEYSTROKE {
128     WORD VirtualKey;
129     WCHAR Unicode;
130     WORD Flags;
131     BYTE UserIndex;
132     BYTE HidCode;
133 }
134 alias _XINPUT_KEYSTROKE XINPUT_KEYSTROKE;
135 alias _XINPUT_KEYSTROKE* PXINPUT_KEYSTROKE;
136 
137 struct _XINPUT_BATTERY_INFORMATION {
138     BYTE BatteryType;
139     BYTE BatteryLevel;
140 }
141 alias _XINPUT_BATTERY_INFORMATION XINPUT_BATTERY_INFORMATION;
142 alias _XINPUT_BATTERY_INFORMATION* PXINPUT_BATTERY_INFORMATION;
143 
144 import core.sys.windows.basetyps: GUID;
145 
146 void XInputEnable(WINBOOL);
147 DWORD XInputSetState(DWORD, XINPUT_VIBRATION*);
148 DWORD XInputGetState(DWORD, XINPUT_STATE*);
149 DWORD XInputGetKeystroke(DWORD, DWORD, PXINPUT_KEYSTROKE);
150 DWORD XInputGetCapabilities(DWORD, DWORD, XINPUT_CAPABILITIES*);
151 DWORD XInputGetDSoundAudioDeviceGuids(DWORD, GUID*, GUID*);
152 DWORD XInputGetBatteryInformation(DWORD, BYTE, XINPUT_BATTERY_INFORMATION*);