| Index: device/gamepad/gamepad_pad_state_provider.h
|
| diff --git a/device/gamepad/gamepad_pad_state_provider.h b/device/gamepad/gamepad_pad_state_provider.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..1c2503220460c93f5487eaec069829f12f5d5915
|
| --- /dev/null
|
| +++ b/device/gamepad/gamepad_pad_state_provider.h
|
| @@ -0,0 +1,97 @@
|
| +// Copyright 2016 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 DEVICE_GAMEPAD_GAMEPAD_PAD_STATE_PROVIDER_H_
|
| +#define DEVICE_GAMEPAD_GAMEPAD_PAD_STATE_PROVIDER_H_
|
| +
|
| +#include <stdint.h>
|
| +
|
| +#include <limits>
|
| +#include <memory>
|
| +
|
| +#include "device/gamepad/gamepad_export.h"
|
| +#include "device/gamepad/gamepad_standard_mappings.h"
|
| +#include "third_party/WebKit/public/platform/WebGamepad.h"
|
| +
|
| +namespace device {
|
| +
|
| +class GamepadDataFetcher;
|
| +
|
| +enum GamepadSource {
|
| + GAMEPAD_SOURCE_NONE = 0,
|
| + GAMEPAD_SOURCE_ANDROID,
|
| + GAMEPAD_SOURCE_LINUX_UDEV,
|
| + GAMEPAD_SOURCE_MAC_HID,
|
| + GAMEPAD_SOURCE_MAC_XBOX,
|
| + GAMEPAD_SOURCE_TEST,
|
| + GAMEPAD_SOURCE_WIN_XINPUT,
|
| + GAMEPAD_SOURCE_WIN_RAW,
|
| +};
|
| +
|
| +enum GamepadActiveState {
|
| + GAMEPAD_INACTIVE = 0,
|
| + GAMEPAD_ACTIVE,
|
| + GAMEPAD_NEWLY_ACTIVE,
|
| +};
|
| +
|
| +struct PadState {
|
| + // Which data fetcher provided this gamepad's data.
|
| + GamepadSource source;
|
| + // Data fetcher-specific identifier for this gamepad.
|
| + int source_id;
|
| +
|
| + // Indicates whether or not the gamepad is actively being updated
|
| + GamepadActiveState active_state;
|
| +
|
| + // Gamepad data, unmapped.
|
| + blink::WebGamepad data;
|
| +
|
| + // Functions to map from device data to standard layout, if available. May
|
| + // be null if no mapping is available or needed.
|
| + GamepadStandardMappingFunction mapper;
|
| +
|
| + // Sanitization masks
|
| + // axis_mask and button_mask are bitfields that represent the reset state of
|
| + // each input. If a button or axis has ever reported 0 in the past the
|
| + // corresponding bit will be set to 1.
|
| +
|
| + // If we ever increase the max axis count this will need to be updated.
|
| + static_assert(blink::WebGamepad::axesLengthCap <=
|
| + std::numeric_limits<uint32_t>::digits,
|
| + "axis_mask is not large enough");
|
| + uint32_t axis_mask;
|
| +
|
| + // If we ever increase the max button count this will need to be updated.
|
| + static_assert(blink::WebGamepad::buttonsLengthCap <=
|
| + std::numeric_limits<uint32_t>::digits,
|
| + "button_mask is not large enough");
|
| + uint32_t button_mask;
|
| +};
|
| +
|
| +class DEVICE_GAMEPAD_EXPORT GamepadPadStateProvider {
|
| + public:
|
| + GamepadPadStateProvider();
|
| + virtual ~GamepadPadStateProvider();
|
| +
|
| + // Gets a PadState object for the given source and id. If the device hasn't
|
| + // been encountered before one of the remaining slots will be reserved for it.
|
| + // If no slots are available will return NULL.
|
| + PadState* GetPadState(GamepadSource source, int source_id);
|
| +
|
| + protected:
|
| + void ClearPadState(PadState& state);
|
| +
|
| + void InitializeDataFetcher(GamepadDataFetcher* fetcher);
|
| +
|
| + void MapAndSanitizeGamepadData(PadState* pad_state,
|
| + blink::WebGamepad* pad,
|
| + bool sanitize);
|
| +
|
| + // Tracks the state of each gamepad slot.
|
| + std::unique_ptr<PadState[]> pad_states_;
|
| +};
|
| +
|
| +} // namespace device
|
| +
|
| +#endif // DEVICE_GAMEPAD_GAMEPAD_PAD_STATE_PROVIDER_H_
|
|
|