OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 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 | 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 "device/gamepad/game_controller_data_fetcher_mac.h" | 5 #include "device/gamepad/game_controller_data_fetcher_mac.h" |
6 | 6 |
7 #include <string.h> | 7 #include <string.h> |
8 | 8 |
9 #include "base/strings/string16.h" | 9 #include "base/strings/string16.h" |
10 #include "base/strings/string_util.h" | 10 #include "base/strings/string_util.h" |
11 #include "base/strings/utf_string_conversions.h" | 11 #include "base/strings/utf_string_conversions.h" |
12 #include "base/time/time.h" | 12 #include "base/time/time.h" |
13 #include "device/gamepad/gamepad_standard_mappings.h" | 13 #include "device/gamepad/gamepad_standard_mappings.h" |
14 | 14 |
15 #import <GameController/GameController.h> | 15 #import <GameController/GameController.h> |
16 | 16 |
17 using blink::WebGamepad; | |
18 using blink::WebGamepads; | |
19 | |
20 namespace device { | 17 namespace device { |
21 | 18 |
22 namespace { | 19 namespace { |
23 | 20 |
24 void CopyNSStringAsUTF16LittleEndian(NSString* src, | 21 void CopyNSStringAsUTF16LittleEndian(NSString* src, |
25 blink::WebUChar* dest, | 22 UChar* dest, |
26 size_t dest_len) { | 23 size_t dest_len) { |
27 NSData* as16 = [src dataUsingEncoding:NSUTF16LittleEndianStringEncoding]; | 24 NSData* as16 = [src dataUsingEncoding:NSUTF16LittleEndianStringEncoding]; |
28 memset(dest, 0, dest_len); | 25 memset(dest, 0, dest_len); |
29 [as16 getBytes:dest length:dest_len - sizeof(blink::WebUChar)]; | 26 [as16 getBytes:dest length:dest_len - sizeof(UChar)]; |
30 } | 27 } |
31 | 28 |
32 } // namespace | 29 } // namespace |
33 | 30 |
34 GameControllerDataFetcherMac::GameControllerDataFetcherMac() {} | 31 GameControllerDataFetcherMac::GameControllerDataFetcherMac() {} |
35 | 32 |
36 GameControllerDataFetcherMac::~GameControllerDataFetcherMac() {} | 33 GameControllerDataFetcherMac::~GameControllerDataFetcherMac() {} |
37 | 34 |
38 GamepadSource GameControllerDataFetcherMac::source() { | 35 GamepadSource GameControllerDataFetcherMac::source() { |
39 return Factory::static_source(); | 36 return Factory::static_source(); |
40 } | 37 } |
41 | 38 |
42 void GameControllerDataFetcherMac::GetGamepadData(bool) { | 39 void GameControllerDataFetcherMac::GetGamepadData(bool) { |
43 NSArray* controllers = [GCController controllers]; | 40 NSArray* controllers = [GCController controllers]; |
44 | 41 |
45 for (GCController* controller in controllers) { | 42 for (GCController* controller in controllers) { |
46 auto extended_gamepad = [controller extendedGamepad]; | 43 auto extended_gamepad = [controller extendedGamepad]; |
47 | 44 |
48 // We only support the extendedGamepad profile, the basic gamepad profile | 45 // We only support the extendedGamepad profile, the basic gamepad profile |
49 // appears to only be for iOS devices. | 46 // appears to only be for iOS devices. |
50 if (!extended_gamepad) | 47 if (!extended_gamepad) |
51 continue; | 48 continue; |
52 | 49 |
53 int player_index = [controller playerIndex]; | 50 int player_index = [controller playerIndex]; |
54 PadState* state = GetPadState(player_index); | 51 PadState* state = GetPadState(player_index); |
55 if (!state) | 52 if (!state) |
56 continue; | 53 continue; |
57 | 54 |
58 WebGamepad& pad = state->data; | 55 Gamepad& pad = state->data; |
59 | 56 |
60 // This first time we encounter a gamepad, set its name, mapping, and | 57 // This first time we encounter a gamepad, set its name, mapping, and |
61 // axes/button counts. This information is static, so it only needs to be | 58 // axes/button counts. This information is static, so it only needs to be |
62 // done once. | 59 // done once. |
63 if (state->active_state == GAMEPAD_NEWLY_ACTIVE) { | 60 if (state->active_state == GAMEPAD_NEWLY_ACTIVE) { |
64 NSString* vendorName = [controller vendorName]; | 61 NSString* vendorName = [controller vendorName]; |
65 NSString* ident = | 62 NSString* ident = |
66 [NSString stringWithFormat:@"%@ (STANDARD GAMEPAD)", | 63 [NSString stringWithFormat:@"%@ (STANDARD GAMEPAD)", |
67 vendorName ? vendorName : @"Unknown"]; | 64 vendorName ? vendorName : @"Unknown"]; |
68 CopyNSStringAsUTF16LittleEndian(ident, pad.id, sizeof(pad.id)); | 65 CopyNSStringAsUTF16LittleEndian(ident, pad.id, sizeof(pad.id)); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
104 BUTTON(BUTTON_INDEX_DPAD_UP, [[extended_gamepad dpad] up]); | 101 BUTTON(BUTTON_INDEX_DPAD_UP, [[extended_gamepad dpad] up]); |
105 BUTTON(BUTTON_INDEX_DPAD_DOWN, [[extended_gamepad dpad] down]); | 102 BUTTON(BUTTON_INDEX_DPAD_DOWN, [[extended_gamepad dpad] down]); |
106 BUTTON(BUTTON_INDEX_DPAD_LEFT, [[extended_gamepad dpad] left]); | 103 BUTTON(BUTTON_INDEX_DPAD_LEFT, [[extended_gamepad dpad] left]); |
107 BUTTON(BUTTON_INDEX_DPAD_RIGHT, [[extended_gamepad dpad] right]); | 104 BUTTON(BUTTON_INDEX_DPAD_RIGHT, [[extended_gamepad dpad] right]); |
108 | 105 |
109 #undef BUTTON | 106 #undef BUTTON |
110 } | 107 } |
111 } | 108 } |
112 | 109 |
113 } // namespace device | 110 } // namespace device |
OLD | NEW |