diff options
author | asvitkine@chromium.org <asvitkine@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-01-06 20:34:35 +0000 |
---|---|---|
committer | asvitkine@chromium.org <asvitkine@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-01-06 20:34:35 +0000 |
commit | cdb285583abd42c9cee96be6ed46bab945ea0abc (patch) | |
tree | e2dc082d9b80fd4ee0a563ed9d008d51197e4d56 /content/browser/gamepad | |
parent | 361e5cbf9de1ee2f14a66014c90ee140f72e8a05 (diff) | |
download | chromium_src-cdb285583abd42c9cee96be6ed46bab945ea0abc.zip chromium_src-cdb285583abd42c9cee96be6ed46bab945ea0abc.tar.gz chromium_src-cdb285583abd42c9cee96be6ed46bab945ea0abc.tar.bz2 |
Revert 116724 - Add gamepad data fetcher for Linux
Broke ASAN builder:
http://build.chromium.org/p/chromium.memory/builders/ASAN%20Builder/builds/8480/steps/update/logs/stdio
BUG=79050
Review URL: http://codereview.chromium.org/8899017
TBR=scottmg@google.com
Review URL: http://codereview.chromium.org/9110039
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@116726 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/browser/gamepad')
-rw-r--r-- | content/browser/gamepad/data_fetcher_mac.h (renamed from content/browser/gamepad/platform_data_fetcher_mac.h) | 10 | ||||
-rw-r--r-- | content/browser/gamepad/data_fetcher_mac.mm (renamed from content/browser/gamepad/platform_data_fetcher_mac.mm) | 38 | ||||
-rw-r--r-- | content/browser/gamepad/data_fetcher_win.cc (renamed from content/browser/gamepad/platform_data_fetcher_win.cc) | 10 | ||||
-rw-r--r-- | content/browser/gamepad/data_fetcher_win.h (renamed from content/browser/gamepad/platform_data_fetcher_win.h) | 6 | ||||
-rw-r--r-- | content/browser/gamepad/gamepad_provider.cc | 38 | ||||
-rw-r--r-- | content/browser/gamepad/gamepad_provider.h | 8 | ||||
-rw-r--r-- | content/browser/gamepad/gamepad_standard_mappings_linux.cc | 156 | ||||
-rw-r--r-- | content/browser/gamepad/gamepad_standard_mappings_linux.h | 26 | ||||
-rw-r--r-- | content/browser/gamepad/platform_data_fetcher.h | 47 | ||||
-rw-r--r-- | content/browser/gamepad/platform_data_fetcher_linux.cc | 228 | ||||
-rw-r--r-- | content/browser/gamepad/platform_data_fetcher_linux.h | 66 |
11 files changed, 66 insertions, 567 deletions
diff --git a/content/browser/gamepad/platform_data_fetcher_mac.h b/content/browser/gamepad/data_fetcher_mac.h index 360a183..34f7d4b 100644 --- a/content/browser/gamepad/platform_data_fetcher_mac.h +++ b/content/browser/gamepad/data_fetcher_mac.h @@ -1,4 +1,4 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -23,10 +23,10 @@ class NSArray; namespace content { -class GamepadPlatformDataFetcherMac : public GamepadDataFetcher { +class GamepadDataFetcherMac : public GamepadDataFetcher { public: - GamepadPlatformDataFetcherMac(); - virtual ~GamepadPlatformDataFetcherMac(); + GamepadDataFetcherMac(); + virtual ~GamepadDataFetcherMac(); virtual void GetGamepadData(WebKit::WebGamepads* pads, bool devices_changed_hint) OVERRIDE; virtual void PauseHint(bool paused) OVERRIDE; @@ -34,7 +34,7 @@ class GamepadPlatformDataFetcherMac : public GamepadDataFetcher { bool enabled_; base::mac::ScopedCFTypeRef<IOHIDManagerRef> hid_manager_ref_; - static GamepadPlatformDataFetcherMac* InstanceFromContext(void* context); + static GamepadDataFetcherMac* InstanceFromContext(void* context); static void DeviceAddCallback(void* context, IOReturn result, void* sender, diff --git a/content/browser/gamepad/platform_data_fetcher_mac.mm b/content/browser/gamepad/data_fetcher_mac.mm index 5e4ba8f..b06f01a 100644 --- a/content/browser/gamepad/platform_data_fetcher_mac.mm +++ b/content/browser/gamepad/data_fetcher_mac.mm @@ -1,8 +1,8 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "content/browser/gamepad/platform_data_fetcher_mac.h" +#include "content/browser/gamepad/data_fetcher_mac.h" #include "base/mac/foundation_util.h" #include "base/memory/scoped_nsobject.h" @@ -41,8 +41,7 @@ const uint32_t kAxisMaximumUsageNumber = 0x35; } // namespace -GamepadPlatformDataFetcherMac::GamepadPlatformDataFetcherMac() - : enabled_(true) { +GamepadDataFetcherMac::GamepadDataFetcherMac() : enabled_(true) { hid_manager_ref_.reset(IOHIDManagerCreate(kCFAllocatorDefault, kIOHIDOptionsTypeNone)); if (CFGetTypeID(hid_manager_ref_) != IOHIDManagerGetTypeID()) { @@ -62,7 +61,7 @@ GamepadPlatformDataFetcherMac::GamepadPlatformDataFetcherMac() RegisterForNotifications(); } -void GamepadPlatformDataFetcherMac::RegisterForNotifications() { +void GamepadDataFetcherMac::RegisterForNotifications() { // Register for plug/unplug notifications. IOHIDManagerRegisterDeviceMatchingCallback( hid_manager_ref_, @@ -88,7 +87,7 @@ void GamepadPlatformDataFetcherMac::RegisterForNotifications() { kIOHIDOptionsTypeSeizeDevice) == kIOReturnSuccess; } -void GamepadPlatformDataFetcherMac::UnregisterFromNotifications() { +void GamepadDataFetcherMac::UnregisterFromNotifications() { IOHIDManagerUnscheduleFromRunLoop( hid_manager_ref_, CFRunLoopGetCurrent(), @@ -96,45 +95,44 @@ void GamepadPlatformDataFetcherMac::UnregisterFromNotifications() { IOHIDManagerClose(hid_manager_ref_, kIOHIDOptionsTypeNone); } -void GamepadPlatformDataFetcherMac::PauseHint(bool pause) { +void GamepadDataFetcherMac::PauseHint(bool pause) { if (pause) UnregisterFromNotifications(); else RegisterForNotifications(); } -GamepadPlatformDataFetcherMac::~GamepadPlatformDataFetcherMac() { +GamepadDataFetcherMac::~GamepadDataFetcherMac() { UnregisterFromNotifications(); } -GamepadPlatformDataFetcherMac* -GamepadPlatformDataFetcherMac::InstanceFromContext( +GamepadDataFetcherMac* GamepadDataFetcherMac::InstanceFromContext( void* context) { - return reinterpret_cast<GamepadPlatformDataFetcherMac*>(context); + return reinterpret_cast<GamepadDataFetcherMac*>(context); } -void GamepadPlatformDataFetcherMac::DeviceAddCallback(void* context, +void GamepadDataFetcherMac::DeviceAddCallback(void* context, IOReturn result, void* sender, IOHIDDeviceRef ref) { InstanceFromContext(context)->DeviceAdd(ref); } -void GamepadPlatformDataFetcherMac::DeviceRemoveCallback(void* context, +void GamepadDataFetcherMac::DeviceRemoveCallback(void* context, IOReturn result, void* sender, IOHIDDeviceRef ref) { InstanceFromContext(context)->DeviceRemove(ref); } -void GamepadPlatformDataFetcherMac::ValueChangedCallback(void* context, +void GamepadDataFetcherMac::ValueChangedCallback(void* context, IOReturn result, void* sender, IOHIDValueRef ref) { InstanceFromContext(context)->ValueChanged(ref); } -void GamepadPlatformDataFetcherMac::AddButtonsAndAxes(NSArray* elements, +void GamepadDataFetcherMac::AddButtonsAndAxes(NSArray* elements, size_t slot) { WebKit::WebGamepad& pad = data_.items[slot]; AssociatedData& associated = associated_[slot]; @@ -170,7 +168,7 @@ void GamepadPlatformDataFetcherMac::AddButtonsAndAxes(NSArray* elements, } } -void GamepadPlatformDataFetcherMac::DeviceAdd(IOHIDDeviceRef device) { +void GamepadDataFetcherMac::DeviceAdd(IOHIDDeviceRef device) { using WebKit::WebGamepad; using WebKit::WebGamepads; using base::mac::CFToNSCast; @@ -223,7 +221,7 @@ void GamepadPlatformDataFetcherMac::DeviceAdd(IOHIDDeviceRef device) { data_.length = slot + 1; } -void GamepadPlatformDataFetcherMac::DeviceRemove(IOHIDDeviceRef device) { +void GamepadDataFetcherMac::DeviceRemove(IOHIDDeviceRef device) { using WebKit::WebGamepads; size_t slot; if (!enabled_) @@ -240,7 +238,7 @@ void GamepadPlatformDataFetcherMac::DeviceRemove(IOHIDDeviceRef device) { data_.items[slot].connected = false; } -void GamepadPlatformDataFetcherMac::ValueChanged(IOHIDValueRef value) { +void GamepadDataFetcherMac::ValueChanged(IOHIDValueRef value) { if (!enabled_) return; @@ -278,9 +276,7 @@ void GamepadPlatformDataFetcherMac::ValueChanged(IOHIDValueRef value) { } } -void GamepadPlatformDataFetcherMac::GetGamepadData( - WebKit::WebGamepads* pads, - bool) { +void GamepadDataFetcherMac::GetGamepadData(WebKit::WebGamepads* pads, bool) { if (!enabled_) { pads->length = 0; return; diff --git a/content/browser/gamepad/platform_data_fetcher_win.cc b/content/browser/gamepad/data_fetcher_win.cc index 7f6f417..4cb874d 100644 --- a/content/browser/gamepad/platform_data_fetcher_win.cc +++ b/content/browser/gamepad/data_fetcher_win.cc @@ -1,8 +1,8 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "content/browser/gamepad/platform_data_fetcher_win.h" +#include "content/browser/gamepad/data_fetcher_win.h" #include "base/debug/trace_event.h" #include "content/common/gamepad_messages.h" @@ -78,11 +78,11 @@ bool EnableXInput() { } -GamepadPlatformDataFetcherWin::GamepadPlatformDataFetcherWin() +GamepadDataFetcherWindows::GamepadDataFetcherWindows() : xinput_available_(EnableXInput()) { } -void GamepadPlatformDataFetcherWin::GetGamepadData(WebGamepads* pads, +void GamepadDataFetcherWindows::GetGamepadData(WebGamepads* pads, bool devices_changed_hint) { TRACE_EVENT0("GAMEPAD", "GetGamepadData"); @@ -113,7 +113,7 @@ void GamepadPlatformDataFetcherWin::GetGamepadData(WebGamepads* pads, pad.connected = true; base::swprintf(pad.id, WebGamepad::idLengthCap, - L"Xbox 360 Controller (XInput STANDARD %ls)", + L"Xbox 360 Controller (XInput %ls)", GamepadSubTypeName(caps.SubType)); } } diff --git a/content/browser/gamepad/platform_data_fetcher_win.h b/content/browser/gamepad/data_fetcher_win.h index 1c91059..9193f67 100644 --- a/content/browser/gamepad/platform_data_fetcher_win.h +++ b/content/browser/gamepad/data_fetcher_win.h @@ -1,4 +1,4 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -18,9 +18,9 @@ namespace content { -class GamepadPlatformDataFetcherWin : public GamepadDataFetcher { +class GamepadDataFetcherWindows : public GamepadDataFetcher { public: - GamepadPlatformDataFetcherWin(); + GamepadDataFetcherWindows(); virtual void GetGamepadData(WebKit::WebGamepads* pads, bool devices_changed_hint) OVERRIDE; private: diff --git a/content/browser/gamepad/gamepad_provider.cc b/content/browser/gamepad/gamepad_provider.cc index 1247db3..6af245c 100644 --- a/content/browser/gamepad/gamepad_provider.cc +++ b/content/browser/gamepad/gamepad_provider.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -12,14 +12,41 @@ #include "base/task.h" #include "base/threading/thread.h" #include "base/threading/thread_restrictions.h" -#include "content/browser/gamepad/data_fetcher.h" +#include "content/public/browser/browser_thread.h" #include "content/browser/gamepad/gamepad_provider.h" -#include "content/browser/gamepad/platform_data_fetcher.h" +#include "content/browser/gamepad/data_fetcher.h" #include "content/common/gamepad_messages.h" -#include "content/public/browser/browser_thread.h" + +#if defined(OS_WIN) +#include "content/browser/gamepad/data_fetcher_win.h" +#elif defined(OS_MACOSX) +#include "content/browser/gamepad/data_fetcher_mac.h" +#endif namespace content { +// Define the default data fetcher that GamepadProvider will use if none is +// supplied. (GamepadPlatformDataFetcher). +#if defined(OS_WIN) + +typedef GamepadDataFetcherWindows GamepadPlatformDataFetcher; + +#elif defined(OS_MACOSX) + +typedef GamepadDataFetcherMac GamepadPlatformDataFetcher; + +#else + +class GamepadEmptyDataFetcher : public GamepadDataFetcher { + public: + void GetGamepadData(WebKit::WebGamepads* pads, bool) { + pads->length = 0; + } +}; +typedef GamepadEmptyDataFetcher GamepadPlatformDataFetcher; + +#endif + GamepadProvider::GamepadProvider(GamepadDataFetcher* fetcher) : is_paused_(false), devices_changed_(true), @@ -35,8 +62,7 @@ GamepadProvider::GamepadProvider(GamepadDataFetcher* fetcher) memset(hwbuf, 0, sizeof(GamepadHardwareBuffer)); polling_thread_.reset(new base::Thread("Gamepad polling thread")); - polling_thread_->StartWithOptions( - base::Thread::Options(MessageLoop::TYPE_IO, 0)); + polling_thread_->Start(); MessageLoop* polling_loop = polling_thread_->message_loop(); polling_loop->PostTask( diff --git a/content/browser/gamepad/gamepad_provider.h b/content/browser/gamepad/gamepad_provider.h index 0d1c315..963e768 100644 --- a/content/browser/gamepad/gamepad_provider.h +++ b/content/browser/gamepad/gamepad_provider.h @@ -1,9 +1,9 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CONTENT_BROWSER_GAMEPAD_GAMEPAD_PROVIDER_H_ -#define CONTENT_BROWSER_GAMEPAD_GAMEPAD_PROVIDER_H_ +#ifndef CONTENT_BROWSER_GAMEPAD_PROVIDER_H_ +#define CONTENT_BROWSER_GAMEPAD_PROVIDER_H_ #include "base/memory/scoped_ptr.h" #include "base/memory/weak_ptr.h" @@ -89,4 +89,4 @@ class CONTENT_EXPORT GamepadProvider : } // namespace content -#endif // CONTENT_BROWSER_GAMEPAD_GAMEPAD_PROVIDER_H_ +#endif // CONTENT_BROWSER_GAMEPAD_PROVIDER_H_ diff --git a/content/browser/gamepad/gamepad_standard_mappings_linux.cc b/content/browser/gamepad/gamepad_standard_mappings_linux.cc deleted file mode 100644 index 99d9ba7..0000000 --- a/content/browser/gamepad/gamepad_standard_mappings_linux.cc +++ /dev/null @@ -1,156 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "content/browser/gamepad/gamepad_standard_mappings_linux.h" - -#include "content/common/gamepad_hardware_buffer.h" - -namespace content { - -namespace { - -// This defines our canonical mapping order for gamepad-like devices. If these -// items cannot all be satisfied, it is a case-by-case judgement as to whether -// it is better to leave the device unmapped, or to partially map it. In -// general, err towards leaving it *unmapped* so that content can handle -// appropriately. - -enum CanonicalButtonIndex { - kButtonPrimary, - kButtonSecondary, - kButtonTertiary, - kButtonQuaternary, - kButtonLeftShoulder, - kButtonRightShoulder, - kButtonLeftTrigger, - kButtonRightTrigger, - kButtonBackSelect, - kButtonStart, - kButtonLeftThumbstick, - kButtonRightThumbstick, - kButtonDpadUp, - kButtonDpadDown, - kButtonDpadLeft, - kButtonDpadRight, - kButtonMeta, - kNumButtons -}; - -enum CanonicalAxisIndex { - kAxisLeftStickX, - kAxisLeftStickY, - kAxisRightStickX, - kAxisRightStickY, - kNumAxes -}; - -float AxisToButton(float input) { - return (input + 1.f) / 2.f; -} - -float AxisNegativeAsButton(float input) { - return (input < -0.5f) ? 1.f : 0.f; -} - -float AxisPositiveAsButton(float input) { - return (input > 0.5f) ? 1.f : 0.f; -} - -void MapperXInputStyleGamepad( - const WebKit::WebGamepad& input, - WebKit::WebGamepad* mapped) { - *mapped = input; - mapped->buttons[kButtonLeftTrigger] = AxisToButton(input.axes[2]); - mapped->buttons[kButtonRightTrigger] = AxisToButton(input.axes[5]); - mapped->buttons[kButtonBackSelect] = input.buttons[6]; - mapped->buttons[kButtonStart] = input.buttons[7]; - mapped->buttons[kButtonLeftThumbstick] = input.buttons[9]; - mapped->buttons[kButtonRightThumbstick] = input.buttons[10]; - mapped->buttons[kButtonDpadUp] = AxisNegativeAsButton(input.axes[7]); - mapped->buttons[kButtonDpadDown] = AxisPositiveAsButton(input.axes[7]); - mapped->buttons[kButtonDpadLeft] = AxisNegativeAsButton(input.axes[6]); - mapped->buttons[kButtonDpadRight] = AxisPositiveAsButton(input.axes[6]); - mapped->buttons[kButtonMeta] = input.buttons[8]; - mapped->axes[kAxisRightStickX] = input.axes[3]; - mapped->axes[kAxisRightStickY] = input.axes[4]; - mapped->buttonsLength = kNumButtons; - mapped->axesLength = kNumAxes; -} - -void MapperMP8866( - const WebKit::WebGamepad& input, - WebKit::WebGamepad* mapped) { - *mapped = input; - mapped->buttons[kButtonPrimary] = input.buttons[2]; - mapped->buttons[kButtonTertiary] = input.buttons[3]; - mapped->buttons[kButtonQuaternary] = input.buttons[0]; - mapped->buttons[kButtonLeftShoulder] = input.buttons[6]; - mapped->buttons[kButtonRightShoulder] = input.buttons[7]; - mapped->buttons[kButtonLeftTrigger] = input.buttons[4]; - mapped->buttons[kButtonRightTrigger] = input.buttons[5]; - mapped->buttons[kButtonBackSelect] = input.buttons[9]; - mapped->buttons[kButtonStart] = input.buttons[8]; - mapped->buttons[kButtonDpadUp] = AxisNegativeAsButton(input.axes[5]); - mapped->buttons[kButtonDpadDown] = AxisPositiveAsButton(input.axes[5]); - mapped->buttons[kButtonDpadLeft] = AxisNegativeAsButton(input.axes[4]); - mapped->buttons[kButtonDpadRight] = AxisPositiveAsButton(input.axes[4]); - mapped->buttonsLength = kNumButtons - 1; // no Meta on this device - mapped->axesLength = kNumAxes; -} - -void MapperPlaystationSixAxis( - const WebKit::WebGamepad& input, - WebKit::WebGamepad* mapped) { - *mapped = input; - mapped->buttons[kButtonPrimary] = input.buttons[14]; - mapped->buttons[kButtonSecondary] = input.buttons[13]; - mapped->buttons[kButtonTertiary] = input.buttons[15]; - mapped->buttons[kButtonQuaternary] = input.buttons[12]; - mapped->buttons[kButtonLeftShoulder] = input.buttons[10]; - mapped->buttons[kButtonRightShoulder] = input.buttons[11]; - mapped->buttons[kButtonLeftTrigger] = AxisToButton(input.axes[12]); - mapped->buttons[kButtonRightTrigger] = AxisToButton(input.axes[13]); - mapped->buttons[kButtonBackSelect] = input.buttons[0]; - mapped->buttons[kButtonStart] = input.buttons[3]; - mapped->buttons[kButtonLeftThumbstick] = input.buttons[1]; - mapped->buttons[kButtonRightThumbstick] = input.buttons[2]; - mapped->buttons[kButtonDpadUp] = AxisToButton(input.axes[8]); - mapped->buttons[kButtonDpadDown] = AxisToButton(input.axes[10]); - mapped->buttons[kButtonDpadLeft] = input.buttons[7]; - mapped->buttons[kButtonDpadRight] = AxisToButton(input.axes[9]); - mapped->buttons[kButtonMeta] = input.buttons[16]; - - mapped->buttonsLength = kNumButtons; - mapped->axesLength = kNumAxes; -} - -struct MappingData { - const char* const vendor_id; - const char* const product_id; - GamepadStandardMappingFunction function; -} AvailableMappings[] = { - // http://www.linux-usb.org/usb.ids - { "045e", "028e", MapperXInputStyleGamepad }, // Xbox 360 Controller - { "045e", "028f", MapperXInputStyleGamepad }, // Xbox 360 Wireless Controller - { "046d", "c21d", MapperXInputStyleGamepad }, // Logitech F310 - { "046d", "c21e", MapperXInputStyleGamepad }, // Logitech F510 - { "046d", "c21f", MapperXInputStyleGamepad }, // Logitech F710 - { "054c", "0268", MapperPlaystationSixAxis }, // Playstation SIXAXIS - { "0925", "8866", MapperMP8866 }, // WiseGroup MP-8866 -}; - -} // namespace - -GamepadStandardMappingFunction GetGamepadStandardMappingFunction( - const base::StringPiece& vendor_id, - const base::StringPiece& product_id) { - for (size_t i = 0; i < arraysize(AvailableMappings); ++i) { - MappingData& item = AvailableMappings[i]; - if (vendor_id == item.vendor_id && product_id == item.product_id) - return item.function; - } - return NULL; -} - -} // namespace content diff --git a/content/browser/gamepad/gamepad_standard_mappings_linux.h b/content/browser/gamepad/gamepad_standard_mappings_linux.h deleted file mode 100644 index 6d06fc6..0000000 --- a/content/browser/gamepad/gamepad_standard_mappings_linux.h +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CONTENT_BROWSER_GAMEPAD_GAMEPAD_STANDARD_MAPPINGS_LINUX_H_ -#define CONTENT_BROWSER_GAMEPAD_GAMEPAD_STANDARD_MAPPINGS_LINUX_H_ - -#include "base/string_piece.h" - -namespace WebKit { -class WebGamepad; -} - -namespace content { - -typedef void (*GamepadStandardMappingFunction)( - const WebKit::WebGamepad& original, - WebKit::WebGamepad* mapped); - -GamepadStandardMappingFunction GetGamepadStandardMappingFunction( - const base::StringPiece& vendor_id, - const base::StringPiece& product_id); - -} // namespace content - -#endif // CONTENT_BROWSER_GAMEPAD_GAMEPAD_STANDARD_MAPPINGS_LINUX_H_ diff --git a/content/browser/gamepad/platform_data_fetcher.h b/content/browser/gamepad/platform_data_fetcher.h deleted file mode 100644 index b9f64af..0000000 --- a/content/browser/gamepad/platform_data_fetcher.h +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Define the default data fetcher that GamepadProvider will use if none is -// supplied. (GamepadPlatformDataFetcher). - -#ifndef CONTENT_BROWSER_GAMEPAD_PLATFORM_DATA_FETCHER_H_ -#define CONTENT_BROWSER_GAMEPAD_PLATFORM_DATA_FETCHER_H_ - -#if defined(OS_WIN) -#include "content/browser/gamepad/platform_data_fetcher_win.h" -#elif defined(OS_MACOSX) -#include "content/browser/gamepad/platform_data_fetcher_mac.h" -#elif defined(OS_LINUX) -#include "content/browser/gamepad/platform_data_fetcher_linux.h" -#endif - -namespace content { - -#if defined(OS_WIN) - -typedef GamepadPlatformDataFetcherWin GamepadPlatformDataFetcher; - -#elif defined(OS_MACOSX) - -typedef GamepadPlatformDataFetcherMac GamepadPlatformDataFetcher; - -#elif defined(OS_LINUX) - -typedef GamepadPlatformDataFetcherLinux GamepadPlatformDataFetcher; - -#else - -class GamepadDataFetcherEmpty : public GamepadDataFetcher { - public: - void GetGamepadData(WebKit::WebGamepads* pads, bool) { - pads->length = 0; - } -}; -typedef GamepadDataFetcherEmpty GamepadPlatformDataFetcher; - -#endif - -} // namespace content - -#endif // CONTENT_BROWSER_GAMEPAD_PLATFORM_DATA_FETCHER_H_ diff --git a/content/browser/gamepad/platform_data_fetcher_linux.cc b/content/browser/gamepad/platform_data_fetcher_linux.cc deleted file mode 100644 index 9c2a6bf..0000000 --- a/content/browser/gamepad/platform_data_fetcher_linux.cc +++ /dev/null @@ -1,228 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "content/browser/gamepad/platform_data_fetcher_linux.h" - -#include <dlfcn.h> -#include <fcntl.h> -#include <libudev.h> -#include <linux/joystick.h> -#include <sys/stat.h> -#include <sys/types.h> - -#include "base/debug/trace_event.h" -#include "base/eintr_wrapper.h" -#include "base/message_loop.h" -#include "base/string_number_conversions.h" -#include "base/stringprintf.h" -#include "base/string_util.h" -#include "base/utf_string_conversions.h" -#include "content/common/gamepad_hardware_buffer.h" - -namespace content { - -using WebKit::WebGamepad; -using WebKit::WebGamepads; - -GamepadPlatformDataFetcherLinux::GamepadPlatformDataFetcherLinux() { - for (size_t i = 0; i < arraysize(device_fds_); ++i) - device_fds_[i] = -1; - - udev_ = udev_new(); - - monitor_ = udev_monitor_new_from_netlink(udev_, "udev"); - udev_monitor_filter_add_match_subsystem_devtype(monitor_, "input", NULL); - udev_monitor_enable_receiving(monitor_); - monitor_fd_ = udev_monitor_get_fd(monitor_); - MessageLoopForIO::current()->WatchFileDescriptor(monitor_fd_, true, - MessageLoopForIO::WATCH_READ, &monitor_watcher_, this); - - EnumerateDevices(); -} - -GamepadPlatformDataFetcherLinux::~GamepadPlatformDataFetcherLinux() { - monitor_watcher_.StopWatchingFileDescriptor(); - udev_unref(udev_); - for (size_t i = 0; i < WebGamepads::itemsLengthCap; ++i) { - if (device_fds_[i] >= 0) - close(device_fds_[i]); - } -} - -void GamepadPlatformDataFetcherLinux::GetGamepadData(WebGamepads* pads, bool) { - TRACE_EVENT0("GAMEPAD", "GetGamepadData"); - - data_.length = WebGamepads::itemsLengthCap; - - // Update our internal state. - for (size_t i = 0; i < WebGamepads::itemsLengthCap; ++i) { - if (device_fds_[i] >= 0) { - ReadDeviceData(i); - } - } - - // Copy to the current state to the output buffer, using the mapping - // function, if there is one available. - pads->length = data_.length; - for (size_t i = 0; i < WebGamepads::itemsLengthCap; ++i) { - if (mappers_[i]) - mappers_[i](data_.items[i], &pads->items[i]); - else - pads->items[i] = data_.items[i]; - } -} - -void GamepadPlatformDataFetcherLinux::OnFileCanReadWithoutBlocking(int fd) { - // Events occur when devices attached to the system are added, removed, or - // change state. udev_monitor_receive_device() will return a device object - // representing the device which changed and what type of change occured. - DCHECK(monitor_fd_ == fd); - udev_device* dev = udev_monitor_receive_device(monitor_); - RefreshDevice(dev); - udev_device_unref(dev); -} - -void GamepadPlatformDataFetcherLinux::OnFileCanWriteWithoutBlocking(int fd) { -} - -bool GamepadPlatformDataFetcherLinux::IsGamepad( - udev_device* dev, - int& index, - std::string& path) { - if (!udev_device_get_property_value(dev, "ID_INPUT_JOYSTICK")) - return false; - - const char* node_path = udev_device_get_devnode(dev); - if (!node_path) - return false; - - static const char kJoystickRoot[] = "/dev/input/js"; - bool is_gamepad = - strncmp(kJoystickRoot, node_path, sizeof(kJoystickRoot) - 1) == 0; - if (is_gamepad) { - const int base_len = sizeof(kJoystickRoot) - 1; - if (!base::StringToInt(base::StringPiece( - &node_path[base_len], - strlen(node_path) - base_len), - &index)) - return false; - if (index < 0 || index >= static_cast<int>(WebGamepads::itemsLengthCap)) - return false; - path = std::string(node_path); - } - return is_gamepad; -} - -// Used during enumeration, and monitor notifications. -void GamepadPlatformDataFetcherLinux::RefreshDevice(udev_device* dev) { - int index; - std::string node_path; - if (IsGamepad(dev, index, node_path)) { - int& device_fd = device_fds_[index]; - WebGamepad& pad = data_.items[index]; - GamepadStandardMappingFunction& mapper = mappers_[index]; - - if (device_fd >= 0) - close(device_fd); - - // The device pointed to by dev contains information about the input - // device. In order to get the information about the USB device, get the - // parent device with the subsystem/devtype pair of "usb"/"usb_device". - // This function walks up the tree several levels. - dev = udev_device_get_parent_with_subsystem_devtype( - dev, - "usb", - "usb_device"); - if (!dev) { - // Unable to get device information, don't use this device. - device_fd = -1; - pad.connected = false; - return; - } - - device_fd = HANDLE_EINTR(open(node_path.c_str(), O_RDONLY | O_NONBLOCK)); - if (device_fd < 0) { - // Unable to open device, don't use. - pad.connected = false; - return; - } - - const char* vendor_id = udev_device_get_sysattr_value(dev, "idVendor"); - const char* product_id = udev_device_get_sysattr_value(dev, "idProduct"); - mapper = GetGamepadStandardMappingFunction(vendor_id, product_id); - - const char* manufacturer = - udev_device_get_sysattr_value(dev, "manufacturer"); - const char* product = udev_device_get_sysattr_value(dev, "product"); - - // Driver returns utf-8 strings here, so combine in utf-8 and then convert - // to WebUChar to build the id string. - std::string id; - if (mapper) { - id = base::StringPrintf("%s %s (STANDARD GAMEPAD)", - manufacturer, - product); - } else { - id = base::StringPrintf("%s %s (Vendor: %s Product: %s)", - manufacturer, - product, - vendor_id, - product_id); - } - TruncateUTF8ToByteSize(id, WebGamepad::idLengthCap - 1, &id); - string16 tmp16 = UTF8ToUTF16(id); - memset(pad.id, 0, sizeof(pad.id)); - tmp16.copy(pad.id, arraysize(pad.id) - 1); - - pad.connected = true; - } -} - -void GamepadPlatformDataFetcherLinux::EnumerateDevices() { - udev_enumerate* enumerate = udev_enumerate_new(udev_); - udev_enumerate_add_match_subsystem(enumerate, "input"); - udev_enumerate_scan_devices(enumerate); - - udev_list_entry* devices = udev_enumerate_get_list_entry(enumerate); - for (udev_list_entry* dev_list_entry = devices; - dev_list_entry != NULL; - dev_list_entry = udev_list_entry_get_next(dev_list_entry)) { - // Get the filename of the /sys entry for the device and create a - // udev_device object (dev) representing it - const char* path = udev_list_entry_get_name(dev_list_entry); - udev_device* dev = udev_device_new_from_syspath(udev_, path); - RefreshDevice(dev); - udev_device_unref(dev); - } - // Free the enumerator object - udev_enumerate_unref(enumerate); -} - -void GamepadPlatformDataFetcherLinux::ReadDeviceData(size_t index) { - int& fd = device_fds_[index]; - WebGamepad& pad = data_.items[index]; - DCHECK(fd >= 0); - - js_event event; - while (HANDLE_EINTR(read(fd, &event, sizeof(struct js_event)) > 0)) { - size_t item = event.number; - if (event.type & JS_EVENT_AXIS) { - if (item >= WebGamepad::axesLengthCap) - continue; - pad.axes[item] = event.value / 32767.f; - if (item >= pad.axesLength) - pad.axesLength = item + 1; - } else if (event.type & JS_EVENT_BUTTON) { - if (item >= WebGamepad::buttonsLengthCap) - continue; - pad.buttons[item] = event.value ? 1.0 : 0.0; - if (item >= pad.buttonsLength) - pad.buttonsLength = item + 1; - } - pad.timestamp = event.time; - } -} - - -} // namespace content diff --git a/content/browser/gamepad/platform_data_fetcher_linux.h b/content/browser/gamepad/platform_data_fetcher_linux.h deleted file mode 100644 index 3f395cf..0000000 --- a/content/browser/gamepad/platform_data_fetcher_linux.h +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CONTENT_BROWSER_GAMEPAD_DATA_FETCHER_LINUX_H_ -#define CONTENT_BROWSER_GAMEPAD_DATA_FETCHER_LINUX_H_ - -#include <string> - -#include "base/compiler_specific.h" -#include "base/message_pump_libevent.h" -#include "build/build_config.h" -#include "content/browser/gamepad/data_fetcher.h" -#include "content/browser/gamepad/gamepad_standard_mappings_linux.h" -#include "content/common/gamepad_hardware_buffer.h" - -extern "C" { -struct udev; -struct udev_device; -struct udev_monitor; -} - -namespace content { - -class GamepadPlatformDataFetcherLinux : - public GamepadDataFetcher, - public base::MessagePumpLibevent::Watcher { - public: - GamepadPlatformDataFetcherLinux(); - virtual ~GamepadPlatformDataFetcherLinux(); - - // GamepadDataFetcher: - virtual void GetGamepadData(WebKit::WebGamepads* pads, - bool devices_changed_hint) OVERRIDE; - - // base::MessagePump:Libevent::Watcher: - virtual void OnFileCanReadWithoutBlocking(int fd) OVERRIDE; - virtual void OnFileCanWriteWithoutBlocking(int fd) OVERRIDE; - - private: - bool IsGamepad(udev_device* dev, int& index, std::string& path); - void RefreshDevice(udev_device* dev); - void EnumerateDevices(); - void ReadDeviceData(size_t index); - - // libudev-related items, the main context, and the monitoring context to be - // notified about changes to device states. - udev* udev_; - udev_monitor* monitor_; - int monitor_fd_; - base::MessagePumpLibevent::FileDescriptorWatcher monitor_watcher_; - - // File descriptors for the /dev/input/js* devices. -1 if not in use. - int device_fds_[WebKit::WebGamepads::itemsLengthCap]; - - // Functions to map from device data to standard layout, if available. May - // be null if no mapping is available. - GamepadStandardMappingFunction mappers_[WebKit::WebGamepads::itemsLengthCap]; - - // Data that's returned to the consumer. - WebKit::WebGamepads data_; -}; - -} // namespace content - -#endif // CONTENT_BROWSER_GAMEPAD_DATA_FETCHER_LINUX_H_ |