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

Side by Side Diff: device/gamepad/game_controller_data_fetcher_mac.mm

Issue 2271353002: Added support for GameController devices on OSX (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 4 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
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "device/gamepad/game_controller_data_fetcher_mac.h"
6
7 #include <string.h>
8
9 #include "base/strings/string16.h"
10 #include "base/strings/string_util.h"
11 #include "base/strings/utf_string_conversions.h"
12 #include "base/time/time.h"
13
14 #import <GameController/GameController.h>
15
16 using blink::WebGamepad;
17 using blink::WebGamepads;
18
19 namespace device {
20
21 namespace {
22
23 void CopyNSStringAsUTF16LittleEndian(NSString* src,
24 blink::WebUChar* dest,
25 size_t dest_len) {
26 NSData* as16 = [src dataUsingEncoding:NSUTF16LittleEndianStringEncoding];
27 memset(dest, 0, dest_len);
28 [as16 getBytes:dest length:dest_len - sizeof(blink::WebUChar)];
29 }
30
31 } // namespace
32
33 GameControllerDataFetcherMac::GameControllerDataFetcherMac() {}
34
35 GameControllerDataFetcherMac::~GameControllerDataFetcherMac() {}
36
37 GamepadSource GameControllerDataFetcherMac::source() {
38 return Factory::static_source();
39 }
40
41 void GameControllerDataFetcherMac::GetGamepadData(bool) {
42 NSArray* controllers = [GCController controllers];
43
44 for (GCController* controller in controllers) {
45 auto extended_gamepad = [controller extendedGamepad];
46
47 // We only support the extendedGamepad profile, the basic gamepad profile
48 // appears to only be for iOS devices.
49 if (!extended_gamepad)
50 continue;
51
52 int player_index = [controller playerIndex];
53 PadState* state = GetPadState(player_index);
54 if (!state)
55 continue;
56
57 WebGamepad& pad = state->data;
58
59 // This first time we encounter a gamepad, set it's name, mapping, and
scottmg 2016/08/24 18:44:55 nit: it's -> its
60 // axes/button counts. This information is static, so it only needs to be
61 // done once.
62 if (state->active_state == GAMEPAD_NEWLY_ACTIVE) {
63 NSString* vendorName = [controller vendorName];
64 NSString* ident =
65 [NSString stringWithFormat:@"%@ (STANDARD GAMEPAD)",
66 vendorName ? vendorName : @"Unknown"];
67 CopyNSStringAsUTF16LittleEndian(ident, pad.id, sizeof(pad.id));
68
69 CopyNSStringAsUTF16LittleEndian(@"standard", pad.mapping,
70 sizeof(pad.mapping));
71
72 pad.axesLength = 4;
73 pad.buttonsLength = 16;
74 pad.connected = true;
75 }
76
77 pad.timestamp = base::TimeTicks::Now().ToInternalValue();
78
79 pad.axes[0] = [[[extended_gamepad leftThumbstick] xAxis] value];
80 pad.axes[1] = -[[[extended_gamepad leftThumbstick] yAxis] value];
81 pad.axes[2] = [[[extended_gamepad rightThumbstick] xAxis] value];
82 pad.axes[3] = -[[[extended_gamepad rightThumbstick] yAxis] value];
83
84 #define BUTTON(i, b) \
85 pad.buttons[i].pressed = [b isPressed]; \
86 pad.buttons[i].value = [b value];
87
88 BUTTON(0, [extended_gamepad buttonA]);
scottmg 2016/08/24 18:44:55 #include "device/gamepad/gamepad_standard_mappings
89 BUTTON(1, [extended_gamepad buttonB]);
90 BUTTON(2, [extended_gamepad buttonX]);
91 BUTTON(3, [extended_gamepad buttonY]);
92 BUTTON(4, [extended_gamepad leftShoulder]);
93 BUTTON(5, [extended_gamepad rightShoulder]);
94 BUTTON(6, [extended_gamepad leftTrigger]);
95 BUTTON(7, [extended_gamepad rightTrigger]);
96
97 // No start, select, or thumbstick buttons
scottmg 2016/08/24 18:44:55 Sorry, I should know this, but are [8-11] these gu
98
99 BUTTON(12, [[extended_gamepad dpad] up]);
100 BUTTON(13, [[extended_gamepad dpad] down]);
101 BUTTON(14, [[extended_gamepad dpad] left]);
102 BUTTON(15, [[extended_gamepad dpad] right]);
103
104 #undef BUTTON
105 }
106 }
107
108 } // namespace device
OLDNEW
« no previous file with comments | « device/gamepad/game_controller_data_fetcher_mac.h ('k') | device/gamepad/gamepad_pad_state_provider.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698