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

Side by Side Diff: content/browser/gamepad/data_fetcher_win.cc

Issue 8689011: Renderer reading side of gamepad (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: rebase to HEAD Created 9 years 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 unified diff | Download patch
« no previous file with comments | « content/browser/gamepad/data_fetcher_win.h ('k') | content/browser/gamepad/gamepad_provider.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/gamepad/data_fetcher_win.h" 5 #include "content/browser/gamepad/data_fetcher_win.h"
6 6
7 #include "base/debug/trace_event.h" 7 #include "base/debug/trace_event.h"
8 #include "content/common/gamepad_messages.h" 8 #include "content/common/gamepad_messages.h"
9 #include "content/common/gamepad_hardware_buffer.h" 9 #include "content/common/gamepad_hardware_buffer.h"
10 10
11 #include <delayimp.h> 11 #include <delayimp.h>
12 12
13 #pragma comment(lib, "delayimp.lib") 13 #pragma comment(lib, "delayimp.lib")
14 #pragma comment(lib, "xinput.lib") 14 #pragma comment(lib, "xinput.lib")
15 15
16 namespace gamepad { 16 namespace content {
17 17
18 using namespace WebKit; 18 using namespace WebKit;
19 19
20 namespace { 20 namespace {
21 21
22 // See http://goo.gl/5VSJR. These are not available in all versions of the 22 // See http://goo.gl/5VSJR. These are not available in all versions of the
23 // header, but they can be returned from the driver, so we define our own 23 // header, but they can be returned from the driver, so we define our own
24 // versions here. 24 // versions here.
25 static const BYTE kDeviceSubTypeGamepad = 1; 25 static const BYTE kDeviceSubTypeGamepad = 1;
26 static const BYTE kDeviceSubTypeWheel = 2; 26 static const BYTE kDeviceSubTypeWheel = 2;
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 __try { 71 __try {
72 XInputEnable(true); 72 XInputEnable(true);
73 } __except(DelayLoadDllExceptionFilter(GetExceptionInformation())) { 73 } __except(DelayLoadDllExceptionFilter(GetExceptionInformation())) {
74 return false; 74 return false;
75 } 75 }
76 return true; 76 return true;
77 } 77 }
78 78
79 } 79 }
80 80
81 DataFetcherWindows::DataFetcherWindows() 81 GamepadDataFetcherWindows::GamepadDataFetcherWindows()
82 : xinput_available_(EnableXInput()) { 82 : xinput_available_(EnableXInput()) {
83 } 83 }
84 84
85 void DataFetcherWindows::GetGamepadData(WebGamepads* pads, 85 void GamepadDataFetcherWindows::GetGamepadData(WebGamepads* pads,
86 bool devices_changed_hint) { 86 bool devices_changed_hint) {
87 TRACE_EVENT0("GAMEPAD", "DataFetcherWindows::GetGamepadData"); 87 TRACE_EVENT0("GAMEPAD", "GetGamepadData");
88 88
89 // If there's no XInput DLL on the system, early out so that we don't 89 // If there's no XInput DLL on the system, early out so that we don't
90 // call any other XInput functions. 90 // call any other XInput functions.
91 if (!xinput_available_) { 91 if (!xinput_available_) {
92 pads->length = 0; 92 pads->length = 0;
93 return; 93 return;
94 } 94 }
95 95
96 pads->length = WebGamepads::itemsLengthCap; 96 pads->length = WebGamepads::itemsLengthCap;
97 97
98 // If we got notification that system devices have been updated, then 98 // If we got notification that system devices have been updated, then
99 // run GetCapabilities to update the connected status and the device 99 // run GetCapabilities to update the connected status and the device
100 // identifier. It can be slow to do to both GetCapabilities and 100 // identifier. It can be slow to do to both GetCapabilities and
101 // GetState on unconnected devices, so we want to avoid a 2-5ms pause 101 // GetState on unconnected devices, so we want to avoid a 2-5ms pause
102 // here by only doing this when the devices are updated (despite 102 // here by only doing this when the devices are updated (despite
103 // documentation claiming it's OK to call it any time). 103 // documentation claiming it's OK to call it any time).
104 if (devices_changed_hint) { 104 if (devices_changed_hint) {
105 for (unsigned i = 0; i < WebGamepads::itemsLengthCap; ++i) { 105 for (unsigned i = 0; i < WebGamepads::itemsLengthCap; ++i) {
106 WebGamepad& pad = pads->items[i]; 106 WebGamepad& pad = pads->items[i];
107 TRACE_EVENT1("GAMEPAD", "DataFetcherWindows::GetCapabilities", "id", i); 107 TRACE_EVENT1("GAMEPAD", "GetCapabilities", "id", i);
108 XINPUT_CAPABILITIES caps; 108 XINPUT_CAPABILITIES caps;
109 DWORD res = XInputGetCapabilities(i, XINPUT_FLAG_GAMEPAD, &caps); 109 DWORD res = XInputGetCapabilities(i, XINPUT_FLAG_GAMEPAD, &caps);
110 if (res == ERROR_DEVICE_NOT_CONNECTED) { 110 if (res == ERROR_DEVICE_NOT_CONNECTED) {
111 pad.connected = false; 111 pad.connected = false;
112 } else { 112 } else {
113 pad.connected = true; 113 pad.connected = true;
114 base::swprintf(pad.id, 114 base::swprintf(pad.id,
115 WebGamepad::idLengthCap, 115 WebGamepad::idLengthCap,
116 L"Xbox 360 Controller (XInput %ls)", 116 L"Xbox 360 Controller (XInput %ls)",
117 GamepadSubTypeName(caps.SubType)); 117 GamepadSubTypeName(caps.SubType));
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 pad.axes[pad.axesLength++] = state.Gamepad.sThumbLX / 32767.0; 163 pad.axes[pad.axesLength++] = state.Gamepad.sThumbLX / 32767.0;
164 pad.axes[pad.axesLength++] = -state.Gamepad.sThumbLY / 32767.0; 164 pad.axes[pad.axesLength++] = -state.Gamepad.sThumbLY / 32767.0;
165 pad.axes[pad.axesLength++] = state.Gamepad.sThumbRX / 32767.0; 165 pad.axes[pad.axesLength++] = state.Gamepad.sThumbRX / 32767.0;
166 pad.axes[pad.axesLength++] = -state.Gamepad.sThumbRY / 32767.0; 166 pad.axes[pad.axesLength++] = -state.Gamepad.sThumbRY / 32767.0;
167 } else { 167 } else {
168 pad.connected = false; 168 pad.connected = false;
169 } 169 }
170 } 170 }
171 } 171 }
172 172
173 } // namespace gamepad 173 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/gamepad/data_fetcher_win.h ('k') | content/browser/gamepad/gamepad_provider.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698