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

[TOC]
# fuchsia.power.clientlevel

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


## **PROTOCOLS**

## Connector {#Connector}
*Defined in [fuchsia.power.clientlevel/clientlevel.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.power.clientlevel/clientlevel.fidl;l=22)*
<p>Allows a client to connect a <a class='link' href='#Watcher'>Watcher</a> to the power level of a given
<a class='link' href='#ClientType'>ClientType</a>.</p>


### Connect {#Connector.Connect}

<p>Connects a <a class='link' href='#Watcher'>Watcher</a> to the power level of the specified
<a class='link' href='#ClientType'>ClientType</a>.</p>
<p>A client may call this method and begin using the <a class='link' href='#Watcher'>Watcher</a> client
endpoint immediately.</p>
<p>If a power configuration does not exist for the provided <code>client_type</code>,
then the request will fail. On failure, both the <code>watcher</code> server
endpoint as well as the current <code>Connector</code> connection will be
terminated.</p>
<ul>
<li>
<p><code>client_type</code> specifies to which <a class='link' href='#ClientType'>ClientType</a> power level that
<code>watcher</code> should be connected. The value is valid iff a power
configuration exists for the provided <code>client_type</code>.</p>
</li>
<li>
<p><code>watcher</code> is the server endpoint of a <a class='link' href='#Watcher'>Watcher</a> channel that will be
connected to the <a class='link' href='#ClientType'>ClientType</a> power level.</p>
</li>
</ul>



#### Request {#Connector.Connect_Request}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>client_type</code></td>
            <td>
                <code><a class='link' href='#ClientType'>ClientType</a></code>
            </td>
        </tr>
        <tr>
            <td><code>watcher</code></td>
            <td>
                <code>server_end&lt;<a class='link' href='#Watcher'>Watcher</a>&gt;</code>
            </td>
        </tr>
</table>


## Watcher {#Watcher}
*Defined in [fuchsia.power.clientlevel/clientlevel.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.power.clientlevel/clientlevel.fidl;l=54)*
<p>Allows a client to watch for changes to the power level of a given
<a class='link' href='#ClientType'>ClientType</a>.</p>
<p>This protocol cannot be connected to the service directly. Instead, the
server endpoint of a <code>Watcher</code> channel must first be connected to the power
level of the desired <a class='link' href='#ClientType'>ClientType</a> using the <a class='link' href='#Connector.Connect'>Connector.Connect</a> method.
The client endpoint of a <code>Watcher</code> channel is only useful after it has been
connected in this way.</p>


### Watch {#Watcher.Watch}

<p>Watches for changes to the power level of the connected <a class='link' href='#ClientType'>ClientType</a>.</p>
<p>The power level for a given <a class='link' href='#ClientType'>ClientType</a> is determined according to
the power configuration for that <a class='link' href='#ClientType'>ClientType</a>. See the
<a href="/src/power/power-manager/system_power_mode_config/README.md">README.md</a>
for more details.</p>
<p>On a given connection, the first call will return immediately with the
current power level for the connected <a class='link' href='#ClientType'>ClientType</a>. Subsequent <code>Watch</code>
requests will only return a new <code>level</code> if the power level of the
connected <a class='link' href='#ClientType'>ClientType</a> has changed. This follows the <a href="https://fuchsia.dev/fuchsia-src/concepts/api/fidl#hanging-get">hanging
get</a>
pattern.</p>
<ul>
<li><code>level</code> is an unsigned integer representing the power level of the
connected <a class='link' href='#ClientType'>ClientType</a>.</li>
</ul>



#### Request {#Watcher.Watch_Request}

&lt;EMPTY&gt;


#### Response {#Watcher.Watch_Response}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>level</code></td>
            <td>
                <code>uint64</code>
            </td>
        </tr>
</table>



## **ENUMS**

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

*Defined in [fuchsia.power.clientlevel/clientlevel.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.power.clientlevel/clientlevel.fidl;l=15)*
<p>A value that represents the type of client using the protocol.</p>
<p><code>ClientType</code> is used as a parameter for:</p>
<ol>
<li><a class='link' href='#Connector.Connect'>Connector.Connect</a> to connect a <a class='link' href='#Watcher'>Watcher</a> to the power level of
the specified client type</li>
<li><a class='link' href='../fuchsia.power.systemmode/'>fuchsia.power.systemmode</a>/<a class='link' href='../fuchsia.power.systemmode/#ClientConfigurator.Get'>ClientConfigurator.Get</a> and
<a class='link' href='../fuchsia.power.systemmode/'>fuchsia.power.systemmode</a>/<a class='link' href='../fuchsia.power.systemmode/#ClientConfigurator.Set'>ClientConfigurator.Set</a> to update the power
configuration of the specified client type</li>
</ol>

<table>
    <tr><th>Name</th><th>Value</th><th>Description</th></tr>
        <tr id="ClientType.WLAN">
<td><h3 id="ClientType.WLAN" class="add-link hide-from-toc">WLAN</h3></td>
            <td><code>1</code></td>
            <td></td>
        </tr>
</table>





