Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(421)

Unified Diff: content/browser/gamepad/gamepad_platform_data_fetcher_win.h

Issue 12260011: Support DirectInput gamepads on Windows. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..90ff17d4366b1d3102e1b0918e4f1d997aa3e4fb 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,11 @@
#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"
+
+namespace WebKit {
+class WebGamepad;
+}
namespace content {
@@ -27,6 +37,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 +54,18 @@ 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);
base::ScopedNativeLibrary xinput_dll_;
bool xinput_available_;
+ bool directinput_available_;
// Function pointers to XInput functionality, retrieved in
// |GetXinputDllFunctions|.
@@ -49,6 +73,23 @@ class GamepadPlatformDataFetcherWin : public GamepadDataFetcher {
XInputGetCapabilitiesFunc xinput_get_capabilities_;
XInputGetStateFunc xinput_get_state_;
+ std::vector<uint32> xinput_devices_;
+ 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);
};

Powered by Google App Engine
This is Rietveld 408576698