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

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

Issue 165983005: Updating Gamepad API to match latest spec (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed typo in GamepadProviderTest Created 6 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/gamepad_platform_data_fetcher_win.h" 5 #include "content/browser/gamepad/gamepad_platform_data_fetcher_win.h"
6 6
7 #include "base/debug/trace_event.h" 7 #include "base/debug/trace_event.h"
8 #include "base/strings/stringprintf.h" 8 #include "base/strings/stringprintf.h"
9 #include "base/win/windows_version.h" 9 #include "base/win/windows_version.h"
10 #include "content/common/gamepad_hardware_buffer.h" 10 #include "content/common/gamepad_hardware_buffer.h"
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 state.raw_input_handle = gamepad->handle; 135 state.raw_input_handle = gamepad->handle;
136 136
137 std::string vendor = base::StringPrintf("%04x", gamepad->vendor_id); 137 std::string vendor = base::StringPrintf("%04x", gamepad->vendor_id);
138 std::string product = base::StringPrintf("%04x", gamepad->product_id); 138 std::string product = base::StringPrintf("%04x", gamepad->product_id);
139 state.mapper = GetGamepadStandardMappingFunction(vendor, product); 139 state.mapper = GetGamepadStandardMappingFunction(vendor, product);
140 140
141 swprintf(pad.id, WebGamepad::idLengthCap, 141 swprintf(pad.id, WebGamepad::idLengthCap,
142 L"%ls (%lsVendor: %04x Product: %04x)", 142 L"%ls (%lsVendor: %04x Product: %04x)",
143 gamepad->id, state.mapper ? L"STANDARD GAMEPAD " : L"", 143 gamepad->id, state.mapper ? L"STANDARD GAMEPAD " : L"",
144 gamepad->vendor_id, gamepad->product_id); 144 gamepad->vendor_id, gamepad->product_id);
145
146 if (state.mapper)
147 swprintf(pad.mapping, WebGamepad::mappingLengthCap, L"standard");
148 else
149 pad.mapping[0] = 0;
150
145 pads->length++; 151 pads->length++;
146 } 152 }
147 } 153 }
148 } 154 }
149 155
150 156
151 void GamepadPlatformDataFetcherWin::GetGamepadData(WebGamepads* pads, 157 void GamepadPlatformDataFetcherWin::GetGamepadData(WebGamepads* pads,
152 bool devices_changed_hint) { 158 bool devices_changed_hint) {
153 TRACE_EVENT0("GAMEPAD", "GetGamepadData"); 159 TRACE_EVENT0("GAMEPAD", "GetGamepadData");
154 160
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
198 DWORD res = xinput_get_capabilities_(i, XINPUT_FLAG_GAMEPAD, &caps); 204 DWORD res = xinput_get_capabilities_(i, XINPUT_FLAG_GAMEPAD, &caps);
199 if (res == ERROR_DEVICE_NOT_CONNECTED) { 205 if (res == ERROR_DEVICE_NOT_CONNECTED) {
200 pad->connected = false; 206 pad->connected = false;
201 return false; 207 return false;
202 } else { 208 } else {
203 pad->connected = true; 209 pad->connected = true;
204 swprintf(pad->id, 210 swprintf(pad->id,
205 WebGamepad::idLengthCap, 211 WebGamepad::idLengthCap,
206 L"Xbox 360 Controller (XInput STANDARD %ls)", 212 L"Xbox 360 Controller (XInput STANDARD %ls)",
207 GamepadSubTypeName(caps.SubType)); 213 GamepadSubTypeName(caps.SubType));
214 swprintf(pad->mapping, WebGamepad::mappingLengthCap, L"standard");
208 return true; 215 return true;
209 } 216 }
210 } 217 }
211 218
212 void GamepadPlatformDataFetcherWin::GetXInputPadData( 219 void GamepadPlatformDataFetcherWin::GetXInputPadData(
213 int i, 220 int i,
214 WebGamepad* pad) { 221 WebGamepad* pad) {
215 XINPUT_STATE state; 222 XINPUT_STATE state;
216 memset(&state, 0, sizeof(XINPUT_STATE)); 223 memset(&state, 0, sizeof(XINPUT_STATE));
217 TRACE_EVENT_BEGIN1("GAMEPAD", "XInputGetState", "id", i); 224 TRACE_EVENT_BEGIN1("GAMEPAD", "XInputGetState", "id", i);
218 DWORD dwResult = xinput_get_state_(pad_state_[i].xinput_index, &state); 225 DWORD dwResult = xinput_get_state_(pad_state_[i].xinput_index, &state);
219 TRACE_EVENT_END1("GAMEPAD", "XInputGetState", "id", i); 226 TRACE_EVENT_END1("GAMEPAD", "XInputGetState", "id", i);
220 227
221 if (dwResult == ERROR_SUCCESS) { 228 if (dwResult == ERROR_SUCCESS) {
222 pad->timestamp = state.dwPacketNumber; 229 pad->timestamp = state.dwPacketNumber;
223 pad->buttonsLength = 0; 230 pad->buttonsLength = 0;
224 #define ADD(b) pad->buttons[pad->buttonsLength++] = \ 231 #define ADD(b) pad->buttons[pad->buttonsLength].pressed = \
225 ((state.Gamepad.wButtons & (b)) ? 1.0 : 0.0); 232 (state.Gamepad.wButtons & (b)) != 0; \
233 pad->buttons[pad->buttonsLength++].value = \
234 ((state.Gamepad.wButtons & (b)) ? 1.f : 0.f);
226 ADD(XINPUT_GAMEPAD_A); 235 ADD(XINPUT_GAMEPAD_A);
227 ADD(XINPUT_GAMEPAD_B); 236 ADD(XINPUT_GAMEPAD_B);
228 ADD(XINPUT_GAMEPAD_X); 237 ADD(XINPUT_GAMEPAD_X);
229 ADD(XINPUT_GAMEPAD_Y); 238 ADD(XINPUT_GAMEPAD_Y);
230 ADD(XINPUT_GAMEPAD_LEFT_SHOULDER); 239 ADD(XINPUT_GAMEPAD_LEFT_SHOULDER);
231 ADD(XINPUT_GAMEPAD_RIGHT_SHOULDER); 240 ADD(XINPUT_GAMEPAD_RIGHT_SHOULDER);
232 pad->buttons[pad->buttonsLength++] = state.Gamepad.bLeftTrigger / 255.0; 241 pad->buttons[pad->buttonsLength].pressed =
233 pad->buttons[pad->buttonsLength++] = state.Gamepad.bRightTrigger / 255.0; 242 state.Gamepad.bLeftTrigger >= XINPUT_GAMEPAD_TRIGGER_THRESHOLD;
243 pad->buttons[pad->buttonsLength++].value =
244 state.Gamepad.bLeftTrigger / 255.f;
245 pad->buttons[pad->buttonsLength].pressed =
246 state.Gamepad.bRightTrigger >= XINPUT_GAMEPAD_TRIGGER_THRESHOLD;
247 pad->buttons[pad->buttonsLength++].value =
248 state.Gamepad.bRightTrigger / 255.f;
234 ADD(XINPUT_GAMEPAD_BACK); 249 ADD(XINPUT_GAMEPAD_BACK);
235 ADD(XINPUT_GAMEPAD_START); 250 ADD(XINPUT_GAMEPAD_START);
236 ADD(XINPUT_GAMEPAD_LEFT_THUMB); 251 ADD(XINPUT_GAMEPAD_LEFT_THUMB);
237 ADD(XINPUT_GAMEPAD_RIGHT_THUMB); 252 ADD(XINPUT_GAMEPAD_RIGHT_THUMB);
238 ADD(XINPUT_GAMEPAD_DPAD_UP); 253 ADD(XINPUT_GAMEPAD_DPAD_UP);
239 ADD(XINPUT_GAMEPAD_DPAD_DOWN); 254 ADD(XINPUT_GAMEPAD_DPAD_DOWN);
240 ADD(XINPUT_GAMEPAD_DPAD_LEFT); 255 ADD(XINPUT_GAMEPAD_DPAD_LEFT);
241 ADD(XINPUT_GAMEPAD_DPAD_RIGHT); 256 ADD(XINPUT_GAMEPAD_DPAD_RIGHT);
242 #undef ADD 257 #undef ADD
243 pad->axesLength = 0; 258 pad->axesLength = 0;
(...skipping 16 matching lines...) Expand all
260 pad->connected = false; 275 pad->connected = false;
261 return; 276 return;
262 } 277 }
263 278
264 WebGamepad raw_pad = *pad; 279 WebGamepad raw_pad = *pad;
265 280
266 raw_pad.timestamp = gamepad->report_id; 281 raw_pad.timestamp = gamepad->report_id;
267 raw_pad.buttonsLength = gamepad->buttons_length; 282 raw_pad.buttonsLength = gamepad->buttons_length;
268 raw_pad.axesLength = gamepad->axes_length; 283 raw_pad.axesLength = gamepad->axes_length;
269 284
270 for (unsigned int i = 0; i < raw_pad.buttonsLength; i++) 285 for (unsigned int i = 0; i < raw_pad.buttonsLength; i++) {
271 raw_pad.buttons[i] = gamepad->buttons[i] ? 1.0 : 0.0; 286 raw_pad.buttons[i].pressed = gamepad->buttons[i];
287 raw_pad.buttons[i].value = gamepad->buttons[i] ? 1.0 : 0.0;
288 }
272 289
273 for (unsigned int i = 0; i < raw_pad.axesLength; i++) 290 for (unsigned int i = 0; i < raw_pad.axesLength; i++)
274 raw_pad.axes[i] = gamepad->axes[i].value; 291 raw_pad.axes[i] = gamepad->axes[i].value;
275 292
276 // Copy to the current state to the output buffer, using the mapping 293 // Copy to the current state to the output buffer, using the mapping
277 // function, if there is one available. 294 // function, if there is one available.
278 if (pad_state_[index].mapper) 295 if (pad_state_[index].mapper)
279 pad_state_[index].mapper(raw_pad, pad); 296 pad_state_[index].mapper(raw_pad, pad);
280 else 297 else
281 *pad = raw_pad; 298 *pad = raw_pad;
(...skipping 12 matching lines...) Expand all
294 return false; 311 return false;
295 xinput_get_state_ = reinterpret_cast<XInputGetStateFunc>( 312 xinput_get_state_ = reinterpret_cast<XInputGetStateFunc>(
296 xinput_dll_.GetFunctionPointer("XInputGetState")); 313 xinput_dll_.GetFunctionPointer("XInputGetState"));
297 if (!xinput_get_state_) 314 if (!xinput_get_state_)
298 return false; 315 return false;
299 xinput_enable_(true); 316 xinput_enable_(true);
300 return true; 317 return true;
301 } 318 }
302 319
303 } // namespace content 320 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/gamepad/gamepad_platform_data_fetcher_mac.mm ('k') | content/browser/gamepad/gamepad_provider_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698