Get timestamps and ids working in WK2 gamepads (and test them!)
[WebKit-https.git] / Source / WebKit2 / Shared / Gamepad / GamepadData.cpp
1 /*
2  * Copyright (C) 2016 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #include "config.h"
27 #include "GamepadData.h"
28
29 #if ENABLE(GAMEPAD)
30
31 #include "ArgumentCoders.h"
32 #include <wtf/text/StringBuilder.h>
33
34 namespace WebKit {
35
36 GamepadData::GamepadData(unsigned index, const Vector<double>& axisValues, const Vector<double>& buttonValues)
37     : m_index(index)
38     , m_axisValues(axisValues)
39     , m_buttonValues(buttonValues)
40 {
41 }
42
43 GamepadData::GamepadData(unsigned index, const String& id, const Vector<double>& axisValues, const Vector<double>& buttonValues)
44     : m_index(index)
45     , m_id(id)
46     , m_axisValues(axisValues)
47     , m_buttonValues(buttonValues)
48 {
49 }
50
51 void GamepadData::encode(IPC::Encoder& encoder) const
52 {
53     encoder << m_isNull;
54     if (m_isNull)
55         return;
56
57     encoder << m_index << m_id << m_axisValues << m_buttonValues;
58 }
59
60 bool GamepadData::decode(IPC::Decoder& decoder, GamepadData& data)
61 {
62     if (!decoder.decode(data.m_isNull))
63         return false;
64
65     if (data.m_isNull)
66         return true;
67
68     if (!decoder.decode(data.m_index))
69         return false;
70
71     if (!decoder.decode(data.m_id))
72         return false;
73
74     if (!decoder.decode(data.m_axisValues))
75         return false;
76
77     if (!decoder.decode(data.m_buttonValues))
78         return false;
79
80     return true;
81 }
82
83 #if !LOG_DISABLED
84 String GamepadData::loggingString() const
85 {
86     StringBuilder builder;
87
88     builder.appendNumber(m_axisValues.size());
89     builder.appendLiteral(" axes, ");
90     builder.appendNumber(m_buttonValues.size());
91     builder.appendLiteral(" buttons\n");
92
93     for (size_t i = 0; i < m_axisValues.size(); ++i) {
94         builder.appendLiteral(" Axis ");
95         builder.appendNumber(i);
96         builder.appendLiteral(": ");
97         builder.appendNumber(m_axisValues[i]);
98     }
99
100     builder.append('\n');
101     for (size_t i = 0; i < m_buttonValues.size(); ++i) {
102         builder.appendLiteral(" Button ");
103         builder.appendNumber(i);
104         builder.appendLiteral(": ");
105         builder.appendNumber(m_buttonValues[i]);
106     }
107
108     return builder.toString();
109 }
110 #endif
111
112 } // namespace WebKit
113
114 #endif // ENABLE(GAMEPAD)