1// Copyright (C) 2011, Google Inc. All rights reserved.
2//
3// Redistribution and use in source and binary forms, with or without
4// modification, are permitted provided that the following conditions are met:
5//
6// 1. Redistributions of source code must retain the above copyright
7//    notice, this list of conditions and the following disclaimer.
8// 2. Redistributions in binary form must reproduce the above copyright
9//    notice, this list of conditions and the following disclaimer in the
10//    documentation and/or other materials provided with the distribution.
11//
12// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND
13// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
14// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
15// ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE
16// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
17// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
18// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
19// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
20// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
21// OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
22// DAMAGE.
23
24#ifndef WebGamepad_h
25#define WebGamepad_h
26
27#include "WebCommon.h"
28
29#if WEBKIT_IMPLEMENTATION
30#include <wtf/Assertions.h>
31#endif
32
33namespace WebKit {
34
35#pragma pack(push, 1)
36
37// This structure is intentionally POD and fixed size so that it can be shared
38// memory between hardware polling threads and the rest of the browser. See
39// also WebGamepads.h.
40class WebGamepad {
41public:
42    static const size_t idLengthCap = 128;
43    static const size_t axesLengthCap = 16;
44    static const size_t buttonsLengthCap = 32;
45
46    WebGamepad()
47        : connected(false)
48        , timestamp(0)
49        , axesLength(0)
50        , buttonsLength(0)
51    {
52        id[0] = 0;
53    }
54
55    // Is there a gamepad connected at this index?
56    bool connected;
57
58    // Device identifier (based on manufacturer, model, etc.).
59    WebUChar id[idLengthCap];
60
61    // Monotonically increasing value referring to when the data were last
62    // updated.
63    unsigned long long timestamp;
64
65    // Number of valid entries in the axes array.
66    unsigned axesLength;
67
68    // Normalized values representing axes, in the range [-1..1].
69    float axes[axesLengthCap];
70
71    // Number of valid entries in the buttons array.
72    unsigned buttonsLength;
73
74    // Normalized values representing buttons, in the range [0..1].
75    float buttons[buttonsLengthCap];
76};
77
78#if WEBKIT_IMPLEMENTATION
79COMPILE_ASSERT(sizeof(WebGamepad) == 465, WebGamepad_has_wrong_size);
80#endif
81
82#pragma pack(pop)
83
84}
85
86#endif // WebGamepad_h
87