protocol: Add gaming input protocol

Submitted by Jingkui Wang on Jan. 17, 2017, 9:15 p.m.

Details

Message ID 1484687707-454-1-git-send-email-jkwang@google.com
State New
Headers show
Series "protocol: Add gaming input protocol" ( rev: 1 ) in Wayland

Not browsing as part of any series.

Commit Message

Jingkui Wang Jan. 17, 2017, 9:15 p.m.
Gaming input protocol works as an extension to support gaming devices.
Currently, it only supports game pad.

Gamepad protocol complies W3C Gamepad API at:
https://w3c.github.io/gamepad/#remapping

Signed-off-by: Dennis Kempin <denniskempin@chromium.org>
Signed-off-by: Jingkui Wang <jkwang@google.com>
---
 Makefile.am                                        |   1 +
 unstable/gaming-input/README                       |   4 +
 unstable/gaming-input/gaming-input-unstable-v1.xml | 150 +++++++++++++++++++++
 3 files changed, 155 insertions(+)
 create mode 100644 unstable/gaming-input/README
 create mode 100644 unstable/gaming-input/gaming-input-unstable-v1.xml

Patch hide | download patch | download mbox

diff --git a/Makefile.am b/Makefile.am
index e693afa..9e65775 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -12,6 +12,7 @@  unstable_protocols =								\
 	unstable/tablet/tablet-unstable-v2.xml			                \
 	unstable/xdg-foreign/xdg-foreign-unstable-v1.xml			\
 	unstable/idle-inhibit/idle-inhibit-unstable-v1.xml			\
+	unstable/gaming-input/gaming-input-unstable-v1.xml			\
 	$(NULL)
 
 stable_protocols =								\
diff --git a/unstable/gaming-input/README b/unstable/gaming-input/README
new file mode 100644
index 0000000..261f5ba
--- /dev/null
+++ b/unstable/gaming-input/README
@@ -0,0 +1,4 @@ 
+Gaming input protocol
+
+Maintainers:
+Dennis Kempin <denniskempin@chromium.org>
diff --git a/unstable/gaming-input/gaming-input-unstable-v1.xml b/unstable/gaming-input/gaming-input-unstable-v1.xml
new file mode 100644
index 0000000..c1ce437
--- /dev/null
+++ b/unstable/gaming-input/gaming-input-unstable-v1.xml
@@ -0,0 +1,150 @@ 
+<?xml version="1.0" encoding="UTF-8"?>
+<protocol name="gaming_input_unstable_v1">
+
+  <copyright>
+    Copyright 2016 The Chromium Authors.
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice (including the next
+    paragraph) shall be included in all copies or substantial portions of the
+    Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+    THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+  </copyright>
+
+  <interface name="zcr_gaming_input_v1" version="1">
+    <description summary="extends wl_seat with gaming input devices">
+      A global interface to provide gaming input devices for a given seat.
+
+      Currently only gamepad devices are supported.
+
+      Warning! The protocol described in this file is experimental and
+      backward incompatible changes may be made. Backward compatible changes
+      may be added together with the corresponding uinterface version bump.
+      Backward incompatible changes are done by bumping the version number in
+      the protocol and uinterface names and resetting the interface version.
+      Once the protocol is to be declared stable, the 'z' prefix and the
+      version number in the protocol and interface names are removed and the
+      interface version number is reset.
+    </description>
+
+    <request name="get_gaming_seat">
+      <description summary="get a gaming seat">
+        Get a gaming seat object for a given seat. Gaming seat provides access
+        to gaming devices
+      </description>
+      <arg name="gaming_seat" type="new_id" interface="zcr_gaming_seat_v1"/>
+      <arg name="seat" type="object" interface="wl_seat"/>
+    </request>
+
+    <request name="destroy" type="destructor">
+      <description summary="release the memory for the gaming input object"/>
+      Destroy gaming_input object. Objects created from this object are
+      unaffected and should be destroyed separately.
+    </request>
+  </interface>
+
+  <interface name="zcr_gaming_seat_v1" version="1">
+    <description summary="controller object for all gaming devices of a seat">
+      An object that provides access to all the gaming devices of a seat.
+      When a gamepad is connected, the compositor will send gamepad_added event.
+    </description>
+
+    <request name="destroy" type="destructor">
+      <description summary="release the memory for the gaming seat object"/>
+      Destroy gaming_seat object. Objects created from this object are
+      unaffected and should be destroyed separately.
+    </request>
+
+    <event name="gamepad_added">
+      <description summary="gamepad added event">
+        Notification that there is gamepad connected at this seat.
+      </description>
+      <arg name="gamepad" type="new_id" interface="zcr_gamepad_v1" summary="new connected gamepad"/>
+    </event>
+  </interface>
+
+  <interface name="zcr_gamepad_v1" version="1">
+    <description summary="gamepad input device">
+      The zcr_gamepad_v1 interface represents one or more gamepad input devices,
+      which are reported as a normalized 'Standard Gamepad' as it is specified
+      by the W3C Gamepad API at: https://w3c.github.io/gamepad/#remapping
+    </description>
+
+    <request name="destroy" type="destructor">
+      <description summary="destroy gamepad object"/>
+    </request>
+
+    <event name="removed">
+      <description summary="gamepad removed">
+        Removed event is send when the gamepad is disconnected. The client should
+        expect no more event and call destroy.
+
+        This event cannot be used as destructor as requests (e.g. vibration) might
+        be added to this interface.
+      </description>
+    </event>
+
+    <event name="axis">
+      <description summary="axis change event">
+        Notification of axis change.
+
+        The axis id specifies which axis has changed as defined by the W3C
+        'Standard Gamepad'.
+
+        The value is calibrated and normalized to the -1 to 1 range.
+      </description>
+      <arg name="time" type="uint" summary="timestamp with millisecond granularity"/>
+      <arg name="axis" type="uint" summary="axis that produced this event"/>
+      <arg name="value" type="fixed" summary="new value of axis"/>
+    </event>
+
+    <enum name="button_state">
+      <description summary="physical button state">
+        Describes the physical state of a button that produced the button
+        event.
+      </description>
+      <entry name="released" value="0" summary="the button is not pressed"/>
+      <entry name="pressed" value="1" summary="the button is pressed"/>
+    </enum>
+
+    <event name="button">
+      <description summary="Gamepad button changed">
+        Notification of button change.
+
+        The button id specifies which button has changed as defined by the W3C
+        'Standard Gamepad'.
+
+        A button can have a digital and an analog value. The analog value is
+        normalized to a 0 to 1 range.
+        If a button does not provide an analog value, it will be derived from
+        the digital state.
+      </description>
+      <arg name="time" type="uint" summary="timestamp with millisecond granularity"/>
+      <arg name="button" type="uint" summary="id of button"/>
+      <arg name="state" type="uint" enum="button_state" summary="digital state of the button"/>
+      <arg name="analog" type="fixed" summary="analog value of the button"/>
+    </event>
+
+    <event name="frame">
+      <description summary="Notifies end of a series of gamepad changes.">
+        Indicates the end of a set of events that logically belong together.
+        A client is expected to accumulate the data in all events within the
+        frame before proceeding.
+      </description>
+      <arg name="time" type="uint" summary="timestamp with millisecond granularity"/>
+    </event>
+  </interface>
+</protocol>