Index: content/browser/gamepad/gamepad_platform_data_fetcher_win.h |
diff --git a/content/browser/gamepad/gamepad_platform_data_fetcher_win.h b/content/browser/gamepad/gamepad_platform_data_fetcher_win.h |
index 92c44ffc4a3d7a815c9f75397bf79b9d9f65f6f3..8bbc9048c983bbf7f12320952ad622b0102a5d15 100644 |
--- a/content/browser/gamepad/gamepad_platform_data_fetcher_win.h |
+++ b/content/browser/gamepad/gamepad_platform_data_fetcher_win.h |
@@ -10,6 +10,11 @@ |
#ifndef WIN32_LEAN_AND_MEAN |
#define WIN32_LEAN_AND_MEAN |
#endif |
+#define DIRECTINPUT_VERSION 0x0800 |
+#include <dinput.h> |
+#include <stdlib.h> |
+#include <Unknwn.h> |
+#include <WinDef.h> |
#include <windows.h> |
#include <XInput.h> |
@@ -17,6 +22,8 @@ |
#include "base/compiler_specific.h" |
#include "base/scoped_native_library.h" |
#include "content/browser/gamepad/gamepad_data_fetcher.h" |
+#include "content/browser/gamepad/gamepad_standard_mappings.h" |
+#include "third_party/WebKit/Source/Platform/chromium/public/WebGamepads.h" |
namespace content { |
@@ -27,6 +34,12 @@ class GamepadPlatformDataFetcherWin : public GamepadDataFetcher { |
virtual void GetGamepadData(WebKit::WebGamepads* pads, |
bool devices_changed_hint) OVERRIDE; |
private: |
+ // XInput-specific implementation for GetGamepadData. |
+ bool GetXInputGamepadData(WebKit::WebGamepads* pads, |
+ bool devices_changed_hint); |
+ bool GetDirectInputGamepadData(WebKit::WebGamepads* pads, |
+ bool devices_changed_hint); |
+ |
// The three function types we use from xinput1_3.dll. |
typedef void (WINAPI *XInputEnableFunc)(BOOL enable); |
typedef DWORD (WINAPI *XInputGetCapabilitiesFunc)( |
@@ -38,10 +51,22 @@ class GamepadPlatformDataFetcherWin : public GamepadDataFetcher { |
// DELAYLOAD because the import library for Win8 SDK pulls xinput1_4 which |
// isn't redistributable. Returns true if loading was successful. We include |
// xinput1_3.dll with Chrome. |
- bool GetXinputDllFunctions(); |
+ bool GetXInputDllFunctions(); |
+ |
+ // Scan for connected XInput and DirectInput gamepads. |
+ void EnumerateDevices(WebKit::WebGamepads* pads); |
+ bool GetXInputPadConnectivity(int i, WebKit::WebGamepad* pad) const; |
+ |
+ void GetXInputPadData(int i, WebKit::WebGamepad* pad); |
+ void GetDirectInputPadData(int i, WebKit::WebGamepad* pad); |
+ |
+ int FirstAvailableGamepadId() const; |
+ bool HasXInputGamepad(int index) const; |
+ bool HasDirectInputGamepad(const GUID &guid) const; |
base::ScopedNativeLibrary xinput_dll_; |
bool xinput_available_; |
+ bool directinput_available_; |
// Function pointers to XInput functionality, retrieved in |
// |GetXinputDllFunctions|. |
@@ -49,6 +74,24 @@ class GamepadPlatformDataFetcherWin : public GamepadDataFetcher { |
XInputGetCapabilitiesFunc xinput_get_capabilities_; |
XInputGetStateFunc xinput_get_state_; |
+ IDirectInput8* directinput_interface_; |
+ |
+ enum PadConnectionStatus { |
+ DISCONNECTED, |
+ XINPUT_CONNECTED, |
+ DIRECTINPUT_CONNECTED |
+ }; |
+ |
+ struct PadState { |
+ PadConnectionStatus status; |
+ int xinput_index; // XInput-only. |
+ // Fields below are for DirectInput devices only. |
+ GUID guid; |
+ IDirectInputDevice8* directinput_gamepad; |
+ GamepadStandardMappingFunction mapper; |
+ }; |
+ PadState pad_state_[WebKit::WebGamepads::itemsLengthCap]; |
+ |
DISALLOW_COPY_AND_ASSIGN(GamepadPlatformDataFetcherWin); |
}; |