1// Copyright (c) 2012 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#ifndef PPAPI_SHARED_IMPL_PPB_GAMEPAD_SHARED_H_
6#define PPAPI_SHARED_IMPL_PPB_GAMEPAD_SHARED_H_
7
8#include "base/atomicops.h"
9#include "base/strings/string16.h"
10#include "ppapi/c/ppb_gamepad.h"
11#include "ppapi/shared_impl/ppapi_shared_export.h"
12
13namespace ppapi {
14
15// TODO(brettw) when we remove the non-IPC-based gamepad implementation, this
16// code should all move into the GamepadResource.
17
18#pragma pack(push, 1)
19
20// This must match the definition of blink::Gamepad. The GamepadHost unit test
21// has some compile asserts to validate this.
22struct WebKitGamepad {
23    static const size_t kIdLengthCap = 128;
24    static const size_t kAxesLengthCap = 16;
25    static const size_t kButtonsLengthCap = 32;
26
27    // Is there a gamepad connected at this index?
28    bool connected;
29
30    // Device identifier (based on manufacturer, model, etc.).
31    char16 id[kIdLengthCap];
32
33    // Monotonically increasing value referring to when the data were last
34    // updated.
35    unsigned long long timestamp;
36
37    // Number of valid entries in the axes array.
38    unsigned axes_length;
39
40    // Normalized values representing axes, in the range [-1..1].
41    float axes[kAxesLengthCap];
42
43    // Number of valid entries in the buttons array.
44    unsigned buttons_length;
45
46    // Normalized values representing buttons, in the range [0..1].
47    float buttons[kButtonsLengthCap];
48};
49
50// This must match the definition of blink::Gamepads. The GamepadHost unit
51// test has some compile asserts to validate this.
52struct WebKitGamepads {
53    static const size_t kItemsLengthCap = 4;
54
55    // Number of valid entries in the items array.
56    unsigned length;
57
58    // Gamepad data for N separate gamepad devices.
59    WebKitGamepad items[kItemsLengthCap];
60};
61
62// This is the structure store in shared memory. It must match
63// content/common/gamepad_hardware_buffer.h. The GamepadHost unit test has
64// some compile asserts to validate this.
65struct ContentGamepadHardwareBuffer {
66  base::subtle::Atomic32 sequence;
67  WebKitGamepads buffer;
68};
69
70#pragma pack(pop)
71
72PPAPI_SHARED_EXPORT void ConvertWebKitGamepadData(
73    const WebKitGamepads& webkit_data,
74    PP_GamepadsSampleData* output_data);
75
76}  // namespace ppapi
77
78#endif  // PPAPI_SHARED_IMPL_PPB_GAMEPAD_SHARED_H_
79