| <?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> |