Home | History | Annotate | Download | only in tablet
      1 <?xml version="1.0" encoding="UTF-8"?>
      2 <protocol name="tablet_unstable_v1">
      3 
      4   <copyright>
      5     Copyright 2014  Stephen "Lyude" Chandler Paul
      6     Copyright 2015-2016  Red Hat, Inc.
      7 
      8     Permission is hereby granted, free of charge, to any person
      9     obtaining a copy of this software and associated documentation files
     10     (the "Software"), to deal in the Software without restriction,
     11     including without limitation the rights to use, copy, modify, merge,
     12     publish, distribute, sublicense, and/or sell copies of the Software,
     13     and to permit persons to whom the Software is furnished to do so,
     14     subject to the following conditions:
     15 
     16     The above copyright notice and this permission notice (including the
     17     next paragraph) shall be included in all copies or substantial
     18     portions of the Software.
     19 
     20     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
     21     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
     22     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
     23     NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
     24     BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
     25     ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
     26     CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
     27     SOFTWARE.
     28   </copyright>
     29 
     30   <description summary="Wayland protocol for graphics tablets">
     31     This description provides a high-level overview of the interplay between
     32     the interfaces defined this protocol. For details, see the protocol
     33     specification.
     34 
     35     More than one tablet may exist, and device-specifics matter. Tablets are
     36     not represented by a single virtual device like wl_pointer. A client
     37     binds to the tablet manager object which is just a proxy object. From
     38     that, the client requests wp_tablet_manager.get_tablet_seat(wl_seat)
     39     and that returns the actual interface that has all the tablets. With
     40     this indirection, we can avoid merging wp_tablet into the actual Wayland
     41     protocol, a long-term benefit.
     42 
     43     The wp_tablet_seat sends a "tablet added" event for each tablet
     44     connected. That event is followed by descriptive events about the
     45     hardware; currently that includes events for name, vid/pid and
     46     a wp_tablet.path event that describes a local path. This path can be
     47     used to uniquely identify a tablet or get more information through
     48     libwacom. Emulated or nested tablets can skip any of those, e.g. a
     49     virtual tablet may not have a vid/pid. The sequence of descriptive
     50     events is terminated by a wp_tablet.done event to signal that a client
     51     may now finalize any initialization for that tablet.
     52 
     53     Events from tablets require a tool in proximity. Tools are also managed
     54     by the tablet seat; a "tool added" event is sent whenever a tool is new
     55     to the compositor. That event is followed by a number of descriptive
     56     events about the hardware; currently that includes capabilities,
     57     hardware id and serial number, and tool type. Similar to the tablet
     58     interface, a wp_tablet_tool.done event is sent to terminate that initial
     59     sequence.
     60 
     61     Any event from a tool happens on the wp_tablet_tool interface. When the
     62     tool gets into proximity of the tablet, a proximity_in event is sent on
     63     the wp_tablet_tool interface, listing the tablet and the surface. That
     64     event is followed by a motion event with the coordinates. After that,
     65     it's the usual motion, axis, button, etc. events. The protocol's
     66     serialisation means events are grouped by wp_tablet_tool.frame events.
     67 
     68     Two special events (that don't exist in X) are down and up. They signal
     69     "tip touching the surface". For tablets without real proximity
     70     detection, the sequence is: proximity_in, motion, down, frame.
     71 
     72     When the tool leaves proximity, a proximity_out event is sent. If any
     73     button is still down, a button release event is sent before this
     74     proximity event. These button events are sent in the same frame as the
     75     proximity event to signal to the client that the buttons were held when
     76     the tool left proximity.
     77 
     78     If the tool moves out of the surface but stays in proximity (i.e.
     79     between windows), compositor-specific grab policies apply. This usually
     80     means that the proximity-out is delayed until all buttons are released.
     81 
     82     Moving a tool physically from one tablet to the other has no real effect
     83     on the protocol, since we already have the tool object from the "tool
     84     added" event. All the information is already there and the proximity
     85     events on both tablets are all a client needs to reconstruct what
     86     happened.
     87 
     88     Some extra axes are normalized, i.e. the client knows the range as
     89     specified in the protocol (e.g. [0, 65535]), the granularity however is
     90     unknown. The current normalized axes are pressure, distance, and slider.
     91 
     92     Other extra axes are in physical units as specified in the protocol.
     93     The current extra axes with physical units are tilt, rotation and
     94     wheel rotation.
     95 
     96     Since tablets work independently of the pointer controlled by the mouse,
     97     the focus handling is independent too and controlled by proximity.
     98     The wp_tablet_tool.set_cursor request sets a tool-specific cursor.
     99     This cursor surface may be the same as the mouse cursor, and it may be
    100     the same across tools but it is possible to be more fine-grained. For
    101     example, a client may set different cursors for the pen and eraser.
    102 
    103     Tools are generally independent of tablets and it is
    104     compositor-specific policy when a tool can be removed. Common approaches
    105     will likely include some form of removing a tool when all tablets the
    106     tool was used on are removed.
    107 
    108     Warning! The protocol described in this file is experimental and
    109     backward incompatible changes may be made. Backward compatible changes
    110     may be added together with the corresponding interface version bump.
    111     Backward incompatible changes are done by bumping the version number in
    112     the protocol and interface names and resetting the interface version.
    113     Once the protocol is to be declared stable, the 'z' prefix and the
    114     version number in the protocol and interface names are removed and the
    115     interface version number is reset.
    116   </description>
    117 
    118   <interface name="zwp_tablet_manager_v1" version="1">
    119     <description summary="controller object for graphic tablet devices">
    120       An object that provides access to the graphics tablets available on this
    121       system. All tablets are associated with a seat, to get access to the
    122       actual tablets, use wp_tablet_manager.get_tablet_seat.
    123     </description>
    124 
    125     <request name="get_tablet_seat">
    126       <description summary="get the tablet seat">
    127 	Get the wp_tablet_seat object for the given seat. This object
    128 	provides access to all graphics tablets in this seat.
    129       </description>
    130       <arg name="tablet_seat" type="new_id" interface="zwp_tablet_seat_v1"/>
    131       <arg name="seat" type="object" interface="wl_seat" summary="The wl_seat object to retrieve the tablets for" />
    132     </request>
    133 
    134     <request name="destroy" type="destructor">
    135       <description summary="release the memory for the tablet manager object">
    136 	Destroy the wp_tablet_manager object. Objects created from this
    137 	object are unaffected and should be destroyed separately.
    138       </description>
    139     </request>
    140   </interface>
    141 
    142   <interface name="zwp_tablet_seat_v1" version="1">
    143     <description summary="controller object for graphic tablet devices of a seat">
    144       An object that provides access to the graphics tablets available on this
    145       seat. After binding to this interface, the compositor sends a set of
    146       wp_tablet_seat.tablet_added and wp_tablet_seat.tool_added events.
    147     </description>
    148 
    149     <request name="destroy" type="destructor">
    150       <description summary="release the memory for the tablet seat object">
    151 	Destroy the wp_tablet_seat object. Objects created from this
    152 	object are unaffected and should be destroyed separately.
    153       </description>
    154     </request>
    155 
    156     <event name="tablet_added">
    157       <description summary="new device notification">
    158 	This event is sent whenever a new tablet becomes available on this
    159 	seat. This event only provides the object id of the tablet, any
    160 	static information about the tablet (device name, vid/pid, etc.) is
    161 	sent through the wp_tablet interface.
    162       </description>
    163       <arg name="id" type="new_id" interface="zwp_tablet_v1" summary="the newly added graphics tablet"/>
    164     </event>
    165 
    166     <event name="tool_added">
    167       <description summary="a new tool has been used with a tablet">
    168 	This event is sent whenever a tool that has not previously been used
    169 	with a tablet comes into use. This event only provides the object id
    170 	of the tool; any static information about the tool (capabilities,
    171 	type, etc.) is sent through the wp_tablet_tool interface.
    172       </description>
    173       <arg name="id" type="new_id" interface="zwp_tablet_tool_v1" summary="the newly added tablet tool"/>
    174     </event>
    175   </interface>
    176 
    177   <interface name="zwp_tablet_tool_v1" version="1">
    178     <description summary="a physical tablet tool">
    179       An object that represents a physical tool that has been, or is
    180       currently in use with a tablet in this seat. Each wp_tablet_tool
    181       object stays valid until the client destroys it; the compositor
    182       reuses the wp_tablet_tool object to indicate that the object's
    183       respective physical tool has come into proximity of a tablet again.
    184 
    185       A wp_tablet_tool object's relation to a physical tool depends on the
    186       tablet's ability to report serial numbers. If the tablet supports
    187       this capability, then the object represents a specific physical tool
    188       and can be identified even when used on multiple tablets.
    189 
    190       A tablet tool has a number of static characteristics, e.g. tool type,
    191       hardware_serial and capabilities. These capabilities are sent in an
    192       event sequence after the wp_tablet_seat.tool_added event before any
    193       actual events from this tool. This initial event sequence is
    194       terminated by a wp_tablet_tool.done event.
    195 
    196       Tablet tool events are grouped by wp_tablet_tool.frame events.
    197       Any events received before a wp_tablet_tool.frame event should be
    198       considered part of the same hardware state change.
    199     </description>
    200 
    201     <request name="set_cursor">
    202       <description summary="set the tablet tool's surface">
    203 	Sets the surface of the cursor used for this tool on the given
    204 	tablet. This request only takes effect if the tool is in proximity
    205 	of one of the requesting client's surfaces or the surface parameter
    206 	is the current pointer surface. If there was a previous surface set
    207 	with this request it is replaced. If surface is NULL, the cursor
    208 	image is hidden.
    209 
    210 	The parameters hotspot_x and hotspot_y define the position of the
    211 	pointer surface relative to the pointer location. Its top-left corner
    212 	is always at (x, y) - (hotspot_x, hotspot_y), where (x, y) are the
    213 	coordinates of the pointer location, in surface-local coordinates.
    214 
    215 	On surface.attach requests to the pointer surface, hotspot_x and
    216 	hotspot_y are decremented by the x and y parameters passed to the
    217 	request. Attach must be confirmed by wl_surface.commit as usual.
    218 
    219 	The hotspot can also be updated by passing the currently set pointer
    220 	surface to this request with new values for hotspot_x and hotspot_y.
    221 
    222 	The current and pending input regions of the wl_surface are cleared,
    223 	and wl_surface.set_input_region is ignored until the wl_surface is no
    224 	longer used as the cursor. When the use as a cursor ends, the current
    225 	and pending input regions become undefined, and the wl_surface is
    226 	unmapped.
    227 
    228 	This request gives the surface the role of a cursor. The role
    229 	assigned by this request is the same as assigned by
    230 	wl_pointer.set_cursor meaning the same surface can be
    231 	used both as a wl_pointer cursor and a wp_tablet cursor. If the
    232 	surface already has another role, it raises a protocol error.
    233 	The surface may be used on multiple tablets and across multiple
    234 	seats.
    235       </description>
    236       <arg name="serial" type="uint" summary="serial of the enter event"/>
    237       <arg name="surface" type="object" interface="wl_surface" allow-null="true"/>
    238       <arg name="hotspot_x" type="int" summary="surface-local x coordinate"/>
    239       <arg name="hotspot_y" type="int" summary="surface-local y coordinate"/>
    240     </request>
    241 
    242     <request name="destroy" type="destructor">
    243       <description summary="destroy the tool object">
    244 	This destroys the client's resource for this tool object.
    245       </description>
    246     </request>
    247 
    248     <enum name="type">
    249       <description summary="a physical tool type">
    250 	Describes the physical type of a tool. The physical type of a tool
    251 	generally defines its base usage.
    252 
    253 	The mouse tool represents a mouse-shaped tool that is not a relative
    254 	device but bound to the tablet's surface, providing absolute
    255 	coordinates.
    256 
    257 	The lens tool is a mouse-shaped tool with an attached lens to
    258 	provide precision focus.
    259       </description>
    260       <entry name="pen" value="0x140" summary="Pen"/>
    261       <entry name="eraser" value="0x141" summary="Eraser"/>
    262       <entry name="brush" value="0x142" summary="Brush"/>
    263       <entry name="pencil" value="0x143" summary="Pencil"/>
    264       <entry name="airbrush" value="0x144" summary="Airbrush"/>
    265       <entry name="finger" value="0x145" summary="Finger"/>
    266       <entry name="mouse" value="0x146" summary="Mouse"/>
    267       <entry name="lens" value="0x147" summary="Lens"/>
    268     </enum>
    269 
    270     <event name="type">
    271       <description summary="tool type">
    272 	The tool type is the high-level type of the tool and usually decides
    273 	the interaction expected from this tool.
    274 
    275 	This event is sent in the initial burst of events before the
    276 	wp_tablet_tool.done event.
    277       </description>
    278       <arg name="tool_type" type="uint" enum="type" summary="the physical tool type"/>
    279     </event>
    280 
    281     <event name="hardware_serial">
    282       <description summary="unique hardware serial number of the tool">
    283 	If the physical tool can be identified by a unique 64-bit serial
    284 	number, this event notifies the client of this serial number.
    285 
    286 	If multiple tablets are available in the same seat and the tool is
    287 	uniquely identifiable by the serial number, that tool may move
    288 	between tablets.
    289 
    290 	Otherwise, if the tool has no serial number and this event is
    291 	missing, the tool is tied to the tablet it first comes into
    292 	proximity with. Even if the physical tool is used on multiple
    293 	tablets, separate wp_tablet_tool objects will be created, one per
    294 	tablet.
    295 
    296 	This event is sent in the initial burst of events before the
    297 	wp_tablet_tool.done event.
    298       </description>
    299       <arg name="hardware_serial_hi" type="uint" summary="the unique serial number of the tool, most significant bits"/>
    300       <arg name="hardware_serial_lo" type="uint" summary="the unique serial number of the tool, least significant bits"/>
    301     </event>
    302 
    303     <event name="hardware_id_wacom">
    304       <description summary="hardware id notification in Wacom's format">
    305 	This event notifies the client of a hardware id available on this tool.
    306 
    307 	The hardware id is a device-specific 64-bit id that provides extra
    308 	information about the tool in use, beyond the wl_tool.type
    309 	enumeration. The format of the id is specific to tablets made by
    310 	Wacom Inc. For example, the hardware id of a Wacom Grip
    311 	Pen (a stylus) is 0x802.
    312 
    313 	This event is sent in the initial burst of events before the
    314 	wp_tablet_tool.done event.
    315       </description>
    316       <arg name="hardware_id_hi" type="uint" summary="the hardware id, most significant bits"/>
    317       <arg name="hardware_id_lo" type="uint" summary="the hardware id, least significant bits"/>
    318     </event>
    319 
    320     <enum name="capability">
    321       <description summary="capability flags for a tool">
    322 	Describes extra capabilities on a tablet.
    323 
    324 	Any tool must provide x and y values, extra axes are
    325 	device-specific.
    326       </description>
    327       <entry name="tilt" value="1" summary="Tilt axes"/>
    328       <entry name="pressure" value="2" summary="Pressure axis"/>
    329       <entry name="distance" value="3" summary="Distance axis"/>
    330       <entry name="rotation" value="4" summary="Z-rotation axis"/>
    331       <entry name="slider" value="5" summary="Slider axis"/>
    332       <entry name="wheel" value="6" summary="Wheel axis"/>
    333     </enum>
    334 
    335     <event name="capability">
    336       <description summary="tool capability notification">
    337 	This event notifies the client of any capabilities of this tool,
    338 	beyond the main set of x/y axes and tip up/down detection.
    339 
    340 	One event is sent for each extra capability available on this tool.
    341 
    342 	This event is sent in the initial burst of events before the
    343 	wp_tablet_tool.done event.
    344       </description>
    345       <arg name="capability" type="uint" enum="capability" summary="the capability"/>
    346     </event>
    347 
    348     <event name="done">
    349       <description summary="tool description events sequence complete">
    350 	This event signals the end of the initial burst of descriptive
    351 	events. A client may consider the static description of the tool to
    352 	be complete and finalize initialization of the tool.
    353       </description>
    354     </event>
    355 
    356     <event name="removed">
    357       <description summary="tool removed">
    358 	This event is sent when the tool is removed from the system and will
    359 	send no further events. Should the physical tool come back into
    360 	proximity later, a new wp_tablet_tool object will be created.
    361 
    362 	It is compositor-dependent when a tool is removed. A compositor may
    363 	remove a tool on proximity out, tablet removal or any other reason.
    364 	A compositor may also keep a tool alive until shutdown.
    365 
    366 	If the tool is currently in proximity, a proximity_out event will be
    367 	sent before the removed event. See wp_tablet_tool.proximity_out for
    368 	the handling of any buttons logically down.
    369 
    370 	When this event is received, the client must wp_tablet_tool.destroy
    371 	the object.
    372       </description>
    373     </event>
    374 
    375     <event name="proximity_in">
    376       <description summary="proximity in event">
    377 	Notification that this tool is focused on a certain surface.
    378 
    379 	This event can be received when the tool has moved from one surface to
    380 	another, or when the tool has come back into proximity above the
    381 	surface.
    382 
    383 	If any button is logically down when the tool comes into proximity,
    384 	the respective button event is sent after the proximity_in event but
    385 	within the same frame as the proximity_in event.
    386       </description>
    387       <arg name="serial" type="uint"/>
    388       <arg name="tablet" type="object" interface="zwp_tablet_v1" summary="The tablet the tool is in proximity of"/>
    389       <arg name="surface" type="object" interface="wl_surface" summary="The current surface the tablet tool is over"/>
    390     </event>
    391 
    392     <event name="proximity_out">
    393       <description summary="proximity out event">
    394 	Notification that this tool has either left proximity, or is no
    395 	longer focused on a certain surface.
    396 
    397 	When the tablet tool leaves proximity of the tablet, button release
    398 	events are sent for each button that was held down at the time of
    399 	leaving proximity. These events are sent before the proximity_out
    400 	event but within the same wp_tablet.frame.
    401 
    402 	If the tool stays within proximity of the tablet, but the focus
    403 	changes from one surface to another, a button release event may not
    404 	be sent until the button is actually released or the tool leaves the
    405 	proximity of the tablet.
    406       </description>
    407     </event>
    408 
    409     <event name="down">
    410       <description summary="tablet tool is making contact">
    411 	Sent whenever the tablet tool comes in contact with the surface of the
    412 	tablet.
    413 
    414 	If the tool is already in contact with the tablet when entering the
    415 	input region, the client owning said region will receive a
    416 	wp_tablet.proximity_in event, followed by a wp_tablet.down
    417 	event and a wp_tablet.frame event.
    418 
    419 	Note that this event describes logical contact, not physical
    420 	contact. On some devices, a compositor may not consider a tool in
    421 	logical contact until a minimum physical pressure threshold is
    422 	exceeded.
    423       </description>
    424       <arg name="serial" type="uint"/>
    425     </event>
    426 
    427     <event name="up">
    428       <description summary="tablet tool is no longer making contact">
    429 	Sent whenever the tablet tool stops making contact with the surface of
    430 	the tablet, or when the tablet tool moves out of the input region
    431 	and the compositor grab (if any) is dismissed.
    432 
    433 	If the tablet tool moves out of the input region while in contact
    434 	with the surface of the tablet and the compositor does not have an
    435 	ongoing grab on the surface, the client owning said region will
    436 	receive a wp_tablet.up event, followed by a wp_tablet.proximity_out
    437 	event and a wp_tablet.frame event. If the compositor has an ongoing
    438 	grab on this device, this event sequence is sent whenever the grab
    439 	is dismissed in the future.
    440 
    441 	Note that this event describes logical contact, not physical
    442 	contact. On some devices, a compositor may not consider a tool out
    443 	of logical contact until physical pressure falls below a specific
    444 	threshold.
    445       </description>
    446     </event>
    447 
    448     <event name="motion">
    449       <description summary="motion event">
    450 	Sent whenever a tablet tool moves.
    451       </description>
    452       <arg name="x" type="fixed" summary="surface-local x coordinate"/>
    453       <arg name="y" type="fixed" summary="surface-local y coordinate"/>
    454     </event>
    455 
    456     <event name="pressure">
    457       <description summary="pressure change event">
    458 	Sent whenever the pressure axis on a tool changes. The value of this
    459 	event is normalized to a value between 0 and 65535.
    460 
    461 	Note that pressure may be nonzero even when a tool is not in logical
    462 	contact. See the down and up events for more details.
    463       </description>
    464       <arg name="pressure" type="uint" summary="The current pressure value"/>
    465     </event>
    466 
    467     <event name="distance">
    468       <description summary="distance change event">
    469 	Sent whenever the distance axis on a tool changes. The value of this
    470 	event is normalized to a value between 0 and 65535.
    471 
    472 	Note that distance may be nonzero even when a tool is not in logical
    473 	contact. See the down and up events for more details.
    474       </description>
    475       <arg name="distance" type="uint" summary="The current distance value"/>
    476     </event>
    477 
    478     <event name="tilt">
    479       <description summary="tilt change event">
    480 	Sent whenever one or both of the tilt axes on a tool change. Each tilt
    481 	value is in 0.01 of a degree, relative to the z-axis of the tablet.
    482 	The angle is positive when the top of a tool tilts along the
    483 	positive x or y axis.
    484       </description>
    485       <arg name="tilt_x" type="int" summary="The current value of the X tilt axis"/>
    486       <arg name="tilt_y" type="int" summary="The current value of the Y tilt axis"/>
    487     </event>
    488 
    489     <event name="rotation">
    490       <description summary="z-rotation change event">
    491 	Sent whenever the z-rotation axis on the tool changes. The
    492 	rotation value is in 0.01 of a degree clockwise from the tool's
    493 	logical neutral position.
    494       </description>
    495       <arg name="degrees" type="int" summary="The current rotation of the Z axis"/>
    496     </event>
    497 
    498     <event name="slider">
    499       <description summary="Slider position change event">
    500 	Sent whenever the slider position on the tool changes. The
    501 	value is normalized between -65535 and 65535, with 0 as the logical
    502 	neutral position of the slider.
    503 
    504 	The slider is available on e.g. the Wacom Airbrush tool.
    505       </description>
    506       <arg name="position" type="int" summary="The current position of slider"/>
    507     </event>
    508 
    509     <event name="wheel">
    510       <description summary="Wheel delta event">
    511 	Sent whenever the wheel on the tool emits an event. This event
    512 	contains two values for the same axis change. The degrees value is
    513 	in 0.01 of a degree in the same orientation as the
    514 	wl_pointer.vertical_scroll axis. The clicks value is in discrete
    515 	logical clicks of the mouse wheel. This value may be zero if the
    516 	movement of the wheel was less than one logical click.
    517 
    518 	Clients should choose either value and avoid mixing degrees and
    519 	clicks. The compositor may accumulate values smaller than a logical
    520 	click and emulate click events when a certain threshold is met.
    521 	Thus, wl_tablet_tool.wheel events with non-zero clicks values may
    522 	have different degrees values.
    523       </description>
    524       <arg name="degrees" type="int" summary="The wheel delta in 0.01 of a degree"/>
    525       <arg name="clicks" type="int" summary="The wheel delta in discrete clicks"/>
    526     </event>
    527 
    528     <enum name="button_state">
    529       <description summary="physical button state">
    530 	Describes the physical state of a button that produced the button event.
    531       </description>
    532       <entry name="released" value="0" summary="button is not pressed"/>
    533       <entry name="pressed" value="1" summary="button is pressed"/>
    534     </enum>
    535 
    536     <event name="button">
    537       <description summary="button event">
    538 	Sent whenever a button on the tool is pressed or released.
    539 
    540 	If a button is held down when the tool moves in or out of proximity,
    541 	button events are generated by the compositor. See
    542 	wp_tablet_tool.proximity_in and wp_tablet_tool.proximity_out for
    543 	details.
    544       </description>
    545       <arg name="serial" type="uint"/>
    546       <arg name="button" type="uint" summary="The button whose state has changed"/>
    547       <arg name="state" type="uint" enum="button_state" summary="Whether the button was pressed or released"/>
    548     </event>
    549 
    550     <event name="frame">
    551       <description summary="frame event">
    552 	Marks the end of a series of axis and/or button updates from the
    553 	tablet. The Wayland protocol requires axis updates to be sent
    554 	sequentially, however all events within a frame should be considered
    555 	one hardware event.
    556       </description>
    557       <arg name="time" type="uint" summary="The time of the event with millisecond granularity"/>
    558     </event>
    559 
    560     <enum name="error">
    561       <entry name="role" value="0" summary="given wl_surface has another role"/>
    562     </enum>
    563   </interface>
    564 
    565   <interface name="zwp_tablet_v1" version="1">
    566     <description summary="graphics tablet device">
    567       The wp_tablet interface represents one graphics tablet device. The
    568       tablet interface itself does not generate events; all events are
    569       generated by wp_tablet_tool objects when in proximity above a tablet.
    570 
    571       A tablet has a number of static characteristics, e.g. device name and
    572       pid/vid. These capabilities are sent in an event sequence after the
    573       wp_tablet_seat.tablet_added event. This initial event sequence is
    574       terminated by a wp_tablet.done event.
    575     </description>
    576 
    577     <request name="destroy" type="destructor">
    578       <description summary="destroy the tablet object">
    579 	This destroys the client's resource for this tablet object.
    580       </description>
    581     </request>
    582 
    583     <event name="name">
    584       <description summary="tablet device name">
    585 	This event is sent in the initial burst of events before the
    586 	wp_tablet.done event.
    587       </description>
    588       <arg name="name" type="string" summary="the device name"/>
    589     </event>
    590 
    591     <event name="id">
    592       <description summary="tablet device USB vendor/product id">
    593 	This event is sent in the initial burst of events before the
    594 	wp_tablet.done event.
    595       </description>
    596       <arg name="vid" type="uint" summary="USB vendor id"/>
    597       <arg name="pid" type="uint" summary="USB product id"/>
    598     </event>
    599 
    600     <event name="path">
    601       <description summary="path to the device">
    602 	A system-specific device path that indicates which device is behind
    603 	this wp_tablet. This information may be used to gather additional
    604 	information about the device, e.g. through libwacom.
    605 
    606 	A device may have more than one device path. If so, multiple
    607 	wp_tablet.path events are sent. A device may be emulated and not
    608 	have a device path, and in that case this event will not be sent.
    609 
    610 	The format of the path is unspecified, it may be a device node, a
    611 	sysfs path, or some other identifier. It is up to the client to
    612 	identify the string provided.
    613 
    614 	This event is sent in the initial burst of events before the
    615 	wp_tablet.done event.
    616       </description>
    617       <arg name="path" type="string" summary="path to local device"/>
    618     </event>
    619 
    620     <event name="done">
    621       <description summary="tablet description events sequence complete">
    622 	This event is sent immediately to signal the end of the initial
    623 	burst of descriptive events. A client may consider the static
    624 	description of the tablet to be complete and finalize initialization
    625 	of the tablet.
    626       </description>
    627     </event>
    628 
    629     <event name="removed">
    630       <description summary="tablet removed event">
    631 	Sent when the tablet has been removed from the system. When a tablet
    632 	is removed, some tools may be removed.
    633 
    634 	When this event is received, the client must wp_tablet.destroy
    635 	the object.
    636       </description>
    637     </event>
    638   </interface>
    639 
    640 </protocol>
    641