|
|
Line 1: |
Line 1: |
− | ru.neurotech.neurodevices | + | ru.neuromd.neurosdk |
| | | |
− | <span style="font-size: 150%;">'''Class NeuroDevice'''</span> | + | <span style="font-size: 150%;">'''Class Device'''</span> |
| | | |
| ==Related Classes== | | ==Related Classes== |
| | | |
− | ru.neurotech.neurodevices.[[NeuroConnection Class|NeuroConnection]] | + | ru.neuromd.neurosdk.[[DeviceScanner (Java)|DeviceScanner]] |
− | | |
− | ru.neurotech.neurodevices.[[DeviceFeature Enumeration|DeviceFeature]]
| |
− | | |
− | ru.neurotech.neurodevices.state.[[NeuroDeviceError Enumeration|NeuroDeviceError]]
| |
− | | |
− | ru.neurotech.neurodevices.state.[[NeuroDeviceState Enumeration|NeuroDeviceState]]
| |
| | | |
| ==Classes hierarchy== | | ==Classes hierarchy== |
| <ul> | | <ul> |
| <li>java.lang.Object</li> | | <li>java.lang.Object</li> |
− |
| |
− | <ul>
| |
− | <li>ru.neurotech.common.[[VisualizableDevice Class|VisualizableDevice]]</li>
| |
− |
| |
| <ul> | | <ul> |
− | <li>ru.neurotech.neurodevices.'''NeuroDevice'''</li> | + | <li>ru.neuromd.neurosdk.'''Device'''</li> |
− | </ul>
| |
| </ul> | | </ul> |
| </ul> | | </ul> |
| | | |
| ==Class definition== | | ==Class definition== |
− | <code><span style="color:#0066FF;">'''public class'''</span> NeuroDevice <span style="color:#0066FF;">'''extends'''</span> [[VisualizableDevice Class|VisualizableDevice]]</code> | + | <code><span style="color:#0066FF;">'''public class'''</span>Device</code> |
− | | |
− | Represents Neurotech™ device on a layer of algorithmic functionality
| |
| | | |
− | Provides signal and misc channels and methods for signal processing and viewing</div>
| + | The Device class is an abstraction for NeuroMD BLE devices. This abstraction provides functions for changing of device state by executing commands and setting parameters. Each device have different sets of supported commands and parameters, Device class has functions designed to get information about these sets. Callibri and Braibit devices has different parameters sets and provides different ways to access them. Device class hides all differences behind its interface and provides universal way to read and write parameters, execute commands and receive biopotential signals. |
| | | |
| | | |
Line 40: |
Line 27: |
| |'''Field and Description''' | | |'''Field and Description''' |
| |- valign="top" | | |- valign="top" |
− | |[[SubscribersNotifier Class|SubscribersNotifier]]<'''[[NeuroDeviceState Enumeration|NeuroDeviceState]]'''> | + | |[[SubscribersNotifier Class|SubscribersNotifier]]<'''[[DeviceState (Java)|DeviceState]]'''> |
− | |[[#deviceStateChanged|'''deviceStateChanged''']] | + | |[[#parameterChanged|'''deviceStateChanged''']] |
| Subscribe this event to get notifications about device state | | Subscribe this event to get notifications about device state |
| |} | | |} |
| | | |
| ==Constructor Summary== | | ==Constructor Summary== |
− | {| class="wikitable"
| + | You are not able to create Device directly. Use .[[DeviceScanner (Java)|DeviceScanner]] to find and create devices |
− | |- style="background-color: #dee3e9;"
| |
− | |'''Constructor and Description'''
| |
− | |-
| |
− | |[[#NeuroDevice|NeuroDevice]](<span style="color:#0066FF;">'''long'''</span> nativeObjPtr)
| |
− | |}
| |
| | | |
| ==Methods Summary== | | ==Methods Summary== |
Line 248: |
Line 230: |
| | | |
| Disconnects from device | | Disconnects from device |
− |
| |
− |
| |
− | <div class="header">
| |
− | <div class="subTitle">ru.neurotech.neurosdk</div>
| |
− | <h2 title="Class Device" class="title">Class Device</h2>
| |
− | </div>
| |
− | <div class="contentContainer">
| |
− | <ul class="inheritance">
| |
− | <li>java.lang.Object</li>
| |
− | <li>
| |
− | <ul class="inheritance">
| |
− | <li>ru.neurotech.neurosdk.Device</li>
| |
− | </ul>
| |
− | </li>
| |
− | </ul>
| |
− | <div class="description">
| |
− | <ul class="blockList">
| |
− | <li class="blockList">
| |
− | <hr>
| |
− | <br>
| |
− | <pre>public class <span class="typeNameLabel">Device</span>
| |
− | extends java.lang.Object</pre>
| |
− | </li>
| |
− | </ul>
| |
− | </div>
| |
− | <div class="summary">
| |
− | <ul class="blockList">
| |
− | <li class="blockList">
| |
− | <!-- =========== FIELD SUMMARY =========== -->
| |
− | <ul class="blockList">
| |
− | <li class="blockList"><a name="field.summary">
| |
− | <!-- -->
| |
− | </a>
| |
− | <h3>Field Summary</h3>
| |
− | <table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
| |
− | <caption><span>Fields</span><span class="tabEnd"> </span></caption>
| |
− | <tr>
| |
− | <th class="colFirst" scope="col">Modifier and Type</th>
| |
− | <th class="colLast" scope="col">Field and Description</th>
| |
− | </tr>
| |
− | <tr class="altColor">
| |
− | <td class="colFirst"><code><a href="../../../ru/neurotech/common/SubscribersNotifier.html" title="class in ru.neurotech.common">SubscribersNotifier</a><<a href="../../../ru/neurotech/neurosdk/parameters/ParameterName.html" title="enum in ru.neurotech.neurosdk.parameters">ParameterName</a>></code></td>
| |
− | <td class="colLast"><code><span class="memberNameLink"><a href="../../../ru/neurotech/neurosdk/Device.html#parameterChanged">parameterChanged</a></span></code>
| |
− | <div class="block">Subscribe this event to receive notifications about changes of device parameters</div>
| |
− | </td>
| |
− | </tr>
| |
− | </table>
| |
− | </li>
| |
− | </ul>
| |
− | <!-- ========== METHOD SUMMARY =========== -->
| |
− | <ul class="blockList">
| |
− | <li class="blockList"><a name="method.summary">
| |
− | <!-- -->
| |
− | </a>
| |
− | <h3>Method Summary</h3>
| |
− | <table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
| |
− | <caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd"> </span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd"> </span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd"> </span></span></caption>
| |
− | <tr>
| |
− | <th class="colFirst" scope="col">Modifier and Type</th>
| |
− | <th class="colLast" scope="col">Method and Description</th>
| |
− | </tr>
| |
− | <tr id="i0" class="altColor">
| |
− | <td class="colFirst"><code><a href="../../../ru/neurotech/neurosdk/channels/ChannelInfo.html" title="interface in ru.neurotech.neurosdk.channels">ChannelInfo</a>[]</code></td>
| |
− | <td class="colLast"><code><span class="memberNameLink"><a href="../../../ru/neurotech/neurosdk/Device.html#channels--">channels</a></span>()</code>
| |
− | <div class="block">Returns information about supported channels
| |
− | Check this information before creation of channel.</div>
| |
− | </td>
| |
− | </tr>
| |
− | <tr id="i1" class="rowColor">
| |
− | <td class="colFirst"><code><a href="../../../ru/neurotech/neurosdk/parameters/Command.html" title="enum in ru.neurotech.neurosdk.parameters">Command</a>[]</code></td>
| |
− | <td class="colLast"><code><span class="memberNameLink"><a href="../../../ru/neurotech/neurosdk/Device.html#commands--">commands</a></span>()</code>
| |
− | <div class="block">Returns supported commands of device</div>
| |
− | </td>
| |
− | </tr>
| |
− | <tr id="i2" class="altColor">
| |
− | <td class="colFirst"><code>void</code></td>
| |
− | <td class="colLast"><code><span class="memberNameLink"><a href="../../../ru/neurotech/neurosdk/Device.html#connect--">connect</a></span>()</code>
| |
− | <div class="block">Tries to establish connection with device
| |
− | Check DeviceState parameter or subscribe parameterChanged event for operation result</div>
| |
− | </td>
| |
− | </tr>
| |
− | <tr id="i3" class="rowColor">
| |
− | <td class="colFirst"><code>void</code></td>
| |
− | <td class="colLast"><code><span class="memberNameLink"><a href="../../../ru/neurotech/neurosdk/Device.html#disconnect--">disconnect</a></span>()</code>
| |
− | <div class="block">Disconnects from device
| |
− | Check DeviceState parameter or subscribe parameterChanged event for operation result</div>
| |
− | </td>
| |
− | </tr>
| |
− | <tr id="i4" class="altColor">
| |
− | <td class="colFirst"><code>boolean</code></td>
| |
− | <td class="colLast"><code><span class="memberNameLink"><a href="../../../ru/neurotech/neurosdk/Device.html#execute-ru.neurotech.neurosdk.parameters.Command-">execute</a></span>(<a href="../../../ru/neurotech/neurosdk/parameters/Command.html" title="enum in ru.neurotech.neurosdk.parameters">Command</a> cmd)</code>
| |
− | <div class="block">Tries to execute command and returns value indicating operations success.</div>
| |
− | </td>
| |
− | </tr>
| |
− | <tr id="i5" class="rowColor">
| |
− | <td class="colFirst"><code>void</code></td>
| |
− | <td class="colLast"><code><span class="memberNameLink"><a href="../../../ru/neurotech/neurosdk/Device.html#finalize--">finalize</a></span>()</code> </td>
| |
− | </tr>
| |
− | <tr id="i6" class="altColor">
| |
− | <td class="colFirst"><code><a href="../../../ru/neurotech/neurosdk/parameters/Parameter.html" title="class in ru.neurotech.neurosdk.parameters">Parameter</a>[]</code></td>
| |
− | <td class="colLast"><code><span class="memberNameLink"><a href="../../../ru/neurotech/neurosdk/Device.html#parameters--">parameters</a></span>()</code>
| |
− | <div class="block">Returns all available parameters of device, their types and access rights</div>
| |
− | </td>
| |
− | </tr>
| |
− | <tr id="i7" class="rowColor">
| |
− | <td class="colFirst"><code><ParamType><br>ParamType</code></td>
| |
− | <td class="colLast"><code><span class="memberNameLink"><a href="../../../ru/neurotech/neurosdk/Device.html#readParam-ru.neurotech.neurosdk.parameters.ParameterName-">readParam</a></span>(<a href="../../../ru/neurotech/neurosdk/parameters/ParameterName.html" title="enum in ru.neurotech.neurosdk.parameters">ParameterName</a> param)</code>
| |
− | <div class="block">Return value of specified parameter of device.</div>
| |
− | </td>
| |
− | </tr>
| |
− | <tr id="i8" class="altColor">
| |
− | <td class="colFirst"><code>boolean</code></td>
| |
− | <td class="colLast"><code><span class="memberNameLink"><a href="../../../ru/neurotech/neurosdk/Device.html#setParam-ru.neurotech.neurosdk.parameters.ParameterName-java.lang.Object-">setParam</a></span>(<a href="../../../ru/neurotech/neurosdk/parameters/ParameterName.html" title="enum in ru.neurotech.neurosdk.parameters">ParameterName</a> param,
| |
− | java.lang.Object value)</code>
| |
− | <div class="block">Sets value for specified parameter and returns value indicating success of operation.</div>
| |
− | </td>
| |
− | </tr>
| |
− | </table>
| |
− | <ul class="blockList">
| |
− | <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
| |
− | <!-- -->
| |
− | </a>
| |
− | <h3>Methods inherited from class java.lang.Object</h3>
| |
− | <code>clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
| |
− | </ul>
| |
− | </li>
| |
− | </ul>
| |
− | </li>
| |
− | </ul>
| |
− | </div>
| |
− | <div class="details">
| |
− | <ul class="blockList">
| |
− | <li class="blockList">
| |
− | <!-- ============ FIELD DETAIL =========== -->
| |
− | <ul class="blockList">
| |
− | <li class="blockList"><a name="field.detail">
| |
− | <!-- -->
| |
− | </a>
| |
− | <h3>Field Detail</h3>
| |
− | <a name="parameterChanged">
| |
− | <!-- -->
| |
− | </a>
| |
− | <ul class="blockListLast">
| |
− | <li class="blockList">
| |
− | <h4>parameterChanged</h4>
| |
− | <pre>public final <a href="../../../ru/neurotech/common/SubscribersNotifier.html" title="class in ru.neurotech.common">SubscribersNotifier</a><<a href="../../../ru/neurotech/neurosdk/parameters/ParameterName.html" title="enum in ru.neurotech.neurosdk.parameters">ParameterName</a>> parameterChanged</pre>
| |
− | <div class="block">Subscribe this event to receive notifications about changes of device parameters</div>
| |
− | </li>
| |
− | </ul>
| |
− | </li>
| |
− | </ul>
| |
− | <!-- ============ METHOD DETAIL ========== -->
| |
− | <ul class="blockList">
| |
− | <li class="blockList"><a name="method.detail">
| |
− | <!-- -->
| |
− | </a>
| |
− | <h3>Method Detail</h3>
| |
− | <a name="finalize--">
| |
− | <!-- -->
| |
− | </a>
| |
− | <ul class="blockList">
| |
− | <li class="blockList">
| |
− | <h4>finalize</h4>
| |
− | <pre>public void finalize()
| |
− | throws java.lang.Throwable</pre>
| |
− | <dl>
| |
− | <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
| |
− | <dd><code>finalize</code> in class <code>java.lang.Object</code></dd>
| |
− | <dt><span class="throwsLabel">Throws:</span></dt>
| |
− | <dd><code>java.lang.Throwable</code></dd>
| |
− | </dl>
| |
− | </li>
| |
− | </ul>
| |
− | <a name="connect--">
| |
− | <!-- -->
| |
− | </a>
| |
− | <ul class="blockList">
| |
− | <li class="blockList">
| |
− | <h4>connect</h4>
| |
− | <pre>public void connect()</pre>
| |
− | <div class="block">Tries to establish connection with device
| |
− | Check DeviceState parameter or subscribe parameterChanged event for operation result</div>
| |
− | </li>
| |
− | </ul>
| |
− | <a name="disconnect--">
| |
− | <!-- -->
| |
− | </a>
| |
− | <ul class="blockList">
| |
− | <li class="blockList">
| |
− | <h4>disconnect</h4>
| |
− | <pre>public void disconnect()</pre>
| |
− | <div class="block">Disconnects from device
| |
− | Check DeviceState parameter or subscribe parameterChanged event for operation result</div>
| |
− | </li>
| |
− | </ul>
| |
− | <a name="channels--">
| |
− | <!-- -->
| |
− | </a>
| |
− | <ul class="blockList">
| |
− | <li class="blockList">
| |
− | <h4>channels</h4>
| |
− | <pre>public <a href="../../../ru/neurotech/neurosdk/channels/ChannelInfo.html" title="interface in ru.neurotech.neurosdk.channels">ChannelInfo</a>[] channels()</pre>
| |
− | <div class="block">Returns information about supported channels
| |
− | Check this information before creation of channel. If device does not support channel,
| |
− | channel object won't be initialized with it</div>
| |
− | <dl>
| |
− | <dt><span class="returnLabel">Returns:</span></dt>
| |
− | <dd>Array of channel info objects</dd>
| |
− | </dl>
| |
− | </li>
| |
− | </ul>
| |
− | <a name="commands--">
| |
− | <!-- -->
| |
− | </a>
| |
− | <ul class="blockList">
| |
− | <li class="blockList">
| |
− | <h4>commands</h4>
| |
− | <pre>public <a href="../../../ru/neurotech/neurosdk/parameters/Command.html" title="enum in ru.neurotech.neurosdk.parameters">Command</a>[] commands()</pre>
| |
− | <div class="block">Returns supported commands of device</div>
| |
− | <dl>
| |
− | <dt><span class="returnLabel">Returns:</span></dt>
| |
− | <dd>Array of supported commands</dd>
| |
− | </dl>
| |
− | </li>
| |
− | </ul>
| |
− | <a name="parameters--">
| |
− | <!-- -->
| |
− | </a>
| |
− | <ul class="blockList">
| |
− | <li class="blockList">
| |
− | <h4>parameters</h4>
| |
− | <pre>public <a href="../../../ru/neurotech/neurosdk/parameters/Parameter.html" title="class in ru.neurotech.neurosdk.parameters">Parameter</a>[] parameters()</pre>
| |
− | <div class="block">Returns all available parameters of device, their types and access rights</div>
| |
− | <dl>
| |
− | <dt><span class="returnLabel">Returns:</span></dt>
| |
− | <dd>Array of available parameters</dd>
| |
− | </dl>
| |
− | </li>
| |
− | </ul>
| |
− | <a name="execute-ru.neurotech.neurosdk.parameters.Command-">
| |
− | <!-- -->
| |
− | </a>
| |
− | <ul class="blockList">
| |
− | <li class="blockList">
| |
− | <h4>execute</h4>
| |
− | <pre>public boolean execute(<a href="../../../ru/neurotech/neurosdk/parameters/Command.html" title="enum in ru.neurotech.neurosdk.parameters">Command</a> cmd)</pre>
| |
− | <div class="block">Tries to execute command and returns value indicating operations success. Will throw if
| |
− | device does not support specified command. To get supported commands call commands() method</div>
| |
− | <dl>
| |
− | <dt><span class="paramLabel">Parameters:</span></dt>
| |
− | <dd><code>cmd</code> - Command to execute</dd>
| |
− | <dt><span class="returnLabel">Returns:</span></dt>
| |
− | <dd>Operation success indicator</dd>
| |
− | <dt><span class="throwsLabel">Throws:</span></dt>
| |
− | <dd><code>java.lang.UnsupportedOperationException</code></dd>
| |
− | </dl>
| |
− | </li>
| |
− | </ul>
| |
− | <a name="readParam-ru.neurotech.neurosdk.parameters.ParameterName-">
| |
− | <!-- -->
| |
− | </a>
| |
− | <ul class="blockList">
| |
− | <li class="blockList">
| |
− | <h4>readParam</h4>
| |
− | <pre>public <ParamType> ParamType readParam(<a href="../../../ru/neurotech/neurosdk/parameters/ParameterName.html" title="enum in ru.neurotech.neurosdk.parameters">ParameterName</a> param)</pre>
| |
− | <div class="block">Return value of specified parameter of device. Will throw if parameter does not present in
| |
− | device. To get supported parameters and type information for parameter call parameters()
| |
− | method. It returns Parameter object which consists of parameter name, type and access mode</div>
| |
− | <dl>
| |
− | <dt><span class="paramLabel">Parameters:</span></dt>
| |
− | <dd><code>param</code> - ParameterName to read</dd>
| |
− | <dt><span class="returnLabel">Returns:</span></dt>
| |
− | <dd>Parameter value</dd>
| |
− | <dt><span class="throwsLabel">Throws:</span></dt>
| |
− | <dd><code>java.lang.UnsupportedOperationException</code></dd>
| |
− | </dl>
| |
− | </li>
| |
− | </ul>
| |
− | <a name="setParam-ru.neurotech.neurosdk.parameters.ParameterName-java.lang.Object-">
| |
− | <!-- -->
| |
− | </a>
| |
− | <ul class="blockListLast">
| |
− | <li class="blockList">
| |
− | <h4>setParam</h4>
| |
− | <pre>public boolean setParam(<a href="../../../ru/neurotech/neurosdk/parameters/ParameterName.html" title="enum in ru.neurotech.neurosdk.parameters">ParameterName</a> param,
| |
− | java.lang.Object value)</pre>
| |
− | <div class="block">Sets value for specified parameter and returns value indicating success of operation. Will
| |
− | throw if parameter does not present in device or has only Read access mode. To get supported
| |
− | parameters and type information for parameter call parameters() method. It returns Parameter
| |
− | object which consists of parameter name, type and access mode</div>
| |
− | <dl>
| |
− | <dt><span class="paramLabel">Parameters:</span></dt>
| |
− | <dd><code>param</code> - Name of parameter to set</dd>
| |
− | <dd><code>value</code> - Parameter value</dd>
| |
− | <dt><span class="returnLabel">Returns:</span></dt>
| |
− | <dd>Operation success</dd>
| |
− | <dt><span class="throwsLabel">Throws:</span></dt>
| |
− | <dd><code>java.lang.UnsupportedOperationException</code></dd>
| |
− | </dl>
| |
− | </li>
| |
− | </ul>
| |
− | </li>
| |
− | </ul>
| |
− | </li>
| |
− | </ul>
| |
− | </div>
| |
− | </div>
| |
− | <!-- ========= END OF CLASS DATA ========= -->
| |
− | <!-- ======= START OF BOTTOM NAVBAR ====== -->
| |
− | <div class="bottomNav"><a name="navbar.bottom">
| |
− | <!-- -->
| |
− | </a>
| |
− | <div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
| |
− | <a name="navbar.bottom.firstrow">
| |
− | <!-- -->
| |
− | </a>
| |
− | <ul class="navList" title="Navigation">
| |
− | <li><a href="../../../overview-summary.html">Overview</a></li>
| |
− | <li><a href="package-summary.html">Package</a></li>
| |
− | <li class="navBarCell1Rev">Class</li>
| |
− | <li><a href="package-tree.html">Tree</a></li>
| |
− | <li><a href="../../../deprecated-list.html">Deprecated</a></li>
| |
− | <li><a href="../../../index-files/index-1.html">Index</a></li>
| |
− | <li><a href="../../../help-doc.html">Help</a></li>
| |
− | </ul>
| |
− | </div>
| |
− | <div class="subNav">
| |
− | <ul class="navList">
| |
− | <li>Prev Class</li>
| |
− | <li><a href="../../../ru/neurotech/neurosdk/DeviceScanner.html" title="class in ru.neurotech.neurosdk"><span class="typeNameLink">Next Class</span></a></li>
| |
− | </ul>
| |
− | <ul class="navList">
| |
− | <li><a href="../../../index.html?ru/neurotech/neurosdk/Device.html" target="_top">Frames</a></li>
| |
− | <li><a href="Device.html" target="_top">No Frames</a></li>
| |
− | </ul>
| |
− | <ul class="navList" id="allclasses_navbar_bottom">
| |
− | <li><a href="../../../allclasses-noframe.html">All Classes</a></li>
| |
− | </ul>
| |
− | <div>
| |
− | <script type="text/javascript"><!--
| |
− | allClassesLink = document.getElementById("allclasses_navbar_bottom");
| |
− | if(window==top) {
| |
− | allClassesLink.style.display = "block";
| |
− | }
| |
− | else {
| |
− | allClassesLink.style.display = "none";
| |
− | }
| |
− | //-->
| |
− | </script>
| |
− | </div>
| |
− | <div>
| |
− | <ul class="subNavList">
| |
− | <li>Summary: </li>
| |
− | <li>Nested | </li>
| |
− | <li><a href="#field.summary">Field</a> | </li>
| |
− | <li>Constr | </li>
| |
− | <li><a href="#method.summary">Method</a></li>
| |
− | </ul>
| |
− | <ul class="subNavList">
| |
− | <li>Detail: </li>
| |
− | <li><a href="#field.detail">Field</a> | </li>
| |
− | <li>Constr | </li>
| |
− | <li><a href="#method.detail">Method</a></li>
| |
− | </ul>
| |
− | </div>
| |
− | <a name="skip.navbar.bottom">
| |
− | <!-- -->
| |
− | </a></div>
| |
− | <!-- ======== END OF BOTTOM NAVBAR ======= -->
| |
− | </body>
| |
− | </html>
| |
The Device class is an abstraction for NeuroMD BLE devices. This abstraction provides functions for changing of device state by executing commands and setting parameters. Each device have different sets of supported commands and parameters, Device class has functions designed to get information about these sets. Callibri and Braibit devices has different parameters sets and provides different ways to access them. Device class hides all differences behind its interface and provides universal way to read and write parameters, execute commands and receive biopotential signals.