<link rel="stylesheet" href="../style.css" />

[TOC]
# fuchsia.ui.test.input

<div class="fidl-version-div"><span class="fidl-attribute fidl-version">Added: 9</span></div>


## **PROTOCOLS**

## Keyboard {#Keyboard}
*Defined in [fuchsia.ui.test.input/text.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.test.input/text.fidl;l=10)*
<p>A tool to inject keyboard events into Input Pipeline.</p>
<p>Please extend as necessary.</p>


### SimulateUsAsciiTextEntry {#Keyboard.SimulateUsAsciiTextEntry}

<p>Simulates input of the set of keystrokes required to type <code>text</code>,
as if on a US QWERTY keyboard.</p>
<p>US ASCII text get mapped to the corresponding key presses.
For example <code>a</code> gets mapped into a press and
a followup release of the key <code>a</code> on the US QWERTY keyboard.  Also,
<code>A</code> gets mapped into a press of the <code>Shift</code> key, followed by a press
and release of <code>a</code>.</p>
<p>For convenience, the <code>\n</code> and <code>\t</code> get converted into <code>Enter</code> and <code>Tab</code>
keys respectively.</p>



#### Request {#Keyboard.SimulateUsAsciiTextEntry_Request}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>payload</code></td>
            <td>
                <code><a class='link' href='#KeyboardSimulateUsAsciiTextEntryRequest'>KeyboardSimulateUsAsciiTextEntryRequest</a></code>
            </td>
        </tr>
</table>


#### Response {#Keyboard.SimulateUsAsciiTextEntry_Response}

&lt;EMPTY&gt;

## KeyboardInputListener {#KeyboardInputListener}
*Defined in [fuchsia.ui.test.input/text.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.test.input/text.fidl;l=39)*
<p>A tool for client applications to report text input to interested parties
(e.g. a test fixture).</p>
<p>NOTE: The reporter is the <em>client</em> of this service.</p>
<p>Canonical usage is for a test to inject text via fuchsia.ui.test.input.Keyboad,
and wait for the client under test to report back that it received the injected
text via fuchsia.ui.test.input.KeyboardInputListener.</p>
<p>NOTE: This protocol is implemented by OOT code. When adding new methods here
the methods MUST be annotated with <code>@transitional</code> at introduction time.</p>


### ReportReady {#KeyboardInputListener.ReportReady}

<p>Notify that the client is ready to receive text input. Clients that need
to complete their setup to be able to continue with testing should call
this method, so that the listener can wait until they are ready to
proceed with testing.</p>
<div class="fidl-version-div"><span class="fidl-attribute fidl-version">Added: 10</span></div>



#### Request {#KeyboardInputListener.ReportReady_Request}

&lt;EMPTY&gt;


#### Response {#KeyboardInputListener.ReportReady_Response}

&lt;EMPTY&gt;

### ReportTextInput {#KeyboardInputListener.ReportTextInput}

<p>Notify the listener of the text string generated by the set of key events
received by the application.</p>



#### Request {#KeyboardInputListener.ReportTextInput_Request}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>payload</code></td>
            <td>
                <code><a class='link' href='#KeyboardInputListenerReportTextInputRequest'>KeyboardInputListenerReportTextInputRequest</a></code>
            </td>
        </tr>
</table>


## MediaButtonsDevice {#MediaButtonsDevice}
*Defined in [fuchsia.ui.test.input/media_buttons.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.test.input/media_buttons.fidl;l=12)*
<p>A tool to inject media button events into Input Pipeline.</p>
<p>Please extend as necessary.</p>


### SimulateButtonPress {#MediaButtonsDevice.SimulateButtonPress}

<p>Simulates a button press and release on the requested button on the
device.</p>



#### Request {#MediaButtonsDevice.SimulateButtonPress_Request}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>payload</code></td>
            <td>
                <code><a class='link' href='#MediaButtonsDeviceSimulateButtonPressRequest'>MediaButtonsDeviceSimulateButtonPressRequest</a></code>
            </td>
        </tr>
</table>


#### Response {#MediaButtonsDevice.SimulateButtonPress_Response}

&lt;EMPTY&gt;

## Mouse {#Mouse}
*Defined in [fuchsia.ui.test.input/mouse.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.test.input/mouse.fidl;l=50)*
<p>A tool to inject mouse events into Input Pipeline.</p>
<p>Please extend as necessary.</p>


### SimulateMouseEvent {#Mouse.SimulateMouseEvent}

<p>Injects an input report corresponding to the event specified.</p>
<p>NOTE: the <code>movement</code> parameters have a range of [-1000, 1000],
and the <code>scroll</code> parameters have a range of [-100, 100].</p>



#### Request {#Mouse.SimulateMouseEvent_Request}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>payload</code></td>
            <td>
                <code><a class='link' href='#MouseSimulateMouseEventRequest'>MouseSimulateMouseEventRequest</a></code>
            </td>
        </tr>
</table>


#### Response {#Mouse.SimulateMouseEvent_Response}

&lt;EMPTY&gt;

## MouseInputListener {#MouseInputListener}
*Defined in [fuchsia.ui.test.input/mouse.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.test.input/mouse.fidl;l=85)*
<p>A tool for applications to report touch input to interested parties (e.g. a test
fixture).</p>


### ReportMouseInput {#MouseInputListener.ReportMouseInput}

<p>Report that component under test has received expected input.</p>



#### Request {#MouseInputListener.ReportMouseInput_Request}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>payload</code></td>
            <td>
                <code><a class='link' href='#MouseInputListenerReportMouseInputRequest'>MouseInputListenerReportMouseInputRequest</a></code>
            </td>
        </tr>
</table>


## Registry {#Registry}
*Defined in [fuchsia.ui.test.input/registry.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.test.input/registry.fidl;l=39)*
<p>*** This protocol must not be used in production. ***</p>
<p>Enables clients to register fake input devices, which can be used to
inject input events directly into Input Pipeline.</p>


### RegisterKeyboard {#Registry.RegisterKeyboard}

<p>Enables the client to inject keyboard events using the corresponding
client end to <code>device</code>.</p>
<p>Clients are allowed at most one in-flight call at a time. Subsequent
calls must wait until the acknowledgment returns. Non-compliance
results in channel closure.</p>
<p>The <code>fuchsia.ui.test.input.Keyboard</code> channel will remain open even
if the <code>Registry</code> connection closes.</p>



#### Request {#Registry.RegisterKeyboard_Request}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>payload</code></td>
            <td>
                <code><a class='link' href='#RegistryRegisterKeyboardRequest'>RegistryRegisterKeyboardRequest</a></code>
            </td>
        </tr>
</table>


#### Response {#Registry.RegisterKeyboard_Response}

&lt;EMPTY&gt;

### RegisterMediaButtonsDevice {#Registry.RegisterMediaButtonsDevice}

<p>Enables the client to inject media buttons events using the
corresponding client end to <code>device</code>.</p>
<p>Clients are allowed at most one in-flight call at a time. Subsequent
calls must wait until the acknowledgment returns. Non-compliance
results in channel closure.</p>
<p>The <code>fuchsia.ui.test.input.MediaButtonsDevice</code> channel will remain open
even if the <code>Registry</code> connection closes.</p>



#### Request {#Registry.RegisterMediaButtonsDevice_Request}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>payload</code></td>
            <td>
                <code><a class='link' href='#RegistryRegisterMediaButtonsDeviceRequest'>RegistryRegisterMediaButtonsDeviceRequest</a></code>
            </td>
        </tr>
</table>


#### Response {#Registry.RegisterMediaButtonsDevice_Response}

&lt;EMPTY&gt;

### RegisterMouse {#Registry.RegisterMouse}

<p>Enables the client to inject mouse events using the corresponding
client end to <code>device</code>.</p>
<p>Clients are allowed at most one in-flight call at a time. Subsequent
calls must wait until the acknowledgment returns. Non-compliance
results in channel closure.</p>
<p>The <code>fuchsia.ui.test.input.Mouse</code> channel will remain open even
if the <code>Registry</code> connection closes.</p>



#### Request {#Registry.RegisterMouse_Request}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>payload</code></td>
            <td>
                <code><a class='link' href='#RegistryRegisterMouseRequest'>RegistryRegisterMouseRequest</a></code>
            </td>
        </tr>
</table>


#### Response {#Registry.RegisterMouse_Response}

&lt;EMPTY&gt;

### RegisterTouchScreen {#Registry.RegisterTouchScreen}

<p>Enables the client to inject touch events using the corresponding
client end to <code>device</code>.</p>
<p>Clients are allowed at most one in-flight call at a time. Subsequent
calls must wait until the acknowledgment returns. Non-compliance
results in channel closure.</p>
<p>The <code>fuchsia.ui.test.input.TouchScreen</code> channel will remain open even
if the <code>Registry</code> connection closes.</p>



#### Request {#Registry.RegisterTouchScreen_Request}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>payload</code></td>
            <td>
                <code><a class='link' href='#RegistryRegisterTouchScreenRequest'>RegistryRegisterTouchScreenRequest</a></code>
            </td>
        </tr>
</table>


#### Response {#Registry.RegisterTouchScreen_Response}

&lt;EMPTY&gt;

## TouchInputListener {#TouchInputListener}
*Defined in [fuchsia.ui.test.input/touch.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.test.input/touch.fidl;l=48)*
<p>A tool for applications to report touch input to interested parties (e.g. a test
fixture).</p>


### ReportTouchInput {#TouchInputListener.ReportTouchInput}

<p>Report that component under test has received expected input.</p>



#### Request {#TouchInputListener.ReportTouchInput_Request}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>payload</code></td>
            <td>
                <code><a class='link' href='#TouchInputListenerReportTouchInputRequest'>TouchInputListenerReportTouchInputRequest</a></code>
            </td>
        </tr>
</table>


## TouchScreen {#TouchScreen}
*Defined in [fuchsia.ui.test.input/touch.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.test.input/touch.fidl;l=13)*
<p>A tool to inject touch events into Input Pipeline.</p>
<p>Please extend as necessary.</p>


### SimulateSwipe {#TouchScreen.SimulateSwipe}

<p>Simulates a swipe that starts at <code>start_location</code> and ends at <code>end_location</code>,
with a total number of move events equal to <code>move_event_count</code>.</p>
<p>The generated pointer event stream will be:</p>
<p>DOWN + CHANGE_1 + ... + CHANGE_n + UP, where n == <code>move_event_count</code></p>
<p>Events are injected with no explicit delay in between; in other words, the
observed delay between successive events will be approximately equal to the
time required to inject a single event.</p>



#### Request {#TouchScreen.SimulateSwipe_Request}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>payload</code></td>
            <td>
                <code><a class='link' href='#TouchScreenSimulateSwipeRequest'>TouchScreenSimulateSwipeRequest</a></code>
            </td>
        </tr>
</table>


#### Response {#TouchScreen.SimulateSwipe_Response}

&lt;EMPTY&gt;

### SimulateTap {#TouchScreen.SimulateTap}

<p>Simulates a tap at the requested location.</p>



#### Request {#TouchScreen.SimulateTap_Request}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>payload</code></td>
            <td>
                <code><a class='link' href='#TouchScreenSimulateTapRequest'>TouchScreenSimulateTapRequest</a></code>
            </td>
        </tr>
</table>


#### Response {#TouchScreen.SimulateTap_Response}

&lt;EMPTY&gt;



## **ENUMS**

### CoordinateUnit [flexible](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#CoordinateUnit data-text="CoordinateUnit"}
Type: <code>uint32</code>

*Defined in [fuchsia.ui.test.input/registry.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.test.input/registry.fidl;l=10)*
<p>Indicates the units used to specify spatial event parameters (unless otherwise
noted).</p>
<div class="fidl-version-div"><span class="fidl-attribute fidl-version">Added: 11</span></div>

<table>
    <tr><th>Name</th><th>Value</th><th>Description</th></tr>
        <tr id="CoordinateUnit.DEFAULT">
<td><h3 id="CoordinateUnit.DEFAULT" class="add-link hide-from-toc">DEFAULT</h3></td>
            <td><code>0</code></td>
            <td><p>The physical display is mapped to a coordinate space spanning [-1000, 1000]
on both the x and y axes, where positive x extends rightward and positive y
extends downward.</p>
<p>Example: (500, -500) in the default coordinate space maps to the center of
the top-right quadrant of the physical display.</p>
</td>
        </tr>
        <tr id="CoordinateUnit.PHYSICAL_PIXELS">
<td><h3 id="CoordinateUnit.PHYSICAL_PIXELS" class="add-link hide-from-toc">PHYSICAL_PIXELS</h3></td>
            <td><code>1</code></td>
            <td><p>The physical display is mapped to a coordinate space spanning (0, 0) -
(dispaly width, display height), where positive x extends rightward and
positive y extends downward.</p>
<p>Test writers should use <code>fuchsia.ui.display.singleton.Info</code> to retrieve
the physical dimensions of the display.</p>
<p>Note that this space matches both the size AND orientation of the physical
display, so it will NOT mirror any rotations applied to the scene graph.</p>
<p>In general, test writers should NOT assume that a particular view's logical
coordinate space matches the physical coordinate space.</p>
</td>
        </tr>
</table>

### MouseButton [flexible](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#MouseButton data-text="MouseButton"}
Type: <code>uint32</code>

*Defined in [fuchsia.ui.test.input/mouse.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.test.input/mouse.fidl;l=14)*
<p>Identifies various buttons on a standard mouse.</p>

<table>
    <tr><th>Name</th><th>Value</th><th>Description</th></tr>
        <tr id="MouseButton.FIRST">
<td><h3 id="MouseButton.FIRST" class="add-link hide-from-toc">FIRST</h3></td>
            <td><code>0</code></td>
            <td><p>&quot;Left&quot; mouse button.</p>
</td>
        </tr>
        <tr id="MouseButton.SECOND">
<td><h3 id="MouseButton.SECOND" class="add-link hide-from-toc">SECOND</h3></td>
            <td><code>1</code></td>
            <td><p>&quot;Right&quot; mouse button.</p>
</td>
        </tr>
        <tr id="MouseButton.THIRD">
<td><h3 id="MouseButton.THIRD" class="add-link hide-from-toc">THIRD</h3></td>
            <td><code>2</code></td>
            <td><p>&quot;Third&quot; mouse button.</p>
</td>
        </tr>
</table>

### MouseEventPhase [flexible](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#MouseEventPhase data-text="MouseEventPhase"}
Type: <code>uint32</code>

*Defined in [fuchsia.ui.test.input/mouse.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.test.input/mouse.fidl;l=26)*
<p>Identifies the phase of a mouse event.</p>

<table>
    <tr><th>Name</th><th>Value</th><th>Description</th></tr>
        <tr id="MouseEventPhase.ADD">
<td><h3 id="MouseEventPhase.ADD" class="add-link hide-from-toc">ADD</h3></td>
            <td><code>0</code></td>
            <td><p>The observer has started tracking the mouse.</p>
</td>
        </tr>
        <tr id="MouseEventPhase.HOVER">
<td><h3 id="MouseEventPhase.HOVER" class="add-link hide-from-toc">HOVER</h3></td>
            <td><code>1</code></td>
            <td><p>The mouse has moved since the last ADD event, without an interceding DOWN
event.</p>
</td>
        </tr>
        <tr id="MouseEventPhase.DOWN">
<td><h3 id="MouseEventPhase.DOWN" class="add-link hide-from-toc">DOWN</h3></td>
            <td><code>2</code></td>
            <td><p>One or more mouse buttons have been pressed.</p>
</td>
        </tr>
        <tr id="MouseEventPhase.MOVE">
<td><h3 id="MouseEventPhase.MOVE" class="add-link hide-from-toc">MOVE</h3></td>
            <td><code>3</code></td>
            <td><p>The mouse has moved since the last DOWN event.</p>
</td>
        </tr>
        <tr id="MouseEventPhase.UP">
<td><h3 id="MouseEventPhase.UP" class="add-link hide-from-toc">UP</h3></td>
            <td><code>4</code></td>
            <td><p>All pressed buttons have been released.</p>
</td>
        </tr>
        <tr id="MouseEventPhase.WHEEL">
<td><h3 id="MouseEventPhase.WHEEL" class="add-link hide-from-toc">WHEEL</h3></td>
            <td><code>5</code></td>
            <td><p>The mouse wheel was manipulated.</p>
</td>
        </tr>
</table>


## **TABLES**

### KeyboardInputListenerReportTextInputRequest  {#KeyboardInputListenerReportTextInputRequest data-text="KeyboardInputListenerReportTextInputRequest"}


*Defined in [fuchsia.ui.test.input/text.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.test.input/text.fidl;l=56)*

<table>
    <tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
        <tr id="KeyboardInputListenerReportTextInputRequest.text">
<td><h3 id="KeyboardInputListenerReportTextInputRequest.text" class="add-link hide-from-toc">1</h3></td>
            <td><code>text</code></td>
            <td>
                <code>string[1024]</code>
            </td>
            <td><p>The content of the text input received by the reporter.</p>
</td>
        </tr>
</table>

### KeyboardSimulateUsAsciiTextEntryRequest  {#KeyboardSimulateUsAsciiTextEntryRequest data-text="KeyboardSimulateUsAsciiTextEntryRequest"}


*Defined in [fuchsia.ui.test.input/text.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.test.input/text.fidl;l=22)*

<table>
    <tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
        <tr id="KeyboardSimulateUsAsciiTextEntryRequest.text">
<td><h3 id="KeyboardSimulateUsAsciiTextEntryRequest.text" class="add-link hide-from-toc">1</h3></td>
            <td><code>text</code></td>
            <td>
                <code>string[1024]</code>
            </td>
            <td></td>
        </tr>
</table>

### MediaButtonsDeviceSimulateButtonPressRequest  {#MediaButtonsDeviceSimulateButtonPressRequest data-text="MediaButtonsDeviceSimulateButtonPressRequest"}


*Defined in [fuchsia.ui.test.input/media_buttons.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.test.input/media_buttons.fidl;l=15)*

<table>
    <tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
        <tr id="MediaButtonsDeviceSimulateButtonPressRequest.button">
<td><h3 id="MediaButtonsDeviceSimulateButtonPressRequest.button" class="add-link hide-from-toc">1</h3></td>
            <td><code>button</code></td>
            <td>
                <code><a class='link' href='../fuchsia.input.report/'>fuchsia.input.report</a>/<a class='link' href='../fuchsia.input.report/#ConsumerControlButton'>ConsumerControlButton</a></code>
            </td>
            <td><p>The button receiving the button press.</p>
</td>
        </tr>
</table>

### MouseInputListenerReportMouseInputRequest  {#MouseInputListenerReportMouseInputRequest data-text="MouseInputListenerReportMouseInputRequest"}


*Defined in [fuchsia.ui.test.input/mouse.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.test.input/mouse.fidl;l=87)*

<table>
    <tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
        <tr id="MouseInputListenerReportMouseInputRequest.local_x">
<td><h3 id="MouseInputListenerReportMouseInputRequest.local_x" class="add-link hide-from-toc">1</h3></td>
            <td><code>local_x</code></td>
            <td>
                <code>float64</code>
            </td>
            <td><p>The horizontal coordinate in the reporter's coordinate system.</p>
</td>
        </tr>
        <tr id="MouseInputListenerReportMouseInputRequest.local_y">
<td><h3 id="MouseInputListenerReportMouseInputRequest.local_y" class="add-link hide-from-toc">2</h3></td>
            <td><code>local_y</code></td>
            <td>
                <code>float64</code>
            </td>
            <td><p>The vertical coordinate in the reporter's coordinate system.</p>
</td>
        </tr>
        <tr id="MouseInputListenerReportMouseInputRequest.time_received">
<td><h3 id="MouseInputListenerReportMouseInputRequest.time_received" class="add-link hide-from-toc">3</h3></td>
            <td><code>time_received</code></td>
            <td>
                <code><a class='link' href='../zx/'>zx</a>/<a class='link' href='../zx/#time'>time</a></code>
            </td>
            <td><p>The monotonic time (ns) the mouse event was received by the client.
Note that this value should be used with caution. Some reporters may not be
capable of ns-level precision, but still report in ns-level units.</p>
</td>
        </tr>
        <tr id="MouseInputListenerReportMouseInputRequest.component_name">
<td><h3 id="MouseInputListenerReportMouseInputRequest.component_name" class="add-link hide-from-toc">4</h3></td>
            <td><code>component_name</code></td>
            <td>
                <code>string[1024]</code>
            </td>
            <td><p>Name of the component to help distinguish responses from multiple components.</p>
<p>NOTE: This name is <em>independent</em> of component framework, so the reporter and
listener are free to agree on an arbitrary value.</p>
</td>
        </tr>
        <tr id="MouseInputListenerReportMouseInputRequest.buttons">
<td><h3 id="MouseInputListenerReportMouseInputRequest.buttons" class="add-link hide-from-toc">5</h3></td>
            <td><code>buttons</code></td>
            <td>
                <code>vector&lt;<a class='link' href='#MouseButton'>MouseButton</a>&gt;[32]</code>
            </td>
            <td><p>The pressed buttons that the reporter received.</p>
</td>
        </tr>
        <tr id="MouseInputListenerReportMouseInputRequest.phase">
<td><h3 id="MouseInputListenerReportMouseInputRequest.phase" class="add-link hide-from-toc">6</h3></td>
            <td><code>phase</code></td>
            <td>
                <code><a class='link' href='#MouseEventPhase'>MouseEventPhase</a></code>
            </td>
            <td><p>The phase of the mouse event that the reporter received.</p>
</td>
        </tr>
        <tr id="MouseInputListenerReportMouseInputRequest.device_pixel_ratio">
<td><h3 id="MouseInputListenerReportMouseInputRequest.device_pixel_ratio" class="add-link hide-from-toc">7</h3></td>
            <td><code>device_pixel_ratio</code></td>
            <td>
                <code>float64</code>
            </td>
            <td><p>The device pixel ratio of which the reporter is aware.</p>
<p>Some reporters may account for this scale factor when converting to local
coordinates.</p>
</td>
        </tr>
        <tr id="MouseInputListenerReportMouseInputRequest.wheel_x_physical_pixel">
<td><h3 id="MouseInputListenerReportMouseInputRequest.wheel_x_physical_pixel" class="add-link hide-from-toc">8</h3></td>
            <td><code>wheel_x_physical_pixel</code></td>
            <td>
                <code>float64</code>
            </td>
            <td><p>The horizontal wheel scroll delta in physical pixels.</p>
</td>
        </tr>
        <tr id="MouseInputListenerReportMouseInputRequest.wheel_y_physical_pixel">
<td><h3 id="MouseInputListenerReportMouseInputRequest.wheel_y_physical_pixel" class="add-link hide-from-toc">9</h3></td>
            <td><code>wheel_y_physical_pixel</code></td>
            <td>
                <code>float64</code>
            </td>
            <td><p>The vertical wheel scroll delta in physical pixels.</p>
</td>
        </tr>
</table>

### MouseSimulateMouseEventRequest  {#MouseSimulateMouseEventRequest data-text="MouseSimulateMouseEventRequest"}


*Defined in [fuchsia.ui.test.input/mouse.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.test.input/mouse.fidl;l=55)*

<table>
    <tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
        <tr id="MouseSimulateMouseEventRequest.pressed_buttons">
<td><h3 id="MouseSimulateMouseEventRequest.pressed_buttons" class="add-link hide-from-toc">1</h3></td>
            <td><code>pressed_buttons</code></td>
            <td>
                <code>vector&lt;<a class='link' href='#MouseButton'>MouseButton</a>&gt;[32]</code>
            </td>
            <td><p>Set of buttons that are currently pressed.
Must NOT contain duplicates.</p>
</td>
        </tr>
        <tr id="MouseSimulateMouseEventRequest.movement_x">
<td><h3 id="MouseSimulateMouseEventRequest.movement_x" class="add-link hide-from-toc">2</h3></td>
            <td><code>movement_x</code></td>
            <td>
                <code>int64</code>
            </td>
            <td><p>Relative X positional displacement.</p>
</td>
        </tr>
        <tr id="MouseSimulateMouseEventRequest.movement_y">
<td><h3 id="MouseSimulateMouseEventRequest.movement_y" class="add-link hide-from-toc">3</h3></td>
            <td><code>movement_y</code></td>
            <td>
                <code>int64</code>
            </td>
            <td><p>Relative Y positional displacement.</p>
</td>
        </tr>
        <tr id="MouseSimulateMouseEventRequest.scroll_v_detent">
<td><h3 id="MouseSimulateMouseEventRequest.scroll_v_detent" class="add-link hide-from-toc">4</h3></td>
            <td><code>scroll_v_detent</code></td>
            <td>
                <code>int64</code>
            </td>
            <td><p>Relative vertical scrolling displacement by detent.</p>
</td>
        </tr>
        <tr id="MouseSimulateMouseEventRequest.scroll_h_detent">
<td><h3 id="MouseSimulateMouseEventRequest.scroll_h_detent" class="add-link hide-from-toc">5</h3></td>
            <td><code>scroll_h_detent</code></td>
            <td>
                <code>int64</code>
            </td>
            <td><p>Relative horizontal scrolling displacement by detent.</p>
</td>
        </tr>
        <tr id="MouseSimulateMouseEventRequest.scroll_v_physical_pixel">
<td><h3 id="MouseSimulateMouseEventRequest.scroll_v_physical_pixel" class="add-link hide-from-toc">6</h3></td>
            <td><code>scroll_v_physical_pixel</code></td>
            <td>
                <code>float64</code>
            </td>
            <td><p>Recommended vertical scrolling displacement by physical pixel, it is
computed with accelerator, detent / mm to pixel ratio, etc.</p>
</td>
        </tr>
        <tr id="MouseSimulateMouseEventRequest.scroll_h_physical_pixel">
<td><h3 id="MouseSimulateMouseEventRequest.scroll_h_physical_pixel" class="add-link hide-from-toc">7</h3></td>
            <td><code>scroll_h_physical_pixel</code></td>
            <td>
                <code>float64</code>
            </td>
            <td><p>Recommended horizontal scrolling displacement by physical pixel, it
is computed with accelerator, detent / mm to pixel ratio, etc.</p>
</td>
        </tr>
</table>

### RegistryRegisterKeyboardRequest [resource](/fuchsia-src/reference/fidl/language/language.md#value-vs-resource){:.fidl-attribute} {#RegistryRegisterKeyboardRequest data-text="RegistryRegisterKeyboardRequest"}


*Defined in [fuchsia.ui.test.input/registry.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.test.input/registry.fidl;l=80)*

<table>
    <tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
        <tr id="RegistryRegisterKeyboardRequest.device">
<td><h3 id="RegistryRegisterKeyboardRequest.device" class="add-link hide-from-toc">1</h3></td>
            <td><code>device</code></td>
            <td>
                <code>server_end&lt;<a class='link' href='#Keyboard'>Keyboard</a>&gt;</code>
            </td>
            <td></td>
        </tr>
</table>

### RegistryRegisterMediaButtonsDeviceRequest [resource](/fuchsia-src/reference/fidl/language/language.md#value-vs-resource){:.fidl-attribute} {#RegistryRegisterMediaButtonsDeviceRequest data-text="RegistryRegisterMediaButtonsDeviceRequest"}


*Defined in [fuchsia.ui.test.input/registry.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.test.input/registry.fidl;l=67)*

<table>
    <tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
        <tr id="RegistryRegisterMediaButtonsDeviceRequest.device">
<td><h3 id="RegistryRegisterMediaButtonsDeviceRequest.device" class="add-link hide-from-toc">1</h3></td>
            <td><code>device</code></td>
            <td>
                <code>server_end&lt;<a class='link' href='#MediaButtonsDevice'>MediaButtonsDevice</a>&gt;</code>
            </td>
            <td></td>
        </tr>
</table>

### RegistryRegisterMouseRequest [resource](/fuchsia-src/reference/fidl/language/language.md#value-vs-resource){:.fidl-attribute} {#RegistryRegisterMouseRequest data-text="RegistryRegisterMouseRequest"}


*Defined in [fuchsia.ui.test.input/registry.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.test.input/registry.fidl;l=93)*

<table>
    <tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
        <tr id="RegistryRegisterMouseRequest.device">
<td><h3 id="RegistryRegisterMouseRequest.device" class="add-link hide-from-toc">1</h3></td>
            <td><code>device</code></td>
            <td>
                <code>server_end&lt;<a class='link' href='#Mouse'>Mouse</a>&gt;</code>
            </td>
            <td></td>
        </tr>
</table>

### RegistryRegisterTouchScreenRequest [resource](/fuchsia-src/reference/fidl/language/language.md#value-vs-resource){:.fidl-attribute} {#RegistryRegisterTouchScreenRequest data-text="RegistryRegisterTouchScreenRequest"}


*Defined in [fuchsia.ui.test.input/registry.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.test.input/registry.fidl;l=50)*

<table>
    <tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
        <tr id="RegistryRegisterTouchScreenRequest.device">
<td><h3 id="RegistryRegisterTouchScreenRequest.device" class="add-link hide-from-toc">1</h3></td>
            <td><code>device</code></td>
            <td>
                <code>server_end&lt;<a class='link' href='#TouchScreen'>TouchScreen</a>&gt;</code>
            </td>
            <td></td>
        </tr>
        <tr id="RegistryRegisterTouchScreenRequest.coordinate_unit">
<td><h3 id="RegistryRegisterTouchScreenRequest.coordinate_unit" class="add-link hide-from-toc">2</h3></td>
            <td><code>coordinate_unit</code></td>
            <td>
                <code><a class='link' href='#CoordinateUnit'>CoordinateUnit</a></code>
            </td>
            <td><p>Indicates the coordinate space in which to describe touch events.</p>
<div class="fidl-version-div"><span class="fidl-attribute fidl-version">Added: 11</span></div>
</td>
        </tr>
</table>

### TouchInputListenerReportTouchInputRequest  {#TouchInputListenerReportTouchInputRequest data-text="TouchInputListenerReportTouchInputRequest"}


*Defined in [fuchsia.ui.test.input/touch.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.test.input/touch.fidl;l=50)*

<table>
    <tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
        <tr id="TouchInputListenerReportTouchInputRequest.local_x">
<td><h3 id="TouchInputListenerReportTouchInputRequest.local_x" class="add-link hide-from-toc">1</h3></td>
            <td><code>local_x</code></td>
            <td>
                <code>float64</code>
            </td>
            <td><p>The horizontal coordinate, in the reporter's coordinate system.</p>
</td>
        </tr>
        <tr id="TouchInputListenerReportTouchInputRequest.local_y">
<td><h3 id="TouchInputListenerReportTouchInputRequest.local_y" class="add-link hide-from-toc">2</h3></td>
            <td><code>local_y</code></td>
            <td>
                <code>float64</code>
            </td>
            <td><p>The vertical coordinate, in the reporter's coordinate system.</p>
</td>
        </tr>
        <tr id="TouchInputListenerReportTouchInputRequest.time_received">
<td><h3 id="TouchInputListenerReportTouchInputRequest.time_received" class="add-link hide-from-toc">3</h3></td>
            <td><code>time_received</code></td>
            <td>
                <code><a class='link' href='../zx/'>zx</a>/<a class='link' href='../zx/#time'>time</a></code>
            </td>
            <td><p>The monotonic time (ns) the pointer data was received by the reporter.
Note that this value should be used with caution. Some reporters may not be
capable of ns-level precision, but still report in ns-level units.</p>
</td>
        </tr>
        <tr id="TouchInputListenerReportTouchInputRequest.device_pixel_ratio">
<td><h3 id="TouchInputListenerReportTouchInputRequest.device_pixel_ratio" class="add-link hide-from-toc">4</h3></td>
            <td><code>device_pixel_ratio</code></td>
            <td>
                <code>float64</code>
            </td>
            <td><p>The number of physical pixels, per logical pixel, as reported by the reporter.</p>
</td>
        </tr>
        <tr id="TouchInputListenerReportTouchInputRequest.component_name">
<td><h3 id="TouchInputListenerReportTouchInputRequest.component_name" class="add-link hide-from-toc">5</h3></td>
            <td><code>component_name</code></td>
            <td>
                <code>string[1024]</code>
            </td>
            <td><p>Name of the component to help distinguish responses from multiple components.</p>
<p>NOTE: This name is <em>independent</em> of component framework, so the reporter and
listener are free to agree on an arbitrary value.</p>
</td>
        </tr>
</table>

### TouchScreenSimulateSwipeRequest  {#TouchScreenSimulateSwipeRequest data-text="TouchScreenSimulateSwipeRequest"}


*Defined in [fuchsia.ui.test.input/touch.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.test.input/touch.fidl;l=31)*

<table>
    <tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
        <tr id="TouchScreenSimulateSwipeRequest.start_location">
<td><h3 id="TouchScreenSimulateSwipeRequest.start_location" class="add-link hide-from-toc">1</h3></td>
            <td><code>start_location</code></td>
            <td>
                <code><a class='link' href='../fuchsia.math/'>fuchsia.math</a>/<a class='link' href='../fuchsia.math/#Vec'>Vec</a></code>
            </td>
            <td><p>Starting location of the swipe, in the coordinate units specified during
registration.</p>
</td>
        </tr>
        <tr id="TouchScreenSimulateSwipeRequest.end_location">
<td><h3 id="TouchScreenSimulateSwipeRequest.end_location" class="add-link hide-from-toc">2</h3></td>
            <td><code>end_location</code></td>
            <td>
                <code><a class='link' href='../fuchsia.math/'>fuchsia.math</a>/<a class='link' href='../fuchsia.math/#Vec'>Vec</a></code>
            </td>
            <td><p>End location of the swipe, in the coordinate units specified during
registration.</p>
</td>
        </tr>
        <tr id="TouchScreenSimulateSwipeRequest.move_event_count">
<td><h3 id="TouchScreenSimulateSwipeRequest.move_event_count" class="add-link hide-from-toc">3</h3></td>
            <td><code>move_event_count</code></td>
            <td>
                <code>uint32</code>
            </td>
            <td><p>Number of move events in the swipe.</p>
</td>
        </tr>
</table>

### TouchScreenSimulateTapRequest  {#TouchScreenSimulateTapRequest data-text="TouchScreenSimulateTapRequest"}


*Defined in [fuchsia.ui.test.input/touch.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.test.input/touch.fidl;l=15)*

<table>
    <tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
        <tr id="TouchScreenSimulateTapRequest.tap_location">
<td><h3 id="TouchScreenSimulateTapRequest.tap_location" class="add-link hide-from-toc">1</h3></td>
            <td><code>tap_location</code></td>
            <td>
                <code><a class='link' href='../fuchsia.math/'>fuchsia.math</a>/<a class='link' href='../fuchsia.math/#Vec'>Vec</a></code>
            </td>
            <td><p>Location of the tap event, in the coordinate units specified during
registration.</p>
</td>
        </tr>
</table>




## **CONSTANTS**

<table>
    <tr><th>Name</th><th>Value</th><th>Type</th><th>Description</th></tr>
        <tr id="MOUSE_MAX_NUM_BUTTONS">
            <td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.test.input/mouse.fidl;l=11">MOUSE_MAX_NUM_BUTTONS</a></td>
                <td>
                    <code>32</code>
                </td>
                <td><code>uint32</code></td>
            <td><p>A hardcoded number of max mouse buttons. This should be increased in the future
if we ever see mice with more buttons.</p>
</td>
        </tr>
</table>
