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..70489d38738bde3b1d5471015fd64795e5325603 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,14 @@ |
#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" |
+ |
+// struct DIDEVICEINSTANCE; |
+// struct IDirectInput8; |
+//struct IDirectInputDevice8; |
scottmg
2013/02/13 19:19:07
nit: delete these
|
+namespace WebKit { |
+class WebGamepad; |
+} |
namespace content { |
@@ -27,6 +40,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,7 +57,16 @@ 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(); |
+ |
+ bool GetDirectInputDllFunctions(); |
+ |
+ // 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); |
base::ScopedNativeLibrary xinput_dll_; |
bool xinput_available_; |
@@ -49,6 +77,31 @@ class GamepadPlatformDataFetcherWin : public GamepadDataFetcher { |
XInputGetCapabilitiesFunc xinput_get_capabilities_; |
XInputGetStateFunc xinput_get_state_; |
+ std::vector<uint32> xinput_devices_; |
+ typedef HRESULT (WINAPI *DirectInputCreateFunc)(HINSTANCE hinst, |
+ DWORD dwVersion, |
+ const IID& riidltf, |
+ void** ppvOut, |
+ IUnknown* punkOuter); |
+ DirectInputCreateFunc directinput_create_; |
+ base::ScopedNativeLibrary directinput_dll_; |
+ bool directinput_available_; |
+ IDirectInput8* directinput_interface_; |
+ |
+ enum PadConnectionStatus { |
+ DISCONNECTED, |
+ XINPUT_CONNECTED, |
+ DIRECTINPUT_CONNECTED |
+ }; |
+ |
+ struct PadState { |
+ PadConnectionStatus status; |
+ // Fields below are for DirectInput devices only. |
+ IDirectInputDevice8* directinput_gamepad; |
+ GamepadStandardMappingFunction mapper; |
+ }; |
+ std::vector<PadState> pad_state_; |
+ |
DISALLOW_COPY_AND_ASSIGN(GamepadPlatformDataFetcherWin); |
}; |