<?xml version="1.0" encoding="UTF-8"?>
<protocol name="weston_touch_calibration">

  <copyright>
    Copyright 2017-2018 Collabora, Ltd.
    Copyright 2017-2018 General Electric Company

    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="weston_touch_calibration" version="1">
    <description summary="weston touchscreen calibration interface">
      This is the global interface for calibrating a touchscreen input
      coordinate transformation. It is recommended to make this interface
      privileged.

      This interface can be used by a client to show a calibration pattern and
      receive uncalibrated touch coordinates, facilitating the computation of
      a calibration transformation that will align actual touch positions
      on screen with their expected coordinates.

      Immediately after being bound by a client, the compositor sends the
      touch_device events.

      The client chooses a touch device from the touch_device events, creates a
      wl_surface and then a weston_touch_calibrator for the wl_surface and the
      chosen touch device. The client waits for the compositor to send a
      configure event before it starts drawing the first calibration pattern.
      After receiving the configure event, the client will iterate drawing a
      pattern, getting touch input via weston_touch_calibrator, and converting
      pixel coordinates to expected touch coordinates with
      weston_touch_calibrator.convert until it has enough correspondences to
      compute the calibration transformation or the compositor cancels the
      calibration.

      Once the client has successfully computed a new calibration, it can use
      weston_touch_calibration.save request to load the new calibration into
      the compositor. The compositor may take this new calibration into use and
      may write it into persistent storage.
    </description>

    <enum name="error">
      <description summary="global interface errors"/>
      <entry name="invalid_surface" value="0"
             summary="the given wl_surface already has a role"/>
      <entry name="invalid_device" value="1"
             summary="the given device is not valid"/>
      <entry name="already_exists" value="2"
             summary="a calibrator has already been created"/>
    </enum>

    <request name="destroy" type="destructor">
      <description summary="unbind">
	Destroy the binding to the global interface, does not affect any
	objects already created through this interface.
      </description>
    </request>

    <request name="create_calibrator">
      <description summary="give the calibrator role to a surface">
	This gives the calibrator role to the surface and ties it with the
	given touch input device.

	If the surface already has a role, then invalid_surface error is raised.

	If the device string is not one advertised with touch_device event's
	device argument, then invalid_device error is raised.

	If a weston_touch_calibrator protocol object exists in the compositor
	already, then already_exists error is raised. This limitation is
	compositor-wide and not specific to any particular client.
      </description>
      <arg name="surface" type="object" interface="wl_surface"
           summary="the surface to give the role to"/>
      <arg name="device" type="string" summary="the touch device to calibrate"/>
      <arg name="cal" type="new_id" interface="weston_touch_calibrator"
           summary="a new calibrator object"/>
    </request>

    <request name="save">
      <description summary="save calibration for a touch device">
	This request asks the compositor to save the calibration data for the
	given touch input device. The compositor may ignore this request.

	If the device string is not one advertised with touch_device event's
	device argument, then invalid_device error is raised.

	The array must contain exactly six 'float' (the 32-bit floating
	point format used by the C language on the system) numbers. For a 3x3
	calibration matrix in the form
	@code
		( a b c )
		( d e f )
		( 0 0 1 )
	@endcode
	the array must contain the values { a, b, c, d, e, f }. For the
	definition of the coordinate spaces, see
	libinput_device_config_calibration_set_matrix().
      </description>
      <arg name="device" type="string" summary="the target touch device"/>
      <arg name="matrix" type="array" summary="the new calibration matrix"/>
    </request>

    <event name="touch_device">
      <description summary="advertise a touchscreen input device">
	When a client binds to weston_touch_calibration, one touch_device event
	is sent for each touchscreen that is available to be calibrated. This
	is the only time the event is sent. Touch devices added in the
	compositor will not generate events for existing
	weston_touch_calibration objects.

	An event carries the touch device identification and the associated
	output or head (display connector) name.

	On platforms using udev, the device identification is the udev sys
	path. It is an absolute path and starts with the sys mount point.
      </description>
      <arg name="device" type="string"
           summary="the touch device identification"/>
      <arg name="head" type="string"
           summary="name of the head or display connector"/>
    </event>
  </interface>

  <interface name="weston_touch_calibrator" version="1">
    <description summary="calibrator surface for a specific touch device">
      On creation, this object is tied to a specific touch device. The
      compositor sends a configure event which the client must obey with the
      associated wl_surface.

      Once the client has committed content to the surface, the compositor can
      grab the touch input device, prevent it from emitting normal touch
      events, show the surface on the correct output, and relay input events
      from the touch device via this protocol object.

      Touch events from other touch devices than the one tied to this object
      must generate wrong_touch events on at least touch-down and must not
      generate normal or calibration touch events.

      At any time, the compositor can choose to cancel the calibration
      procedure by sending the cancel_calibration event. This should also be
      used if the touch device disappears or anything else prevents the
      calibration from continuing on the compositor side.

      If the wl_surface is destroyed, the compositor must cancel the
      calibration.

      The touch event coordinates and conversion results are delivered in
      calibration units. The calibration units cover the device coordinate
      range exactly. Calibration units are in the closed interval [0.0, 1.0]
      mapped into 32-bit unsigned integers. An integer can be converted into a
      real value by dividing by 2^32-1. A calibration matrix must be computed
      from the [0.0, 1.0] real values, but the matrix elements do not need to
      fall into that range.
    </description>

    <enum name="error">
      <description summary="calibrator object errors"/>
      <entry name="bad_size" value="0"
             summary="surface size does not match"/>
      <entry name="not_mapped" value="1"
             summary="requested operation is not possible without mapping the surface"/>
      <entry name="bad_coordinates" value="2"
             summary="surface-local coordinates are out of bounds"/>
    </enum>

    <request name="destroy" type="destructor">
      <description summary="destroy the calibrator">
	This unmaps the surface if it was mapped. The input device grab
	is dropped, if it was present. The surface loses its role as a
	calibrator.
      </description>
    </request>

    <request name="convert">
      <description summary="convert from surface to raw coordinates">
	This request asks the compositor to convert the surface-local
	coordinates into the expected touch input coordinates appropriate for
	the associated touch device. The intention is that a client uses this
	request to convert marker positions that the user is supposed to touch
	during calibration.

	If the compositor has cancelled the calibration, the conversion result
	shall be zeroes and no errors will be raised.

	The coordinates given as arguments to this request are relative to
	the associated wl_surface.

	If a client asks for conversion before it has committed valid
	content to the wl_surface, the not_mapped error is raised.

	If the coordinates x, y are outside of the wl_surface content, the
	bad_coordinates error is raised.
      </description>
      <arg name="x" type="int" summary="surface-local X coordinate"/>
      <arg name="y" type="int" summary="surface-local Y coordinate"/>
      <arg name="reply" type="new_id" interface="weston_touch_coordinate"
           summary="object delivering the result"/>
    </request>

    <event name="configure">
      <description summary="surface size">
	This event tells the client what size to make the surface. The client
	must obey the size exactly on the next commit with a wl_buffer.

	This event shall be sent once as a response to creating a
	weston_touch_calibrator object.
      </description>
      <arg name="width" type="int" summary="surface width"/>
      <arg name="height" type="int" summary="surface height"/>
    </event>

    <event name="cancel_calibration">
      <description summary="cancel the calibration procedure">
	This is sent when the compositor wants to cancel the calibration and
	drop the touch device grab. The compositor unmaps the surface, if it
	was mapped.

	The weston_touch_calibrator object will not send any more events. The
	client should destroy it.
      </description>
    </event>

    <event name="invalid_touch">
      <description summary="a user touch that cannot be used for calibration">
	For whatever reason, a touch event resulting from a user action cannot
	be used for calibration. The client should show feedback to the user
	that the touch was rejected.

	Possible causes for this event include the user touching a wrong
	touchscreen when there are multiple ones present. This is particularly
	useful when the touchscreens are cloned and there is no other way to
	identify which screen the user should be touching.

	Another cause could be a touch device that sends coordinates beyond its
	declared range. If motion takes a touch point outside the range, the
	compositor should also send 'cancel' event to undo the touch-down.
      </description>
    </event>

    <!-- touch events copied from wl_touch interface -->
    <event name="down">
      <description summary="touch down event and beginning of a touch sequence">
	A new touch point has appeared on the surface. This touch point is
	assigned a unique ID. Future events from this touch point reference
	this ID. The ID ceases to be valid after a touch up event and may be
	reused in the future.

	For the coordinate units, see weston_touch_calibrator.
      </description>
      <arg name="time" type="uint" summary="timestamp with millisecond granularity"/>
      <arg name="id" type="int" summary="the unique ID of this touch point"/>
      <arg name="x" type="uint" summary="x coordinate in calibration units"/>
      <arg name="y" type="uint" summary="y coordinate in calibration units"/>
    </event>

    <event name="up">
      <description summary="end of a touch event sequence">
	The touch point has disappeared. No further events will be sent for
	this touch point and the touch point's ID is released and may be
	reused in a future touch down event.
      </description>
      <arg name="time" type="uint" summary="timestamp with millisecond granularity"/>
      <arg name="id" type="int" summary="the unique ID of this touch point"/>
    </event>

    <event name="motion">
      <description summary="update of touch point coordinates">
	A touch point has changed coordinates.

	For the coordinate units, see weston_touch_calibrator.
      </description>
      <arg name="time" type="uint" summary="timestamp with millisecond granularity"/>
      <arg name="id" type="int" summary="the unique ID of this touch point"/>
      <arg name="x" type="uint" summary="x coordinate in calibration units"/>
      <arg name="y" type="uint" summary="y coordinate in calibration units"/>
    </event>

    <event name="frame">
      <description summary="end of touch frame event">
	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.

	A wl_touch.frame terminates at least one event but otherwise no
	guarantee is provided about the set of events within a frame. A client
	must assume that any state not updated in a frame is unchanged from the
	previously known state.
      </description>
    </event>

    <event name="cancel">
      <description summary="touch session cancelled">
	Sent if the compositor decides the touch stream is a global
	gesture. No further events are sent to the clients from that
	particular gesture. Touch cancellation applies to all touch points
	currently active on this client's surface. The client is
	responsible for finalizing the touch points, future touch points on
	this surface may reuse the touch point ID.
      </description>
    </event>
    <!-- END of touch events copied from wl_touch interface -->

  </interface>

  <interface name="weston_touch_coordinate" version="1">
    <description summary="coordinate conversion reply"/>

    <!-- no destructor request defined, no requests possible -->

    <event name="result">
      <description summary="coordinates in raw touch space">
	This event returns the conversion result from surface coordinates to
	the expected touch device coordinates.

	For details, see weston_touch_calibrator.convert. For the coordinate
	units, see weston_touch_calibrator.

	This event destroys the weston_touch_coordinate object.
      </description>
      <arg name="x" type="uint" summary="x coordinate in calibration units"/>
      <arg name="y" type="uint" summary="y coordinate in calibration units"/>
    </event>
  </interface>
</protocol>
