| 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 |