summaryrefslogtreecommitdiffstats
path: root/ppapi/shared_impl/ppb_gamepad_shared.h
diff options
context:
space:
mode:
authorbrettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-10 07:06:39 +0000
committerbrettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-10 07:06:39 +0000
commit00c0d0437c9f6f8896df580bcbeffd022d1cf878 (patch)
tree0177c166101ddd30916ee2eaf50d409d2e86ace2 /ppapi/shared_impl/ppb_gamepad_shared.h
parent7b64f86e2c50c086dba2d3aba2b1a0d22208f072 (diff)
downloadchromium_src-00c0d0437c9f6f8896df580bcbeffd022d1cf878.zip
chromium_src-00c0d0437c9f6f8896df580bcbeffd022d1cf878.tar.gz
chromium_src-00c0d0437c9f6f8896df580bcbeffd022d1cf878.tar.bz2
Implement the gamepad API in the IPC proxy
This does some reworking of the gamepad system to make it possible to hook in (previously it assumed that it was only talking to renderers) and I did some cleanup. Gamepad files were renamed to match the classes, and I did a bunch of test infrastructure work. IMPORTANT BEHAVIOR CHANGE: This changes the Web gamepad API to report all gamepad data as soon as any of them are interacted with. This is what we need to do for Pepper anyway (since it gets all or none of the share memory) and I think makes more sense for most consumers anyway. I separated out the user gesture detection code into a place where it can be used in the browser process as well, and exposed functionality in the gamepad provider to be notified when a user gesture happens. The existing gamepad test was disabled and had bitrotted. This fixes it. Review URL: https://chromiumcodereview.appspot.com/10912062 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@155676 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ppapi/shared_impl/ppb_gamepad_shared.h')
-rw-r--r--ppapi/shared_impl/ppb_gamepad_shared.h78
1 files changed, 78 insertions, 0 deletions
diff --git a/ppapi/shared_impl/ppb_gamepad_shared.h b/ppapi/shared_impl/ppb_gamepad_shared.h
new file mode 100644
index 0000000..b3ab882
--- /dev/null
+++ b/ppapi/shared_impl/ppb_gamepad_shared.h
@@ -0,0 +1,78 @@
+// 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 PPAPI_SHARED_IMPL_PPB_GAMEPAD_SHARED_H_
+#define PPAPI_SHARED_IMPL_PPB_GAMEPAD_SHARED_H_
+
+#include "base/atomicops.h"
+#include "base/string16.h"
+#include "ppapi/c/ppb_gamepad.h"
+#include "ppapi/shared_impl/ppapi_shared_export.h"
+
+namespace ppapi {
+
+// TODO(brettw) when we remove the non-IPC-based gamepad implementation, this
+// code should all move into the GamepadResource.
+
+#pragma pack(push, 1)
+
+// This must match the definition of WebKit::Gamepad. The GamepadHost unit test
+// has some compile asserts to validate this.
+struct WebKitGamepad {
+ static const size_t kIdLengthCap = 128;
+ static const size_t kAxesLengthCap = 16;
+ static const size_t kButtonsLengthCap = 32;
+
+ // Is there a gamepad connected at this index?
+ bool connected;
+
+ // Device identifier (based on manufacturer, model, etc.).
+ char16 id[kIdLengthCap];
+
+ // Monotonically increasing value referring to when the data were last
+ // updated.
+ unsigned long long timestamp;
+
+ // Number of valid entries in the axes array.
+ unsigned axes_length;
+
+ // Normalized values representing axes, in the range [-1..1].
+ float axes[kAxesLengthCap];
+
+ // Number of valid entries in the buttons array.
+ unsigned buttons_length;
+
+ // Normalized values representing buttons, in the range [0..1].
+ float buttons[kButtonsLengthCap];
+};
+
+// This must match the definition of WebKit::Gamepads. The GamepadHost unit
+// test has some compile asserts to validate this.
+struct WebKitGamepads {
+ static const size_t kItemsLengthCap = 4;
+
+ // Number of valid entries in the items array.
+ unsigned length;
+
+ // Gamepad data for N separate gamepad devices.
+ WebKitGamepad items[kItemsLengthCap];
+};
+
+// This is the structure store in shared memory. It must match
+// content/common/gamepad_hardware_buffer.h. The GamepadHost unit test has
+// some compile asserts to validate this.
+struct ContentGamepadHardwareBuffer {
+ base::subtle::Atomic32 sequence;
+ WebKitGamepads buffer;
+};
+
+#pragma pack(pop)
+
+PPAPI_SHARED_EXPORT void ConvertWebKitGamepadData(
+ const WebKitGamepads& webkit_data,
+ PP_GamepadsSampleData* output_data);
+
+} // namespace ppapi
+
+#endif // PPAPI_SHARED_IMPL_PPB_GAMEPAD_SHARED_H_