Commit e08e204a authored by Aditya Pradhan's avatar Aditya Pradhan

Now the IP address is visible on the terminal itself

parent cf7eaebe
# WIRELESS X # WIRELESS X
## Git repository link
https://git.cse.iitb.ac.in/rajneeshkatkam/PARA-Site_WirelessX
## Installation Setup ## Installation Setup
...@@ -23,8 +24,7 @@ ...@@ -23,8 +24,7 @@
a. Install the Wireless-X apk on Android smartphone and give required permissions. a. Install the Wireless-X apk on Android smartphone and give required permissions.
b. Now enter the IP address of the Laptop/ Desktop on which the server is hosted. You can type the below command in terminal to get host IP: b. Now, enter the IP address displayed in the terminal (on which the server is running) into the android application.
$ hostname -I | awk '{print $1}'
c. Click on Test Button to test the connection of smartphone with the server. If failed, Recheck if you have entered correct IP address of Laptop/ Desktop (on which the server is running). c. Click on Test Button to test the connection of smartphone with the server. If failed, Recheck if you have entered correct IP address of Laptop/ Desktop (on which the server is running).
...@@ -73,6 +73,8 @@ ...@@ -73,6 +73,8 @@
Note: ffplay Note: ffplay
## Working (TODO)
## References ## References
......
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Wireless-X: MainActivity.java File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="ic_launcher.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Wireless-X
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.0 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> </div>
<div class="headertitle">
<div class="title">MainActivity.java File Reference</div> </div>
</div><!--header-->
<div class="contents">
<p>This is where the main code of the Wireless-X android application is written.
<a href="#details">More...</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html">com.example.wireless_x.MainActivity</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This is where the main code of the Wireless-X android application is written. <a href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><b>com.example.wireless_x.MainActivity.TestIP_Thread</b></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Tests whether the server's IP address is valid or not. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><b>com.example.wireless_x.MainActivity.SendMouseCoordinatesThread</b></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sends the mouse coordinates to the server. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><b>com.example.wireless_x.MainActivity.SendMouseClicks</b></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Used to send the mouse click events to the server. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><b>com.example.wireless_x.MainActivity.SendKeyboardPressesThread</b></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Used to send the keyboard events to the server. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>This is where the main code of the Wireless-X android application is written. </p>
</div></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="http://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.0
</small></address>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Wireless-X: Wireless-X_server.py File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="ic_launcher.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Wireless-X
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.0 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> &#124;
<a href="#var-members">Variables</a> </div>
<div class="headertitle">
<div class="title">Wireless-X_server.py File Reference</div> </div>
</div><!--header-->
<div class="contents">
<p>This includes the code for the server-side of Wireless-X.
<a href="#details">More...</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:a89ff6223b623131684a93295f32bc976"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Wireless-X__server_8py.html#a89ff6223b623131684a93295f32bc976">Wireless-X_server.bind_sockets</a> ()</td></tr>
<tr class="memdesc:a89ff6223b623131684a93295f32bc976"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function establishes two sockets for receiving camera frames as well as mouse and keyboard actions. <a href="Wireless-X__server_8py.html#a89ff6223b623131684a93295f32bc976">More...</a><br /></td></tr>
<tr class="separator:a89ff6223b623131684a93295f32bc976"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6db0464af01126b82f9ff27839b4d236"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Wireless-X__server_8py.html#a6db0464af01126b82f9ff27839b4d236">Wireless-X_server.mouse_keyboard_connections</a> ()</td></tr>
<tr class="memdesc:a6db0464af01126b82f9ff27839b4d236"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function decodes the received mouse and keyboard actions and acts accordingly. <a href="Wireless-X__server_8py.html#a6db0464af01126b82f9ff27839b4d236">More...</a><br /></td></tr>
<tr class="separator:a6db0464af01126b82f9ff27839b4d236"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa577d8e17a9ed9e9765dfad47310f8e4"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Wireless-X__server_8py.html#aa577d8e17a9ed9e9765dfad47310f8e4">Wireless-X_server.camera_stream_connections</a> ()</td></tr>
<tr class="memdesc:aa577d8e17a9ed9e9765dfad47310f8e4"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function is responsible for handling the camera frames. <a href="Wireless-X__server_8py.html#aa577d8e17a9ed9e9765dfad47310f8e4">More...</a><br /></td></tr>
<tr class="separator:aa577d8e17a9ed9e9765dfad47310f8e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a79901b301ca92aaf0cf102d9eb534a91"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Wireless-X__server_8py.html#a79901b301ca92aaf0cf102d9eb534a91">Wireless-X_server.listening_connections</a> ()</td></tr>
<tr class="memdesc:a79901b301ca92aaf0cf102d9eb534a91"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function is responsible for listening to connections. <a href="Wireless-X__server_8py.html#a79901b301ca92aaf0cf102d9eb534a91">More...</a><br /></td></tr>
<tr class="separator:a79901b301ca92aaf0cf102d9eb534a91"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
Variables</h2></td></tr>
<tr class="memitem:ab168597dce547df306f8cef48714f256"><td class="memItemLeft" align="right" valign="top"><a id="ab168597dce547df306f8cef48714f256"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Wireless-X__server_8py.html#ab168597dce547df306f8cef48714f256">Wireless-X_server.virtualCamera</a> = subprocess.run([&quot;sudo&quot;, &quot;modprobe&quot;, &quot;v4l2loopback&quot;, &quot;devices=1&quot;, &quot;video_nr=20&quot;, &quot;card_label='Wireless-X Camera'&quot;, &quot;exclusive_caps=1&quot;])</td></tr>
<tr class="memdesc:ab168597dce547df306f8cef48714f256"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a virtual camera on the laptop/PC. <br /></td></tr>
<tr class="separator:ab168597dce547df306f8cef48714f256"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af68defefb623d24f4e1976c3a061bf98"><td class="memItemLeft" align="right" valign="top"><a id="af68defefb623d24f4e1976c3a061bf98"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Wireless-X__server_8py.html#af68defefb623d24f4e1976c3a061bf98">Wireless-X_server.width</a></td></tr>
<tr class="memdesc:af68defefb623d24f4e1976c3a061bf98"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores the width of the screen. <br /></td></tr>
<tr class="separator:af68defefb623d24f4e1976c3a061bf98"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5fbc4cec3d85ed72e2b15df06cc732fc"><td class="memItemLeft" align="right" valign="top"><a id="a5fbc4cec3d85ed72e2b15df06cc732fc"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Wireless-X__server_8py.html#a5fbc4cec3d85ed72e2b15df06cc732fc">Wireless-X_server.height</a></td></tr>
<tr class="memdesc:a5fbc4cec3d85ed72e2b15df06cc732fc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores the height of the screen. <br /></td></tr>
<tr class="separator:a5fbc4cec3d85ed72e2b15df06cc732fc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aaebd0084b5c865b4d6ee83691622e178"><td class="memItemLeft" align="right" valign="top"><a id="aaebd0084b5c865b4d6ee83691622e178"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Wireless-X__server_8py.html#aaebd0084b5c865b4d6ee83691622e178">Wireless-X_server.curr_x</a></td></tr>
<tr class="memdesc:aaebd0084b5c865b4d6ee83691622e178"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores the x-coordinate of the current mouse location. <br /></td></tr>
<tr class="separator:aaebd0084b5c865b4d6ee83691622e178"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a764bc7fd7cda5a9c302abbd1c0b9ce9d"><td class="memItemLeft" align="right" valign="top"><a id="a764bc7fd7cda5a9c302abbd1c0b9ce9d"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Wireless-X__server_8py.html#a764bc7fd7cda5a9c302abbd1c0b9ce9d">Wireless-X_server.curr_y</a></td></tr>
<tr class="memdesc:a764bc7fd7cda5a9c302abbd1c0b9ce9d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores the y-coordinate of the current mouse location. <br /></td></tr>
<tr class="separator:a764bc7fd7cda5a9c302abbd1c0b9ce9d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1450e29f8b058a690ac172cb516bd558"><td class="memItemLeft" align="right" valign="top"><a id="a1450e29f8b058a690ac172cb516bd558"></a>
def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Wireless-X__server_8py.html#a1450e29f8b058a690ac172cb516bd558">Wireless-X_server.remote_x</a> = curr_x/2</td></tr>
<tr class="memdesc:a1450e29f8b058a690ac172cb516bd558"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores the mid of x-coordinate of current mouse location. <br /></td></tr>
<tr class="separator:a1450e29f8b058a690ac172cb516bd558"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adeae735ccc3dbb8abd29b300dbc830eb"><td class="memItemLeft" align="right" valign="top"><a id="adeae735ccc3dbb8abd29b300dbc830eb"></a>
def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Wireless-X__server_8py.html#adeae735ccc3dbb8abd29b300dbc830eb">Wireless-X_server.remote_y</a> = curr_y/2</td></tr>
<tr class="memdesc:adeae735ccc3dbb8abd29b300dbc830eb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores the mid of y-coordinate of current mouse location. <br /></td></tr>
<tr class="separator:adeae735ccc3dbb8abd29b300dbc830eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a91f42afd61bbcbd6f88f4f9d0ac3cb45"><td class="memItemLeft" align="right" valign="top"><a id="a91f42afd61bbcbd6f88f4f9d0ac3cb45"></a>
string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Wireless-X__server_8py.html#a91f42afd61bbcbd6f88f4f9d0ac3cb45">Wireless-X_server.s</a> = ''</td></tr>
<tr class="memdesc:a91f42afd61bbcbd6f88f4f9d0ac3cb45"><td class="mdescLeft">&#160;</td><td class="mdescRight">Socket used for receiving keyboard and mouse related actions. <br /></td></tr>
<tr class="separator:a91f42afd61bbcbd6f88f4f9d0ac3cb45"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a45dcde7bcdcb4693f7800b933f376ee0"><td class="memItemLeft" align="right" valign="top"><a id="a45dcde7bcdcb4693f7800b933f376ee0"></a>
string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Wireless-X__server_8py.html#a45dcde7bcdcb4693f7800b933f376ee0">Wireless-X_server.cameraSocket</a> = ''</td></tr>
<tr class="memdesc:a45dcde7bcdcb4693f7800b933f376ee0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Socket used for receiving the camera frames of user's smartphone. <br /></td></tr>
<tr class="separator:a45dcde7bcdcb4693f7800b933f376ee0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afa870e05abcd643a6414cb70bbe57cc6"><td class="memItemLeft" align="right" valign="top"><a id="afa870e05abcd643a6414cb70bbe57cc6"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Wireless-X__server_8py.html#afa870e05abcd643a6414cb70bbe57cc6">Wireless-X_server.img_width</a> = 720</td></tr>
<tr class="memdesc:afa870e05abcd643a6414cb70bbe57cc6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Width of the camera frame. <br /></td></tr>
<tr class="separator:afa870e05abcd643a6414cb70bbe57cc6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8eebf5dc6b9c928115225a1e3588c3c5"><td class="memItemLeft" align="right" valign="top"><a id="a8eebf5dc6b9c928115225a1e3588c3c5"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Wireless-X__server_8py.html#a8eebf5dc6b9c928115225a1e3588c3c5">Wireless-X_server.img_height</a> = 480</td></tr>
<tr class="memdesc:a8eebf5dc6b9c928115225a1e3588c3c5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Height of the camera frame. <br /></td></tr>
<tr class="separator:a8eebf5dc6b9c928115225a1e3588c3c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a13f596ef10f1688c79547c0bc99ea75f"><td class="memItemLeft" align="right" valign="top"><a id="a13f596ef10f1688c79547c0bc99ea75f"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Wireless-X__server_8py.html#a13f596ef10f1688c79547c0bc99ea75f">Wireless-X_server.camera</a> = pyfakewebcam.FakeWebcam('/dev/video20', img_width, img_height)</td></tr>
<tr class="memdesc:a13f596ef10f1688c79547c0bc99ea75f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Virtual webcam device. <br /></td></tr>
<tr class="separator:a13f596ef10f1688c79547c0bc99ea75f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a33b4715674007489c6b6756bc8ef4b70"><td class="memItemLeft" align="right" valign="top"><a id="a33b4715674007489c6b6756bc8ef4b70"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Wireless-X__server_8py.html#a33b4715674007489c6b6756bc8ef4b70">Wireless-X_server.thread_run</a> = True</td></tr>
<tr class="memdesc:a33b4715674007489c6b6756bc8ef4b70"><td class="mdescLeft">&#160;</td><td class="mdescRight">The camera and keyboard-mouse sockets receive user requests until this variable is set to 'True'. <br /></td></tr>
<tr class="separator:a33b4715674007489c6b6756bc8ef4b70"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a58e2d0036cb3910e655408e179feec10"><td class="memItemLeft" align="right" valign="top"><a id="a58e2d0036cb3910e655408e179feec10"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Wireless-X__server_8py.html#a58e2d0036cb3910e655408e179feec10">Wireless-X_server.keyboard</a> = KeyboardController()</td></tr>
<tr class="memdesc:a58e2d0036cb3910e655408e179feec10"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initializing the KeyboardController object. <br /></td></tr>
<tr class="separator:a58e2d0036cb3910e655408e179feec10"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5b66540b63fab3022f0c750bac663345"><td class="memItemLeft" align="right" valign="top"><a id="a5b66540b63fab3022f0c750bac663345"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Wireless-X__server_8py.html#a5b66540b63fab3022f0c750bac663345">Wireless-X_server.mouse</a> = MouseController()</td></tr>
<tr class="memdesc:a5b66540b63fab3022f0c750bac663345"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initializing the MouseController object. <br /></td></tr>
<tr class="separator:a5b66540b63fab3022f0c750bac663345"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3b73746def437cc51ef5946752dd09ad"><td class="memItemLeft" align="right" valign="top"><a id="a3b73746def437cc51ef5946752dd09ad"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Wireless-X__server_8py.html#a3b73746def437cc51ef5946752dd09ad">Wireless-X_server.mouse_speed</a> = 2</td></tr>
<tr class="memdesc:a3b73746def437cc51ef5946752dd09ad"><td class="mdescLeft">&#160;</td><td class="mdescRight">Speed of mouse movement. <br /></td></tr>
<tr class="separator:a3b73746def437cc51ef5946752dd09ad"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a84a42e06c60f25a66338c51f4fcf5f99"><td class="memItemLeft" align="right" valign="top"><a id="a84a42e06c60f25a66338c51f4fcf5f99"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Wireless-X__server_8py.html#a84a42e06c60f25a66338c51f4fcf5f99">Wireless-X_server.screenshot_count</a> = 0</td></tr>
<tr class="memdesc:a84a42e06c60f25a66338c51f4fcf5f99"><td class="mdescLeft">&#160;</td><td class="mdescRight">Screenshot counter to keep track of screenshots. <br /></td></tr>
<tr class="separator:a84a42e06c60f25a66338c51f4fcf5f99"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2bfd6439764b53b8df612bbc0335a07c"><td class="memItemLeft" align="right" valign="top"><a id="a2bfd6439764b53b8df612bbc0335a07c"></a>
dictionary&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Wireless-X__server_8py.html#a2bfd6439764b53b8df612bbc0335a07c">Wireless-X_server.special_key_android_dictionary</a> = {&quot;F1&quot;: &quot;F1&quot;, &quot;F2&quot;:&quot;F2&quot;, &quot;F3&quot;:&quot;F3&quot;, &quot;F4&quot;:&quot;F4&quot;, &quot;F5&quot;:&quot;F5&quot;, &quot;F6&quot;:&quot;F6&quot;, &quot;F7&quot;:&quot;F7&quot;, &quot;F8&quot;:&quot;F8&quot;, &quot;F9&quot;:&quot;F9&quot;, &quot;F10&quot;:&quot;F10&quot;, &quot;F11&quot;:&quot;F11&quot;, &quot;F12&quot;:&quot;F12&quot;, &quot;Alt&quot;:&quot;ALT&quot;, &quot;Backspace&quot;:&quot;BACKSPACE&quot;, &quot;Caps\nLock&quot;:&quot;CAPS_LOCK&quot;, &quot;Ctrl&quot;:&quot;CONTROL&quot;, &quot;Delete&quot;:&quot;DELETE&quot;, &quot;&quot;:&quot;DOWN_ARROW&quot;, &quot;End&quot;:&quot;END&quot;, &quot;Esc&quot;:&quot;ESCAPE&quot;, &quot;Home&quot;:&quot;HOME&quot;, &quot;&quot;:&quot;LEFT_ARROW&quot;, &quot;META&quot;:&quot;META&quot;, &quot;Page Down&quot;:&quot;PAGE_DOWN&quot;, &quot;Page Up&quot;:&quot;PAGE_UP&quot;, &quot;Enter&quot;:&quot;RETURN&quot;, &quot;&quot;:&quot;RIGHT_ARROW&quot;, &quot;Shift&quot;:&quot;SHIFT&quot;, &quot;Space&quot;:&quot;SPACE&quot;, &quot;&quot;:&quot;UP_ARROW&quot;, &quot;Tab&quot;:&quot;Tab&quot;}</td></tr>
<tr class="memdesc:a2bfd6439764b53b8df612bbc0335a07c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Maps the keys in keyboard layout to the actual keyboard keys. <br /></td></tr>
<tr class="separator:a2bfd6439764b53b8df612bbc0335a07c"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>This includes the code for the server-side of Wireless-X. </p>
<p>The server running on laptop or PC is responsible for receiving the actions performed by user on the Wireless-X android app as well as receiving the camera frames of the user's smartphone (if the user has turned) on the camera). Such actions are transmitted to the server in encoded form, the server decodes the received message and instructs the laptop or PC to perform the action described in that message. </p>
</div><h2 class="groupheader">Function Documentation</h2>
<a id="a89ff6223b623131684a93295f32bc976"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a89ff6223b623131684a93295f32bc976">&#9670;&nbsp;</a></span>bind_sockets()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">def Wireless-X_server.bind_sockets </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function establishes two sockets for receiving camera frames as well as mouse and keyboard actions. </p>
<pre class="fragment">This function creates a camera socket which is responsible for receiving the camera frames, and it also
creates another socket which is responsible for receiving the keyboard and mouse frames.</pre>
</div>
</div>
<a id="aa577d8e17a9ed9e9765dfad47310f8e4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa577d8e17a9ed9e9765dfad47310f8e4">&#9670;&nbsp;</a></span>camera_stream_connections()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">def Wireless-X_server.camera_stream_connections </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function is responsible for handling the camera frames. </p>
<pre class="fragment">This function uses the 'OpenCV' library to decode and resize the camera frame. Then, this frame is scheduled on
the virtual webcam device created using 'pyfakewebcam' library.</pre>
</div>
</div>
<a id="a79901b301ca92aaf0cf102d9eb534a91"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a79901b301ca92aaf0cf102d9eb534a91">&#9670;&nbsp;</a></span>listening_connections()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">def Wireless-X_server.listening_connections </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function is responsible for listening to connections. </p>
<pre class="fragment">This function creates two threads corresponding to the two sockets, one for handling mouse and keyboard events
and the other for handling camera frames received from the user's smartphone.</pre>
</div>
</div>
<a id="a6db0464af01126b82f9ff27839b4d236"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6db0464af01126b82f9ff27839b4d236">&#9670;&nbsp;</a></span>mouse_keyboard_connections()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">def Wireless-X_server.mouse_keyboard_connections </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function decodes the received mouse and keyboard actions and acts accordingly. </p>
<pre class="fragment">This function checks if the message received corresponds to a mouse action (left-click, scroll, etc.) or a keyboard action
(such as keypress). It then instructs the laptop to perform these actions, using the 'autopy' and 'pynput' libraries. Some special
characters in keyboard are not supported by 'autopy' library, so the actions corresponding to these special characters are performed
by the 'pynput' library, other key actions are handled by the 'autopy' library. In case of mouse, the 'autopy' library was not that
efficient, so we used the 'pynput' library.</pre>
</div>
</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="http://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.0
</small></address>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Wireless-X: Class List</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="ic_launcher.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Wireless-X
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.0 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">Class List</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock">Here are the classes, structs, unions and interfaces with brief descriptions:</div><div class="directory">
<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span><span onclick="javascript:toggleLevel(3);">3</span><span onclick="javascript:toggleLevel(4);">4</span>]</div><table class="directory">
<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>com</b></td><td class="desc"></td></tr>
<tr id="row_0_0_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_0_" class="arrow" onclick="toggleFolder('0_0_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>example</b></td><td class="desc"></td></tr>
<tr id="row_0_0_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_0_0_" class="arrow" onclick="toggleFolder('0_0_0_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>wireless_x</b></td><td class="desc"></td></tr>
<tr id="row_0_0_0_0_"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html" target="_self">MainActivity</a></td><td class="desc">This is where the main code of the Wireless-X android application is written </td></tr>
</table>
</div><!-- directory -->
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="http://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.0
</small></address>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Wireless-X: Member List</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="ic_launcher.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Wireless-X
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.0 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><b>com</b></li><li class="navelem"><b>example</b></li><li class="navelem"><b>wireless_x</b></li><li class="navelem"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html">MainActivity</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">com.example.wireless_x.MainActivity Member List</div> </div>
</div><!--header-->
<div class="contents">
<p>This is the complete list of members for <a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html">com.example.wireless_x.MainActivity</a>, including all inherited members.</p>
<table class="directory">
<tr class="even"><td class="entry"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a6e4df6530f7752cf5ce3ea803518796b">camera_on_off</a>(View view)</td><td class="entry"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html">com.example.wireless_x.MainActivity</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a57bdabe7331b7b6c2366c5a712421eed">camera_switch</a>(View view)</td><td class="entry"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html">com.example.wireless_x.MainActivity</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a4d629b747ed093762bec62919da98983">enter_wireless_x</a>(View view)</td><td class="entry"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html">com.example.wireless_x.MainActivity</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a9850053fcd3feb95047e9e7cd09a1bc6">getEmojiByUnicode</a>(int unicode)</td><td class="entry"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html">com.example.wireless_x.MainActivity</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#af9efad2592afbec052882809d6db191e">keyPress</a>(View view)</td><td class="entry"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html">com.example.wireless_x.MainActivity</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#af2ec32fa67be3d839f1a9c089328315a">layout_switch</a>(View view)</td><td class="entry"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html">com.example.wireless_x.MainActivity</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a4ba20fbfd80e439a90dbc2fadabe175f">mouse_click</a>(View view)</td><td class="entry"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html">com.example.wireless_x.MainActivity</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#ad092f1f66bf81130a5089f32130e1879">mouse_on_off</a>(View view)</td><td class="entry"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html">com.example.wireless_x.MainActivity</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#af4be89ec8bce3fa9bddb1c0151c3e592">onBackPressed</a>()</td><td class="entry"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html">com.example.wireless_x.MainActivity</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a8777e09d0d879a9f63f089ef62746b5b">onCameraFrame</a>(CameraBridgeViewBase.CvCameraViewFrame inputFrame)</td><td class="entry"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html">com.example.wireless_x.MainActivity</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a2afda76ce41917b69b043fb5b5d1ee32">onCreate</a>(Bundle savedInstanceState)</td><td class="entry"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html">com.example.wireless_x.MainActivity</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
<tr><td class="entry"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a557ea163daf4e60c184a49812aaf87c4">onDestroy</a>()</td><td class="entry"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html">com.example.wireless_x.MainActivity</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#ae977f58ff77f0c94805aa5e3e7d2e41d">onPause</a>()</td><td class="entry"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html">com.example.wireless_x.MainActivity</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#ad0be1b394cf38591e8c3b4fddcb0847c">onRequestPermissionsResult</a>(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)</td><td class="entry"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html">com.example.wireless_x.MainActivity</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a22e8af693e360c03ba5b33eef44c133a">onResume</a>()</td><td class="entry"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html">com.example.wireless_x.MainActivity</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a13c68af3d44accfe973b3dc661daf9e4">shiftPress</a>(View view)</td><td class="entry"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html">com.example.wireless_x.MainActivity</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#aad7a718ec54b19184dc7e301fde42f0e">test_IP</a>(View view)</td><td class="entry"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html">com.example.wireless_x.MainActivity</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="http://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.0
</small></address>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Wireless-X: com.example.wireless_x.MainActivity Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="ic_launcher.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Wireless-X
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.0 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><b>com</b></li><li class="navelem"><b>example</b></li><li class="navelem"><b>wireless_x</b></li><li class="navelem"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html">MainActivity</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pro-methods">Protected Member Functions</a> &#124;
<a href="classcom_1_1example_1_1wireless__x_1_1MainActivity-members.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">com.example.wireless_x.MainActivity Class Reference</div> </div>
</div><!--header-->
<div class="contents">
<p>This is where the main code of the Wireless-X android application is written.
<a href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#details">More...</a></p>
<div class="dynheader">
Inheritance diagram for com.example.wireless_x.MainActivity:</div>
<div class="dyncontent">
<div class="center">
<img src="classcom_1_1example_1_1wireless__x_1_1MainActivity.png" alt=""/>
</div></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><b>SendKeyboardPressesThread</b></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Used to send the keyboard events to the server. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><b>SendMouseClicks</b></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Used to send the mouse click events to the server. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><b>SendMouseCoordinatesThread</b></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sends the mouse coordinates to the server. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><b>TestIP_Thread</b></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Tests whether the server's IP address is valid or not. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a13c68af3d44accfe973b3dc661daf9e4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a13c68af3d44accfe973b3dc661daf9e4">shiftPress</a> (View view)</td></tr>
<tr class="memdesc:a13c68af3d44accfe973b3dc661daf9e4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Displays the keys which correspond to special characters. <a href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a13c68af3d44accfe973b3dc661daf9e4">More...</a><br /></td></tr>
<tr class="separator:a13c68af3d44accfe973b3dc661daf9e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aad7a718ec54b19184dc7e301fde42f0e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#aad7a718ec54b19184dc7e301fde42f0e">test_IP</a> (View view)</td></tr>
<tr class="memdesc:aad7a718ec54b19184dc7e301fde42f0e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Describes the action to be performed when Test IP is clicked on the app. <a href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#aad7a718ec54b19184dc7e301fde42f0e">More...</a><br /></td></tr>
<tr class="separator:aad7a718ec54b19184dc7e301fde42f0e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9850053fcd3feb95047e9e7cd09a1bc6"><td class="memItemLeft" align="right" valign="top"><a id="a9850053fcd3feb95047e9e7cd09a1bc6"></a>
String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a9850053fcd3feb95047e9e7cd09a1bc6">getEmojiByUnicode</a> (int unicode)</td></tr>
<tr class="memdesc:a9850053fcd3feb95047e9e7cd09a1bc6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the emoji corresponding to an unicode. <br /></td></tr>
<tr class="separator:a9850053fcd3feb95047e9e7cd09a1bc6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4d629b747ed093762bec62919da98983"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a4d629b747ed093762bec62919da98983">enter_wireless_x</a> (View view)</td></tr>
<tr class="memdesc:a4d629b747ed093762bec62919da98983"><td class="mdescLeft">&#160;</td><td class="mdescRight">Performs the action when the "Enter Wireless-X" button is clicked. <a href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a4d629b747ed093762bec62919da98983">More...</a><br /></td></tr>
<tr class="separator:a4d629b747ed093762bec62919da98983"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af4be89ec8bce3fa9bddb1c0151c3e592"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#af4be89ec8bce3fa9bddb1c0151c3e592">onBackPressed</a> ()</td></tr>
<tr class="memdesc:af4be89ec8bce3fa9bddb1c0151c3e592"><td class="mdescLeft">&#160;</td><td class="mdescRight">Performs the action when the back button is pressed. <a href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#af4be89ec8bce3fa9bddb1c0151c3e592">More...</a><br /></td></tr>
<tr class="separator:af4be89ec8bce3fa9bddb1c0151c3e592"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad092f1f66bf81130a5089f32130e1879"><td class="memItemLeft" align="right" valign="top"><a id="ad092f1f66bf81130a5089f32130e1879"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#ad092f1f66bf81130a5089f32130e1879">mouse_on_off</a> (View view)</td></tr>
<tr class="memdesc:ad092f1f66bf81130a5089f32130e1879"><td class="mdescLeft">&#160;</td><td class="mdescRight">Enables or disables the visibility of Mouse UI. <br /></td></tr>
<tr class="separator:ad092f1f66bf81130a5089f32130e1879"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6e4df6530f7752cf5ce3ea803518796b"><td class="memItemLeft" align="right" valign="top"><a id="a6e4df6530f7752cf5ce3ea803518796b"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a6e4df6530f7752cf5ce3ea803518796b">camera_on_off</a> (View view)</td></tr>
<tr class="memdesc:a6e4df6530f7752cf5ce3ea803518796b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Enables or disables the camera layout. <br /></td></tr>
<tr class="separator:a6e4df6530f7752cf5ce3ea803518796b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a57bdabe7331b7b6c2366c5a712421eed"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a57bdabe7331b7b6c2366c5a712421eed">camera_switch</a> (View view)</td></tr>
<tr class="memdesc:a57bdabe7331b7b6c2366c5a712421eed"><td class="mdescLeft">&#160;</td><td class="mdescRight">Implementation of the camera switch button functionality. <a href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a57bdabe7331b7b6c2366c5a712421eed">More...</a><br /></td></tr>
<tr class="separator:a57bdabe7331b7b6c2366c5a712421eed"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad0be1b394cf38591e8c3b4fddcb0847c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#ad0be1b394cf38591e8c3b4fddcb0847c">onRequestPermissionsResult</a> (int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)</td></tr>
<tr class="memdesc:ad0be1b394cf38591e8c3b4fddcb0847c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets up the camera view if all the permissions are granted. <a href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#ad0be1b394cf38591e8c3b4fddcb0847c">More...</a><br /></td></tr>
<tr class="separator:ad0be1b394cf38591e8c3b4fddcb0847c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a22e8af693e360c03ba5b33eef44c133a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a22e8af693e360c03ba5b33eef44c133a">onResume</a> ()</td></tr>
<tr class="memdesc:a22e8af693e360c03ba5b33eef44c133a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Handles the onResume state of the app. <a href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a22e8af693e360c03ba5b33eef44c133a">More...</a><br /></td></tr>
<tr class="separator:a22e8af693e360c03ba5b33eef44c133a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae977f58ff77f0c94805aa5e3e7d2e41d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#ae977f58ff77f0c94805aa5e3e7d2e41d">onPause</a> ()</td></tr>
<tr class="memdesc:ae977f58ff77f0c94805aa5e3e7d2e41d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Handles the onPause state of the app. <a href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#ae977f58ff77f0c94805aa5e3e7d2e41d">More...</a><br /></td></tr>
<tr class="separator:ae977f58ff77f0c94805aa5e3e7d2e41d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a557ea163daf4e60c184a49812aaf87c4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a557ea163daf4e60c184a49812aaf87c4">onDestroy</a> ()</td></tr>
<tr class="memdesc:a557ea163daf4e60c184a49812aaf87c4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Handles the onDestroy state of the app. <a href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a557ea163daf4e60c184a49812aaf87c4">More...</a><br /></td></tr>
<tr class="separator:a557ea163daf4e60c184a49812aaf87c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8777e09d0d879a9f63f089ef62746b5b"><td class="memItemLeft" align="right" valign="top">Mat&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a8777e09d0d879a9f63f089ef62746b5b">onCameraFrame</a> (CameraBridgeViewBase.CvCameraViewFrame inputFrame)</td></tr>
<tr class="memdesc:a8777e09d0d879a9f63f089ef62746b5b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Transmits the camera frames to the server. <a href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a8777e09d0d879a9f63f089ef62746b5b">More...</a><br /></td></tr>
<tr class="separator:a8777e09d0d879a9f63f089ef62746b5b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af2ec32fa67be3d839f1a9c089328315a"><td class="memItemLeft" align="right" valign="top"><a id="af2ec32fa67be3d839f1a9c089328315a"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#af2ec32fa67be3d839f1a9c089328315a">layout_switch</a> (View view)</td></tr>
<tr class="memdesc:af2ec32fa67be3d839f1a9c089328315a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets up the layout as defined in the "activity_main.xml" file. <br /></td></tr>
<tr class="separator:af2ec32fa67be3d839f1a9c089328315a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4ba20fbfd80e439a90dbc2fadabe175f"><td class="memItemLeft" align="right" valign="top"><a id="a4ba20fbfd80e439a90dbc2fadabe175f"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a4ba20fbfd80e439a90dbc2fadabe175f">mouse_click</a> (View view)</td></tr>
<tr class="memdesc:a4ba20fbfd80e439a90dbc2fadabe175f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sends the mouse clicks. <br /></td></tr>
<tr class="separator:a4ba20fbfd80e439a90dbc2fadabe175f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af9efad2592afbec052882809d6db191e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#af9efad2592afbec052882809d6db191e">keyPress</a> (View view)</td></tr>
<tr class="memdesc:af9efad2592afbec052882809d6db191e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Handles the key press event. <a href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#af9efad2592afbec052882809d6db191e">More...</a><br /></td></tr>
<tr class="separator:af9efad2592afbec052882809d6db191e"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
Protected Member Functions</h2></td></tr>
<tr class="memitem:a2afda76ce41917b69b043fb5b5d1ee32"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a2afda76ce41917b69b043fb5b5d1ee32">onCreate</a> (Bundle savedInstanceState)</td></tr>
<tr class="memdesc:a2afda76ce41917b69b043fb5b5d1ee32"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets up the app layout and contains the methods to handle various touch-related events. <a href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a2afda76ce41917b69b043fb5b5d1ee32">More...</a><br /></td></tr>
<tr class="separator:a2afda76ce41917b69b043fb5b5d1ee32"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>This is where the main code of the Wireless-X android application is written. </p>
<p>The <a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html" title="This is where the main code of the Wireless-X android application is written.">MainActivity</a> consists of the methods that initialize all the required variables and fields when the app starts, methods which keep listening to the mouse and keyboard events such as a mouse click event or a key press event, screen touch events, methods which send the camera frames to the virtual camera device running on the laptop and so on. </p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a id="a57bdabe7331b7b6c2366c5a712421eed"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a57bdabe7331b7b6c2366c5a712421eed">&#9670;&nbsp;</a></span>camera_switch()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void com.example.wireless_x.MainActivity.camera_switch </td>
<td>(</td>
<td class="paramtype">View&#160;</td>
<td class="paramname"><em>view</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Implementation of the camera switch button functionality. </p>
<p>This method changes the main camera to the front or rear camera of the smartphone depending upon what the user has selected. </p>
</div>
</div>
<a id="a4d629b747ed093762bec62919da98983"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4d629b747ed093762bec62919da98983">&#9670;&nbsp;</a></span>enter_wireless_x()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void com.example.wireless_x.MainActivity.enter_wireless_x </td>
<td>(</td>
<td class="paramtype">View&#160;</td>
<td class="paramname"><em>view</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Performs the action when the "Enter Wireless-X" button is clicked. </p>
<p>This method displays the mouse layout once the user clicks on "Enter Wireless-X" button. </p>
</div>
</div>
<a id="af9efad2592afbec052882809d6db191e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af9efad2592afbec052882809d6db191e">&#9670;&nbsp;</a></span>keyPress()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void com.example.wireless_x.MainActivity.keyPress </td>
<td>(</td>
<td class="paramtype">View&#160;</td>
<td class="paramname"><em>view</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Handles the key press event. </p>
<p>This method handles the key press event and also handles the scroll button available on mouse layout. </p>
</div>
</div>
<a id="af4be89ec8bce3fa9bddb1c0151c3e592"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af4be89ec8bce3fa9bddb1c0151c3e592">&#9670;&nbsp;</a></span>onBackPressed()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void com.example.wireless_x.MainActivity.onBackPressed </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Performs the action when the back button is pressed. </p>
<p>It checks whether the back button is pressed twice within 2 seconds, if it is, then it exits the app. It also saves the IP address of the server so that the user doesn't need to re-enter it the next time he/she opens the app. </p>
</div>
</div>
<a id="a8777e09d0d879a9f63f089ef62746b5b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8777e09d0d879a9f63f089ef62746b5b">&#9670;&nbsp;</a></span>onCameraFrame()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">Mat com.example.wireless_x.MainActivity.onCameraFrame </td>
<td>(</td>
<td class="paramtype">CameraBridgeViewBase.CvCameraViewFrame&#160;</td>
<td class="paramname"><em>inputFrame</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Transmits the camera frames to the server. </p>
<p>On receiving a camera frame, this method encodes that frame and transmits it to the server. </p>
</div>
</div>
<a id="a2afda76ce41917b69b043fb5b5d1ee32"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2afda76ce41917b69b043fb5b5d1ee32">&#9670;&nbsp;</a></span>onCreate()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void com.example.wireless_x.MainActivity.onCreate </td>
<td>(</td>
<td class="paramtype">Bundle&#160;</td>
<td class="paramname"><em>savedInstanceState</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Sets up the app layout and contains the methods to handle various touch-related events. </p>
<p>Initializes all the app components and contains an listener for those events which can occur when the user interacts with the screen by single tap, double tap, scrolling or some gesture on the screen. </p>
<p>Method which listens for screen-touch related events.</p>
<p>When the user performs a double tap, it is translated to the double left-click on a physical mouse. Similarly, when the user performs a single tap, it's effect is same as a single click on any physical mouse. There is also an onScroll event which corresponds to the mouse scrolling event. This listener uses the GestureDetector class to handle such events.</p>
<p>Method to handle the double-tap event.</p>
<p>When the user performs a double tap, it is translated to the double left-click on a physical mouse. This is done by starting two threads simultaneously, which product the effect of two single-clicks without much delay, thus corresponding to a double-click.</p>
<p>Method to handle the single-tap event.</p>
<p>When the user performs a single tap, it is translated to the single left-click on a physical mouse. This is done by starting a thread, which sends the event information to the server running on laptop and then the server acts accordingly.</p>
<p>Method to handle the mouse scrolling event.</p>
<p>When the user performs a scroll event, the coordinates are transferred to the server, which translates those coordinates to the position with respect to the laptop screen.</p>
<p>Method to handle the screen-touch event.</p>
<p>This method calls the GestureDetector object to handle the screen-touch event which can be any one of the single-tap, double-tap or scroll events.</p>
</div>
</div>
<a id="a557ea163daf4e60c184a49812aaf87c4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a557ea163daf4e60c184a49812aaf87c4">&#9670;&nbsp;</a></span>onDestroy()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void com.example.wireless_x.MainActivity.onDestroy </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Handles the onDestroy state of the app. </p>
<p>If the app reaches the "onDestroy" state in the lifecycle, then this method disables the camera view. </p>
</div>
</div>
<a id="ae977f58ff77f0c94805aa5e3e7d2e41d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae977f58ff77f0c94805aa5e3e7d2e41d">&#9670;&nbsp;</a></span>onPause()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void com.example.wireless_x.MainActivity.onPause </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Handles the onPause state of the app. </p>
<p>If the app reaches the "onPause" state in the lifecycle, then this method disables the camera view. It also saves the server's IP address so that the next time the app is opened, the user doesn't require to enter the same address again. </p>
</div>
</div>
<a id="ad0be1b394cf38591e8c3b4fddcb0847c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad0be1b394cf38591e8c3b4fddcb0847c">&#9670;&nbsp;</a></span>onRequestPermissionsResult()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void com.example.wireless_x.MainActivity.onRequestPermissionsResult </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>requestCode</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">@NonNull String[]&#160;</td>
<td class="paramname"><em>permissions</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">@NonNull int[]&#160;</td>
<td class="paramname"><em>grantResults</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Sets up the camera view if all the permissions are granted. </p>
<p>This method initializes all the camera parameters subject to the condition that all the required permissions are granted by the user. If this is not the case, then an error message is displayed. </p>
</div>
</div>
<a id="a22e8af693e360c03ba5b33eef44c133a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a22e8af693e360c03ba5b33eef44c133a">&#9670;&nbsp;</a></span>onResume()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void com.example.wireless_x.MainActivity.onResume </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Handles the onResume state of the app. </p>
<p>If the app reaches an "onResume" state in the lifecycle, then this method checks if all the permissions are granted or not, if they are, then it sets up camera parameters otherwise it requests the permissions. </p>
</div>
</div>
<a id="a13c68af3d44accfe973b3dc661daf9e4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a13c68af3d44accfe973b3dc661daf9e4">&#9670;&nbsp;</a></span>shiftPress()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void com.example.wireless_x.MainActivity.shiftPress </td>
<td>(</td>
<td class="paramtype">View&#160;</td>
<td class="paramname"><em>view</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Displays the keys which correspond to special characters. </p>
<p>When the shift-key is pressed on the keyboard in Wireless-X app, this method changes the layout of some keys to those keys which correspond to special characters such as brackets, '@', etc. </p>
</div>
</div>
<a id="aad7a718ec54b19184dc7e301fde42f0e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aad7a718ec54b19184dc7e301fde42f0e">&#9670;&nbsp;</a></span>test_IP()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void com.example.wireless_x.MainActivity.test_IP </td>
<td>(</td>
<td class="paramtype">View&#160;</td>
<td class="paramname"><em>view</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Describes the action to be performed when Test IP is clicked on the app. </p>
<p>This method tries to set-up a connection with the IP address entered in the textfield to check if the IP address entered by the user is valid or not. </p>
</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li><a class="el" href="MainActivity_8java.html">MainActivity.java</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="http://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.0
</small></address>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Wireless-X: Class Index</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="ic_launcher.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Wireless-X
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.0 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">Class Index</div> </div>
</div><!--header-->
<div class="contents">
<div class="qindex"><a class="qindex" href="#letter_m">m</a></div>
<table class="classindex">
<tr><td rowspan="2" valign="bottom"><a name="letter_m"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;m&#160;&#160;</div></td></tr></table>
</td>
<td></td></tr>
<tr><td></td></tr>
<tr><td valign="top"><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html">MainActivity</a> (com.example.wireless_x)&#160;&#160;&#160;</td>
<td></td></tr>
<tr><td></td><td></td></tr>
</table>
<div class="qindex"><a class="qindex" href="#letter_m">m</a></div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="http://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.0
</small></address>
</body>
</html>
/* The standard CSS for doxygen 1.9.0 */
body, table, div, p, dl {
font: 400 14px/22px Roboto,sans-serif;
}
p.reference, p.definition {
font: 400 14px/22px Roboto,sans-serif;
}
/* @group Heading Levels */
h1.groupheader {
font-size: 150%;
}
.title {
font: 400 14px/28px Roboto,sans-serif;
font-size: 150%;
font-weight: bold;
margin: 10px 2px;
}
h2.groupheader {
border-bottom: 1px solid #879ECB;
color: #354C7B;
font-size: 150%;
font-weight: normal;
margin-top: 1.75em;
padding-top: 8px;
padding-bottom: 4px;
width: 100%;
}
h3.groupheader {
font-size: 100%;
}
h1, h2, h3, h4, h5, h6 {
-webkit-transition: text-shadow 0.5s linear;
-moz-transition: text-shadow 0.5s linear;
-ms-transition: text-shadow 0.5s linear;
-o-transition: text-shadow 0.5s linear;
transition: text-shadow 0.5s linear;
margin-right: 15px;
}
h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {
text-shadow: 0 0 15px cyan;
}
dt {
font-weight: bold;
}
ul.multicol {
-moz-column-gap: 1em;
-webkit-column-gap: 1em;
column-gap: 1em;
-moz-column-count: 3;
-webkit-column-count: 3;
column-count: 3;
}
p.startli, p.startdd {
margin-top: 2px;
}
th p.starttd, th p.intertd, th p.endtd {
font-size: 100%;
font-weight: 700;
}
p.starttd {
margin-top: 0px;
}
p.endli {
margin-bottom: 0px;
}
p.enddd {
margin-bottom: 4px;
}
p.endtd {
margin-bottom: 2px;
}
p.interli {
}
p.interdd {
}
p.intertd {
}
/* @end */
caption {
font-weight: bold;
}
span.legend {
font-size: 70%;
text-align: center;
}
h3.version {
font-size: 90%;
text-align: center;
}
div.qindex, div.navtab{
background-color: #EBEFF6;
border: 1px solid #A3B4D7;
text-align: center;
}
div.qindex, div.navpath {
width: 100%;
line-height: 140%;
}
div.navtab {
margin-right: 15px;
}
/* @group Link Styling */
a {
color: #3D578C;
font-weight: normal;
text-decoration: none;
}
.contents a:visited {
color: #4665A2;
}
a:hover {
text-decoration: underline;
}
a.qindex {
font-weight: bold;
}
a.qindexHL {
font-weight: bold;
background-color: #9CAFD4;
color: #FFFFFF;
border: 1px double #869DCA;
}
.contents a.qindexHL:visited {
color: #FFFFFF;
}
a.el {
font-weight: bold;
}
a.elRef {
}
a.code, a.code:visited, a.line, a.line:visited {
color: #4665A2;
}
a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited {
color: #4665A2;
}
/* @end */
dl.el {
margin-left: -1cm;
}
ul {
overflow: hidden; /*Fixed: list item bullets overlap floating elements*/
}
#side-nav ul {
overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */
}
#main-nav ul {
overflow: visible; /* reset ul rule for the navigation bar drop down lists */
}
.fragment {
text-align: left;
direction: ltr;
overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/
overflow-y: hidden;
}
pre.fragment {
border: 1px solid #C4CFE5;
background-color: #FBFCFD;
padding: 4px 6px;
margin: 4px 8px 4px 2px;
overflow: auto;
word-wrap: break-word;
font-size: 9pt;
line-height: 125%;
font-family: monospace, fixed;
font-size: 105%;
}
div.fragment {
padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/
margin: 4px 8px 4px 2px;
background-color: #FBFCFD;
border: 1px solid #C4CFE5;
}
div.line {
font-family: monospace, fixed;
font-size: 13px;
min-height: 13px;
line-height: 1.0;
text-wrap: unrestricted;
white-space: -moz-pre-wrap; /* Moz */
white-space: -pre-wrap; /* Opera 4-6 */
white-space: -o-pre-wrap; /* Opera 7 */
white-space: pre-wrap; /* CSS3 */
word-wrap: break-word; /* IE 5.5+ */
text-indent: -53px;
padding-left: 53px;
padding-bottom: 0px;
margin: 0px;
-webkit-transition-property: background-color, box-shadow;
-webkit-transition-duration: 0.5s;
-moz-transition-property: background-color, box-shadow;
-moz-transition-duration: 0.5s;
-ms-transition-property: background-color, box-shadow;
-ms-transition-duration: 0.5s;
-o-transition-property: background-color, box-shadow;
-o-transition-duration: 0.5s;
transition-property: background-color, box-shadow;
transition-duration: 0.5s;
}
div.line:after {
content:"\000A";
white-space: pre;
}
div.line.glow {
background-color: cyan;
box-shadow: 0 0 10px cyan;
}
span.lineno {
padding-right: 4px;
text-align: right;
border-right: 2px solid #0F0;
background-color: #E8E8E8;
white-space: pre;
}
span.lineno a {
background-color: #D8D8D8;
}
span.lineno a:hover {
background-color: #C8C8C8;
}
.lineno {
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
div.ah, span.ah {
background-color: black;
font-weight: bold;
color: #FFFFFF;
margin-bottom: 3px;
margin-top: 3px;
padding: 0.2em;
border: solid thin #333;
border-radius: 0.5em;
-webkit-border-radius: .5em;
-moz-border-radius: .5em;
box-shadow: 2px 2px 3px #999;
-webkit-box-shadow: 2px 2px 3px #999;
-moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));
background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%);
}
div.classindex ul {
list-style: none;
padding-left: 0;
}
div.classindex span.ai {
display: inline-block;
}
div.groupHeader {
margin-left: 16px;
margin-top: 12px;
font-weight: bold;
}
div.groupText {
margin-left: 16px;
font-style: italic;
}
body {
background-color: white;
color: black;
margin: 0;
}
div.contents {
margin-top: 10px;
margin-left: 12px;
margin-right: 8px;
}
td.indexkey {
background-color: #EBEFF6;
font-weight: bold;
border: 1px solid #C4CFE5;
margin: 2px 0px 2px 0;
padding: 2px 10px;
white-space: nowrap;
vertical-align: top;
}
td.indexvalue {
background-color: #EBEFF6;
border: 1px solid #C4CFE5;
padding: 2px 10px;
margin: 2px 0px;
}
tr.memlist {
background-color: #EEF1F7;
}
p.formulaDsp {
text-align: center;
}
img.formulaDsp {
}
img.formulaInl, img.inline {
vertical-align: middle;
}
div.center {
text-align: center;
margin-top: 0px;
margin-bottom: 0px;
padding: 0px;
}
div.center img {
border: 0px;
}
address.footer {
text-align: right;
padding-right: 12px;
}
img.footer {
border: 0px;
vertical-align: middle;
}
/* @group Code Colorization */
span.keyword {
color: #008000
}
span.keywordtype {
color: #604020
}
span.keywordflow {
color: #e08000
}
span.comment {
color: #800000
}
span.preprocessor {
color: #806020
}
span.stringliteral {
color: #002080
}
span.charliteral {
color: #008080
}
span.vhdldigit {
color: #ff00ff
}
span.vhdlchar {
color: #000000
}
span.vhdlkeyword {
color: #700070
}
span.vhdllogic {
color: #ff0000
}
blockquote {
background-color: #F7F8FB;
border-left: 2px solid #9CAFD4;
margin: 0 24px 0 4px;
padding: 0 12px 0 16px;
}
blockquote.DocNodeRTL {
border-left: 0;
border-right: 2px solid #9CAFD4;
margin: 0 4px 0 24px;
padding: 0 16px 0 12px;
}
/* @end */
/*
.search {
color: #003399;
font-weight: bold;
}
form.search {
margin-bottom: 0px;
margin-top: 0px;
}
input.search {
font-size: 75%;
color: #000080;
font-weight: normal;
background-color: #e8eef2;
}
*/
td.tiny {
font-size: 75%;
}
.dirtab {
padding: 4px;
border-collapse: collapse;
border: 1px solid #A3B4D7;
}
th.dirtab {
background: #EBEFF6;
font-weight: bold;
}
hr {
height: 0px;
border: none;
border-top: 1px solid #4A6AAA;
}
hr.footer {
height: 1px;
}
/* @group Member Descriptions */
table.memberdecls {
border-spacing: 0px;
padding: 0px;
}
.memberdecls td, .fieldtable tr {
-webkit-transition-property: background-color, box-shadow;
-webkit-transition-duration: 0.5s;
-moz-transition-property: background-color, box-shadow;
-moz-transition-duration: 0.5s;
-ms-transition-property: background-color, box-shadow;
-ms-transition-duration: 0.5s;
-o-transition-property: background-color, box-shadow;
-o-transition-duration: 0.5s;
transition-property: background-color, box-shadow;
transition-duration: 0.5s;
}
.memberdecls td.glow, .fieldtable tr.glow {
background-color: cyan;
box-shadow: 0 0 15px cyan;
}
.mdescLeft, .mdescRight,
.memItemLeft, .memItemRight,
.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
background-color: #F9FAFC;
border: none;
margin: 4px;
padding: 1px 0 0 8px;
}
.mdescLeft, .mdescRight {
padding: 0px 8px 4px 8px;
color: #555;
}
.memSeparator {
border-bottom: 1px solid #DEE4F0;
line-height: 1px;
margin: 0px;
padding: 0px;
}
.memItemLeft, .memTemplItemLeft {
white-space: nowrap;
}
.memItemRight, .memTemplItemRight {
width: 100%;
}
.memTemplParams {
color: #4665A2;
white-space: nowrap;
font-size: 80%;
}
/* @end */
/* @group Member Details */
/* Styles for detailed member documentation */
.memtitle {
padding: 8px;
border-top: 1px solid #A8B8D9;
border-left: 1px solid #A8B8D9;
border-right: 1px solid #A8B8D9;
border-top-right-radius: 4px;
border-top-left-radius: 4px;
margin-bottom: -1px;
background-image: url('nav_f.png');
background-repeat: repeat-x;
background-color: #E2E8F2;
line-height: 1.25;
font-weight: 300;
float:left;
}
.permalink
{
font-size: 65%;
display: inline-block;
vertical-align: middle;
}
.memtemplate {
font-size: 80%;
color: #4665A2;
font-weight: normal;
margin-left: 9px;
}
.memnav {
background-color: #EBEFF6;
border: 1px solid #A3B4D7;
text-align: center;
margin: 2px;
margin-right: 15px;
padding: 2px;
}
.mempage {
width: 100%;
}
.memitem {
padding: 0;
margin-bottom: 10px;
margin-right: 5px;
-webkit-transition: box-shadow 0.5s linear;
-moz-transition: box-shadow 0.5s linear;
-ms-transition: box-shadow 0.5s linear;
-o-transition: box-shadow 0.5s linear;
transition: box-shadow 0.5s linear;
display: table !important;
width: 100%;
}
.memitem.glow {
box-shadow: 0 0 15px cyan;
}
.memname {
font-weight: 400;
margin-left: 6px;
}
.memname td {
vertical-align: bottom;
}
.memproto, dl.reflist dt {
border-top: 1px solid #A8B8D9;
border-left: 1px solid #A8B8D9;
border-right: 1px solid #A8B8D9;
padding: 6px 0px 6px 0px;
color: #253555;
font-weight: bold;
text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
background-color: #DFE5F1;
/* opera specific markup */
box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
border-top-right-radius: 4px;
/* firefox specific markup */
-moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
-moz-border-radius-topright: 4px;
/* webkit specific markup */
-webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
-webkit-border-top-right-radius: 4px;
}
.overload {
font-family: "courier new",courier,monospace;
font-size: 65%;
}
.memdoc, dl.reflist dd {
border-bottom: 1px solid #A8B8D9;
border-left: 1px solid #A8B8D9;
border-right: 1px solid #A8B8D9;
padding: 6px 10px 2px 10px;
background-color: #FBFCFD;
border-top-width: 0;
background-image:url('nav_g.png');
background-repeat:repeat-x;
background-color: #FFFFFF;
/* opera specific markup */
border-bottom-left-radius: 4px;
border-bottom-right-radius: 4px;
box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
/* firefox specific markup */
-moz-border-radius-bottomleft: 4px;
-moz-border-radius-bottomright: 4px;
-moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
/* webkit specific markup */
-webkit-border-bottom-left-radius: 4px;
-webkit-border-bottom-right-radius: 4px;
-webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
}
dl.reflist dt {
padding: 5px;
}
dl.reflist dd {
margin: 0px 0px 10px 0px;
padding: 5px;
}
.paramkey {
text-align: right;
}
.paramtype {
white-space: nowrap;
}
.paramname {
color: #602020;
white-space: nowrap;
}
.paramname em {
font-style: normal;
}
.paramname code {
line-height: 14px;
}
.params, .retval, .exception, .tparams {
margin-left: 0px;
padding-left: 0px;
}
.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname {
font-weight: bold;
vertical-align: top;
}
.params .paramtype, .tparams .paramtype {
font-style: italic;
vertical-align: top;
}
.params .paramdir, .tparams .paramdir {
font-family: "courier new",courier,monospace;
vertical-align: top;
}
table.mlabels {
border-spacing: 0px;
}
td.mlabels-left {
width: 100%;
padding: 0px;
}
td.mlabels-right {
vertical-align: bottom;
padding: 0px;
white-space: nowrap;
}
span.mlabels {
margin-left: 8px;
}
span.mlabel {
background-color: #728DC1;
border-top:1px solid #5373B4;
border-left:1px solid #5373B4;
border-right:1px solid #C4CFE5;
border-bottom:1px solid #C4CFE5;
text-shadow: none;
color: white;
margin-right: 4px;
padding: 2px 3px;
border-radius: 3px;
font-size: 7pt;
white-space: nowrap;
vertical-align: middle;
}
/* @end */
/* these are for tree view inside a (index) page */
div.directory {
margin: 10px 0px;
border-top: 1px solid #9CAFD4;
border-bottom: 1px solid #9CAFD4;
width: 100%;
}
.directory table {
border-collapse:collapse;
}
.directory td {
margin: 0px;
padding: 0px;
vertical-align: top;
}
.directory td.entry {
white-space: nowrap;
padding-right: 6px;
padding-top: 3px;
}
.directory td.entry a {
outline:none;
}
.directory td.entry a img {
border: none;
}
.directory td.desc {
width: 100%;
padding-left: 6px;
padding-right: 6px;
padding-top: 3px;
border-left: 1px solid rgba(0,0,0,0.05);
}
.directory tr.even {
padding-left: 6px;
background-color: #F7F8FB;
}
.directory img {
vertical-align: -30%;
}
.directory .levels {
white-space: nowrap;
width: 100%;
text-align: right;
font-size: 9pt;
}
.directory .levels span {
cursor: pointer;
padding-left: 2px;
padding-right: 2px;
color: #3D578C;
}
.arrow {
color: #9CAFD4;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
cursor: pointer;
font-size: 80%;
display: inline-block;
width: 16px;
height: 22px;
}
.icon {
font-family: Arial, Helvetica;
font-weight: bold;
font-size: 12px;
height: 14px;
width: 16px;
display: inline-block;
background-color: #728DC1;
color: white;
text-align: center;
border-radius: 4px;
margin-left: 2px;
margin-right: 2px;
}
.icona {
width: 24px;
height: 22px;
display: inline-block;
}
.iconfopen {
width: 24px;
height: 18px;
margin-bottom: 4px;
background-image:url('folderopen.png');
background-position: 0px -4px;
background-repeat: repeat-y;
vertical-align:top;
display: inline-block;
}
.iconfclosed {
width: 24px;
height: 18px;
margin-bottom: 4px;
background-image:url('folderclosed.png');
background-position: 0px -4px;
background-repeat: repeat-y;
vertical-align:top;
display: inline-block;
}
.icondoc {
width: 24px;
height: 18px;
margin-bottom: 4px;
background-image:url('doc.png');
background-position: 0px -4px;
background-repeat: repeat-y;
vertical-align:top;
display: inline-block;
}
table.directory {
font: 400 14px Roboto,sans-serif;
}
/* @end */
div.dynheader {
margin-top: 8px;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
address {
font-style: normal;
color: #2A3D61;
}
table.doxtable caption {
caption-side: top;
}
table.doxtable {
border-collapse:collapse;
margin-top: 4px;
margin-bottom: 4px;
}
table.doxtable td, table.doxtable th {
border: 1px solid #2D4068;
padding: 3px 7px 2px;
}
table.doxtable th {
background-color: #374F7F;
color: #FFFFFF;
font-size: 110%;
padding-bottom: 4px;
padding-top: 5px;
}
table.fieldtable {
/*width: 100%;*/
margin-bottom: 10px;
border: 1px solid #A8B8D9;
border-spacing: 0px;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
border-radius: 4px;
-moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
-webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
}
.fieldtable td, .fieldtable th {
padding: 3px 7px 2px;
}
.fieldtable td.fieldtype, .fieldtable td.fieldname {
white-space: nowrap;
border-right: 1px solid #A8B8D9;
border-bottom: 1px solid #A8B8D9;
vertical-align: top;
}
.fieldtable td.fieldname {
padding-top: 3px;
}
.fieldtable td.fielddoc {
border-bottom: 1px solid #A8B8D9;
/*width: 100%;*/
}
.fieldtable td.fielddoc p:first-child {
margin-top: 0px;
}
.fieldtable td.fielddoc p:last-child {
margin-bottom: 2px;
}
.fieldtable tr:last-child td {
border-bottom: none;
}
.fieldtable th {
background-image:url('nav_f.png');
background-repeat:repeat-x;
background-color: #E2E8F2;
font-size: 90%;
color: #253555;
padding-bottom: 4px;
padding-top: 5px;
text-align:left;
font-weight: 400;
-moz-border-radius-topleft: 4px;
-moz-border-radius-topright: 4px;
-webkit-border-top-left-radius: 4px;
-webkit-border-top-right-radius: 4px;
border-top-left-radius: 4px;
border-top-right-radius: 4px;
border-bottom: 1px solid #A8B8D9;
}
.tabsearch {
top: 0px;
left: 10px;
height: 36px;
background-image: url('tab_b.png');
z-index: 101;
overflow: hidden;
font-size: 13px;
}
.navpath ul
{
font-size: 11px;
background-image:url('tab_b.png');
background-repeat:repeat-x;
background-position: 0 -5px;
height:30px;
line-height:30px;
color:#8AA0CC;
border:solid 1px #C2CDE4;
overflow:hidden;
margin:0px;
padding:0px;
}
.navpath li
{
list-style-type:none;
float:left;
padding-left:10px;
padding-right:15px;
background-image:url('bc_s.png');
background-repeat:no-repeat;
background-position:right;
color:#364D7C;
}
.navpath li.navelem a
{
height:32px;
display:block;
text-decoration: none;
outline: none;
color: #283A5D;
font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
text-decoration: none;
}
.navpath li.navelem a:hover
{
color:#6884BD;
}
.navpath li.footer
{
list-style-type:none;
float:right;
padding-left:10px;
padding-right:15px;
background-image:none;
background-repeat:no-repeat;
background-position:right;
color:#364D7C;
font-size: 8pt;
}
div.summary
{
float: right;
font-size: 8pt;
padding-right: 5px;
width: 50%;
text-align: right;
}
div.summary a
{
white-space: nowrap;
}
table.classindex
{
margin: 10px;
white-space: nowrap;
margin-left: 3%;
margin-right: 3%;
width: 94%;
border: 0;
border-spacing: 0;
padding: 0;
}
div.ingroups
{
font-size: 8pt;
width: 50%;
text-align: left;
}
div.ingroups a
{
white-space: nowrap;
}
div.header
{
background-image:url('nav_h.png');
background-repeat:repeat-x;
background-color: #F9FAFC;
margin: 0px;
border-bottom: 1px solid #C4CFE5;
}
div.headertitle
{
padding: 5px 5px 5px 10px;
}
.PageDocRTL-title div.headertitle {
text-align: right;
direction: rtl;
}
dl {
padding: 0 0 0 0;
}
/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */
dl.section {
margin-left: 0px;
padding-left: 0px;
}
dl.section.DocNodeRTL {
margin-right: 0px;
padding-right: 0px;
}
dl.note {
margin-left: -7px;
padding-left: 3px;
border-left: 4px solid;
border-color: #D0C000;
}
dl.note.DocNodeRTL {
margin-left: 0;
padding-left: 0;
border-left: 0;
margin-right: -7px;
padding-right: 3px;
border-right: 4px solid;
border-color: #D0C000;
}
dl.warning, dl.attention {
margin-left: -7px;
padding-left: 3px;
border-left: 4px solid;
border-color: #FF0000;
}
dl.warning.DocNodeRTL, dl.attention.DocNodeRTL {
margin-left: 0;
padding-left: 0;
border-left: 0;
margin-right: -7px;
padding-right: 3px;
border-right: 4px solid;
border-color: #FF0000;
}
dl.pre, dl.post, dl.invariant {
margin-left: -7px;
padding-left: 3px;
border-left: 4px solid;
border-color: #00D000;
}
dl.pre.DocNodeRTL, dl.post.DocNodeRTL, dl.invariant.DocNodeRTL {
margin-left: 0;
padding-left: 0;
border-left: 0;
margin-right: -7px;
padding-right: 3px;
border-right: 4px solid;
border-color: #00D000;
}
dl.deprecated {
margin-left: -7px;
padding-left: 3px;
border-left: 4px solid;
border-color: #505050;
}
dl.deprecated.DocNodeRTL {
margin-left: 0;
padding-left: 0;
border-left: 0;
margin-right: -7px;
padding-right: 3px;
border-right: 4px solid;
border-color: #505050;
}
dl.todo {
margin-left: -7px;
padding-left: 3px;
border-left: 4px solid;
border-color: #00C0E0;
}
dl.todo.DocNodeRTL {
margin-left: 0;
padding-left: 0;
border-left: 0;
margin-right: -7px;
padding-right: 3px;
border-right: 4px solid;
border-color: #00C0E0;
}
dl.test {
margin-left: -7px;
padding-left: 3px;
border-left: 4px solid;
border-color: #3030E0;
}
dl.test.DocNodeRTL {
margin-left: 0;
padding-left: 0;
border-left: 0;
margin-right: -7px;
padding-right: 3px;
border-right: 4px solid;
border-color: #3030E0;
}
dl.bug {
margin-left: -7px;
padding-left: 3px;
border-left: 4px solid;
border-color: #C08050;
}
dl.bug.DocNodeRTL {
margin-left: 0;
padding-left: 0;
border-left: 0;
margin-right: -7px;
padding-right: 3px;
border-right: 4px solid;
border-color: #C08050;
}
dl.section dd {
margin-bottom: 6px;
}
#projectlogo
{
text-align: center;
vertical-align: bottom;
border-collapse: separate;
}
#projectlogo img
{
border: 0px none;
}
#projectalign
{
vertical-align: middle;
}
#projectname
{
font: 300% Tahoma, Arial,sans-serif;
margin: 0px;
padding: 2px 0px;
}
#projectbrief
{
font: 120% Tahoma, Arial,sans-serif;
margin: 0px;
padding: 0px;
}
#projectnumber
{
font: 50% Tahoma, Arial,sans-serif;
margin: 0px;
padding: 0px;
}
#titlearea
{
padding: 0px;
margin: 0px;
width: 100%;
border-bottom: 1px solid #5373B4;
}
.image
{
text-align: center;
}
.dotgraph
{
text-align: center;
}
.mscgraph
{
text-align: center;
}
.plantumlgraph
{
text-align: center;
}
.diagraph
{
text-align: center;
}
.caption
{
font-weight: bold;
}
div.zoom
{
border: 1px solid #90A5CE;
}
dl.citelist {
margin-bottom:50px;
}
dl.citelist dt {
color:#334975;
float:left;
font-weight:bold;
margin-right:10px;
padding:5px;
text-align:right;
width:52px;
}
dl.citelist dd {
margin:2px 0 2px 72px;
padding:5px 0;
}
div.toc {
padding: 14px 25px;
background-color: #F4F6FA;
border: 1px solid #D8DFEE;
border-radius: 7px 7px 7px 7px;
float: right;
height: auto;
margin: 0 8px 10px 10px;
width: 200px;
}
.PageDocRTL-title div.toc {
float: left !important;
text-align: right;
}
div.toc li {
background: url("bdwn.png") no-repeat scroll 0 5px transparent;
font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;
margin-top: 5px;
padding-left: 10px;
padding-top: 2px;
}
.PageDocRTL-title div.toc li {
background-position-x: right !important;
padding-left: 0 !important;
padding-right: 10px;
}
div.toc h3 {
font: bold 12px/1.2 Arial,FreeSans,sans-serif;
color: #4665A2;
border-bottom: 0 none;
margin: 0;
}
div.toc ul {
list-style: none outside none;
border: medium none;
padding: 0px;
}
div.toc li.level1 {
margin-left: 0px;
}
div.toc li.level2 {
margin-left: 15px;
}
div.toc li.level3 {
margin-left: 30px;
}
div.toc li.level4 {
margin-left: 45px;
}
div.emoji {
/* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html
* font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort;
*/
}
.PageDocRTL-title div.toc li.level1 {
margin-left: 0 !important;
margin-right: 0;
}
.PageDocRTL-title div.toc li.level2 {
margin-left: 0 !important;
margin-right: 15px;
}
.PageDocRTL-title div.toc li.level3 {
margin-left: 0 !important;
margin-right: 30px;
}
.PageDocRTL-title div.toc li.level4 {
margin-left: 0 !important;
margin-right: 45px;
}
.inherit_header {
font-weight: bold;
color: gray;
cursor: pointer;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.inherit_header td {
padding: 6px 0px 2px 5px;
}
.inherit {
display: none;
}
tr.heading h2 {
margin-top: 12px;
margin-bottom: 4px;
}
/* tooltip related style info */
.ttc {
position: absolute;
display: none;
}
#powerTip {
cursor: default;
white-space: nowrap;
background-color: white;
border: 1px solid gray;
border-radius: 4px 4px 4px 4px;
box-shadow: 1px 1px 7px gray;
display: none;
font-size: smaller;
max-width: 80%;
opacity: 0.9;
padding: 1ex 1em 1em;
position: absolute;
z-index: 2147483647;
}
#powerTip div.ttdoc {
color: grey;
font-style: italic;
}
#powerTip div.ttname a {
font-weight: bold;
}
#powerTip div.ttname {
font-weight: bold;
}
#powerTip div.ttdeci {
color: #006318;
}
#powerTip div {
margin: 0px;
padding: 0px;
font: 12px/16px Roboto,sans-serif;
}
#powerTip:before, #powerTip:after {
content: "";
position: absolute;
margin: 0px;
}
#powerTip.n:after, #powerTip.n:before,
#powerTip.s:after, #powerTip.s:before,
#powerTip.w:after, #powerTip.w:before,
#powerTip.e:after, #powerTip.e:before,
#powerTip.ne:after, #powerTip.ne:before,
#powerTip.se:after, #powerTip.se:before,
#powerTip.nw:after, #powerTip.nw:before,
#powerTip.sw:after, #powerTip.sw:before {
border: solid transparent;
content: " ";
height: 0;
width: 0;
position: absolute;
}
#powerTip.n:after, #powerTip.s:after,
#powerTip.w:after, #powerTip.e:after,
#powerTip.nw:after, #powerTip.ne:after,
#powerTip.sw:after, #powerTip.se:after {
border-color: rgba(255, 255, 255, 0);
}
#powerTip.n:before, #powerTip.s:before,
#powerTip.w:before, #powerTip.e:before,
#powerTip.nw:before, #powerTip.ne:before,
#powerTip.sw:before, #powerTip.se:before {
border-color: rgba(128, 128, 128, 0);
}
#powerTip.n:after, #powerTip.n:before,
#powerTip.ne:after, #powerTip.ne:before,
#powerTip.nw:after, #powerTip.nw:before {
top: 100%;
}
#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after {
border-top-color: #FFFFFF;
border-width: 10px;
margin: 0px -10px;
}
#powerTip.n:before {
border-top-color: #808080;
border-width: 11px;
margin: 0px -11px;
}
#powerTip.n:after, #powerTip.n:before {
left: 50%;
}
#powerTip.nw:after, #powerTip.nw:before {
right: 14px;
}
#powerTip.ne:after, #powerTip.ne:before {
left: 14px;
}
#powerTip.s:after, #powerTip.s:before,
#powerTip.se:after, #powerTip.se:before,
#powerTip.sw:after, #powerTip.sw:before {
bottom: 100%;
}
#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after {
border-bottom-color: #FFFFFF;
border-width: 10px;
margin: 0px -10px;
}
#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before {
border-bottom-color: #808080;
border-width: 11px;
margin: 0px -11px;
}
#powerTip.s:after, #powerTip.s:before {
left: 50%;
}
#powerTip.sw:after, #powerTip.sw:before {
right: 14px;
}
#powerTip.se:after, #powerTip.se:before {
left: 14px;
}
#powerTip.e:after, #powerTip.e:before {
left: 100%;
}
#powerTip.e:after {
border-left-color: #FFFFFF;
border-width: 10px;
top: 50%;
margin-top: -10px;
}
#powerTip.e:before {
border-left-color: #808080;
border-width: 11px;
top: 50%;
margin-top: -11px;
}
#powerTip.w:after, #powerTip.w:before {
right: 100%;
}
#powerTip.w:after {
border-right-color: #FFFFFF;
border-width: 10px;
top: 50%;
margin-top: -10px;
}
#powerTip.w:before {
border-right-color: #808080;
border-width: 11px;
top: 50%;
margin-top: -11px;
}
@media print
{
#top { display: none; }
#side-nav { display: none; }
#nav-path { display: none; }
body { overflow:visible; }
h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }
.summary { display: none; }
.memitem { page-break-inside: avoid; }
#doc-content
{
margin-left:0 !important;
height:auto !important;
width:auto !important;
overflow:inherit;
display:inline;
}
}
/* @group Markdown */
table.markdownTable {
border-collapse:collapse;
margin-top: 4px;
margin-bottom: 4px;
}
table.markdownTable td, table.markdownTable th {
border: 1px solid #2D4068;
padding: 3px 7px 2px;
}
table.markdownTable tr {
}
th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone {
background-color: #374F7F;
color: #FFFFFF;
font-size: 110%;
padding-bottom: 4px;
padding-top: 5px;
}
th.markdownTableHeadLeft, td.markdownTableBodyLeft {
text-align: left
}
th.markdownTableHeadRight, td.markdownTableBodyRight {
text-align: right
}
th.markdownTableHeadCenter, td.markdownTableBodyCenter {
text-align: center
}
.DocNodeRTL {
text-align: right;
direction: rtl;
}
.DocNodeLTR {
text-align: left;
direction: ltr;
}
table.DocNodeRTL {
width: auto;
margin-right: 0;
margin-left: auto;
}
table.DocNodeLTR {
width: auto;
margin-right: auto;
margin-left: 0;
}
tt, code, kbd, samp
{
display: inline-block;
direction:ltr;
}
/* @end */
u {
text-decoration: underline;
}
<?xml version="1.0" encoding="UTF-8"?>
<svg version="1.1" viewBox="0 0 104 31" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<linearGradient id="a">
<stop stop-color="#5373B4" offset="0"/>
<stop stop-color="#7C95C6" offset="1"/>
</linearGradient>
<linearGradient id="d" x1="31.474" x2="31.474" y1="24.821" y2="26.773" gradientUnits="userSpaceOnUse" xlink:href="#a"/>
<linearGradient id="c" x1="31.474" x2="31.474" y1="24.821" y2="26.773" gradientTransform="matrix(.6816 0 0 1.0248 72.391 -.91809)" gradientUnits="userSpaceOnUse" xlink:href="#a"/>
<linearGradient id="b" x1="56.295" x2="56.295" y1="24.622" y2="26.574" gradientUnits="userSpaceOnUse" xlink:href="#a"/>
<linearGradient id="e" x1="49.067" x2="48.956" y1="19.719" y2="9.5227" gradientTransform="matrix(.97968 0 0 1.0207 -.25579 -.25579)" gradientUnits="userSpaceOnUse">
<stop stop-color="#C0CCE3" offset="0"/>
<stop stop-color="#EEF1F7" offset="1"/>
</linearGradient>
<filter id="f" x="-.010676" y="-.045304" width="1.0214" height="1.0906" color-interpolation-filters="sRGB">
<feGaussianBlur stdDeviation="0.45293203"/>
</filter>
</defs>
<g>
<path transform="translate(-2.5759 -27.848)" d="m13.609 32.203v6.8633h-0.05078c-0.40533-0.66867-0.96254-1.1715-1.6719-1.5059-0.69244-0.35193-1.4282-0.52734-2.2051-0.52734-0.96267 0-1.807 0.2027-2.5332 0.60742-0.72622 0.38713-1.3344 0.90556-1.8242 1.5566-0.47289 0.65108-0.83456 1.4092-1.0879 2.2715-0.23644 0.84464-0.35547 1.7236-0.35547 2.6387 0 0.95022 0.11902 1.8643 0.35547 2.7441 0.25333 0.87983 0.615 1.6633 1.0879 2.3496 0.48978 0.66867 1.1065 1.2066 1.8496 1.6113 0.74311 0.38713 1.6044 0.58008 2.584 0.58008 0.86133 0 1.6311-0.15787 2.3066-0.47461 0.69244-0.33434 1.2497-0.87227 1.6719-1.6113h0.05078v1.7422h3.4199v-18.846zm12.875 4.8301c-1.0302 0-1.9596 0.17541-2.7871 0.52734-0.82756 0.33434-1.5358 0.81965-2.127 1.4531-0.59111 0.61588-1.0483 1.3721-1.3691 2.2695-0.32089 0.87983-0.48047 1.866-0.48047 2.957s0.15958 2.0752 0.48047 2.9551c0.32089 0.87983 0.77803 1.6361 1.3691 2.2695 0.59111 0.61588 1.2994 1.0914 2.127 1.4258 0.82756 0.33434 1.7569 0.50195 2.7871 0.50195 1.0302 0 1.9596-0.16762 2.7871-0.50195 0.84444-0.33434 1.5612-0.8099 2.1523-1.4258 0.59111-0.63348 1.0483-1.3897 1.3691-2.2695 0.32089-0.87983 0.48047-1.8641 0.48047-2.9551s-0.15958-2.0772-0.48047-2.957c-0.32089-0.89743-0.77803-1.6536-1.3691-2.2695-0.59111-0.63348-1.3079-1.1188-2.1523-1.4531-0.82756-0.35193-1.7569-0.52734-2.7871-0.52734zm41.715 0c-0.912 0-1.7223 0.18516-2.4316 0.55469-0.69244 0.36953-1.2752 0.87043-1.748 1.5039-0.47289 0.61588-0.83651 1.337-1.0898 2.1641-0.23645 0.80944-0.35352 1.6553-0.35352 2.5352 0 0.93262 0.10007 1.8214 0.30273 2.666 0.21956 0.82704 0.55767 1.556 1.0137 2.1895 0.456 0.61588 1.0387 1.109 1.748 1.4785 0.70933 0.35193 1.5536 0.5293 2.5332 0.5293 0.79378 0 1.5446-0.16762 2.2539-0.50195 0.72622-0.35193 1.2834-0.88986 1.6719-1.6113h0.05078v1.7949c0.01689 0.96782-0.21071 1.7689-0.68359 2.4023-0.456 0.63348-1.1898 0.95117-2.2031 0.95117-0.64178 0-1.2075-0.14228-1.6973-0.42383-0.48978-0.26395-0.81939-0.74731-0.98828-1.4512h-3.5723c0.05067 0.77425 0.25276 1.435 0.60742 1.9805 0.37156 0.56309 0.8287 1.0192 1.3691 1.3711 0.55733 0.35193 1.1656 0.60726 1.8242 0.76562 0.67556 0.17597 1.3328 0.26562 1.9746 0.26562 1.5031 0 2.7025-0.21245 3.5977-0.63477 0.89511-0.42232 1.5798-0.94076 2.0527-1.5566 0.47289-0.59829 0.777-1.2493 0.91211-1.9531 0.152-0.70386 0.22656-1.3295 0.22656-1.875v-12.775h-3.4199v1.8223h-0.05078c-0.43911-0.79185-0.98782-1.3551-1.6465-1.6895-0.64178-0.33434-1.3926-0.50195-2.2539-0.50195zm16.523 0c-0.99644 0-1.9088 0.18516-2.7363 0.55469-0.81067 0.36953-1.5124 0.88018-2.1035 1.5312-0.59111 0.63348-1.0463 1.3897-1.3672 2.2695s-0.48047 1.831-0.48047 2.8516c0 1.0558 0.15108 2.0225 0.45508 2.9023 0.32089 0.87983 0.76758 1.6361 1.3418 2.2695 0.57422 0.63348 1.276 1.1266 2.1035 1.4785 0.82756 0.33434 1.7569 0.50195 2.7871 0.50195 1.4862 0 2.7517-0.35277 3.7988-1.0566 1.0471-0.70387 1.8254-1.8733 2.332-3.5098h-3.168c-0.11822 0.42232-0.43934 0.82772-0.96289 1.2148-0.52355 0.36953-1.1468 0.55274-1.873 0.55273-1.0133 0-1.7916-0.27286-2.332-0.81836-0.54044-0.5455-0.83605-1.4245-0.88672-2.6387h9.4492c0.06756-1.0558-0.01551-2.0673-0.25195-3.0352-0.23644-0.96782-0.62557-1.8293-1.166-2.5859-0.52356-0.75666-1.1998-1.355-2.0273-1.7949-0.82756-0.45751-1.7974-0.6875-2.9121-0.6875zm16.189 0c-0.76 0-1.5023 0.18516-2.2285 0.55469-0.72622 0.35193-1.3174 0.92299-1.7734 1.7148h-0.07617v-1.9004h-3.4199v13.646h3.5977v-7.1523c0-1.3901 0.21909-2.3841 0.6582-2.9824 0.43911-0.61588 1.1494-0.92383 2.1289-0.92383 0.86133 0 1.4611 0.28066 1.7988 0.84375 0.33777 0.5455 0.50586 1.3816 0.50586 2.5078v7.707h3.5976v-8.3926c0-0.84464-0.0765-1.6106-0.22851-2.2969-0.13511-0.70387-0.37971-1.2925-0.73438-1.7676-0.35466-0.49271-0.84386-0.87277-1.4688-1.1367-0.608-0.28155-1.3948-0.42188-2.3574-0.42188zm-66.063 0.36914 4.3066 6.4668-4.7129 7.1797h4.0293l2.7363-4.3027 2.7344 4.3027h4.1055l-4.8398-7.2578 4.3066-6.3887h-3.9766l-2.2793 3.5645-2.3066-3.5645zm13.275 0 4.584 12.803c0.10133 0.26395 0.15234 0.54461 0.15234 0.84375 0 0.40472-0.11707 0.77504-0.35352 1.1094-0.21956 0.33434-0.56617 0.52729-1.0391 0.58008-0.35467 0.0176-0.70979 0.0098-1.0645-0.02539-0.35467-0.03519-0.70128-0.07028-1.0391-0.10547v3.0879c0.37156 0.03519 0.73518 0.06051 1.0898 0.07813 0.37156 0.03519 0.74368 0.05273 1.1152 0.05273 1.2329 0 2.1943-0.23778 2.8867-0.71289 0.69244-0.47511 1.2326-1.2664 1.6211-2.375l5.4727-15.336h-3.7246l-2.8613 9.3438h-0.05078l-2.9648-9.3438zm-37.48 2.4551c0.59111 0 1.0823 0.12279 1.4707 0.36914 0.38844 0.24635 0.6991 0.57184 0.93555 0.97656 0.25333 0.38713 0.43187 0.84515 0.5332 1.373 0.10133 0.5103 0.15234 1.0482 0.15234 1.6113 0 0.56309-0.05101 1.1069-0.15234 1.6348-0.10133 0.5279-0.27137 1.0035-0.50781 1.4258-0.23644 0.40472-0.5556 0.73021-0.96094 0.97656-0.38844 0.24635-0.87959 0.36914-1.4707 0.36914-0.55733 0-1.038-0.12279-1.4434-0.36914-0.38844-0.26395-0.71806-0.59723-0.98828-1.002-0.25333-0.42232-0.43842-0.89788-0.55664-1.4258s-0.17773-1.0561-0.17773-1.584c-1e-7 -0.56309 0.05101-1.0991 0.15234-1.6094 0.11822-0.5279 0.29481-0.99567 0.53125-1.4004 0.25333-0.40472 0.58295-0.73021 0.98828-0.97656 0.40533-0.24635 0.90303-0.36914 1.4941-0.36914zm15.84 0c0.608 0 1.1142 0.13253 1.5195 0.39648 0.42222 0.24635 0.75184 0.57184 0.98828 0.97656 0.25333 0.40472 0.42992 0.87054 0.53125 1.3984 0.10133 0.5279 0.15234 1.0658 0.15234 1.6113 0 0.5455-0.05101 1.0815-0.15234 1.6094-0.10134 0.5103-0.27792 0.97612-0.53125 1.3984-0.23644 0.40472-0.56606 0.73021-0.98828 0.97656-0.40533 0.24635-0.91153 0.36914-1.5195 0.36914-0.608 0-1.1142-0.12279-1.5195-0.36914s-0.73495-0.57184-0.98828-0.97656c-0.23644-0.42232-0.40648-0.88814-0.50781-1.3984-0.10133-0.5279-0.15234-1.0639-0.15234-1.6094 0-0.5455 0.05101-1.0834 0.15234-1.6113 0.10133-0.5279 0.27137-0.99371 0.50781-1.3984 0.25333-0.40472 0.58295-0.73021 0.98828-0.97656 0.40533-0.26395 0.91153-0.39648 1.5195-0.39648zm42.602 0c0.59111 0 1.0803 0.11499 1.4688 0.34375 0.38844 0.22876 0.70105 0.5367 0.9375 0.92383 0.23644 0.38713 0.40648 0.8354 0.50781 1.3457 0.10133 0.49271 0.15039 1.0209 0.15039 1.584 0 0.4927-0.06606 0.96827-0.20117 1.4258-0.11822 0.43992-0.30526 0.83557-0.55859 1.1875-0.25333 0.35193-0.57445 0.63259-0.96289 0.84375-0.38844 0.21116-0.83513 0.31836-1.3418 0.31836-0.55733 0-1.021-0.12474-1.3926-0.37109-0.37156-0.24635-0.67566-0.56209-0.91211-0.94922-0.21956-0.38713-0.38109-0.81786-0.48242-1.293-0.08444-0.49271-0.12695-0.98581-0.12695-1.4785 0-0.5103 0.05101-0.99366 0.15234-1.4512 0.11822-0.47511 0.29676-0.89025 0.5332-1.2422 0.25333-0.36953 0.55744-0.65993 0.91211-0.87109 0.37156-0.21116 0.80974-0.31641 1.3164-0.31641zm15.535 0c0.87822 0 1.529 0.24753 1.9512 0.74023 0.43911 0.49271 0.74322 1.2138 0.91211 2.1641h-5.8535c0.01689-0.26395 0.0679-0.5641 0.15234-0.89844 0.10133-0.33434 0.26287-0.65008 0.48242-0.94922 0.23644-0.29914 0.54055-0.54667 0.91211-0.74023 0.38845-0.21116 0.86914-0.31641 1.4434-0.31641z" filter="url(#f)" opacity=".3" stroke="#969696" xlink:href="#path141"/>
<path d="m0.97202 24.161 43.605-0.0019 0.0508 3.3061-43.6 0.04174z" fill="url(#d)" stroke="#000" stroke-width=".5"/>
<path d="m10.283 3.5547v6.8633h-0.05078c-0.40533-0.66867-0.96254-1.1715-1.6719-1.5059-0.69244-0.35193-1.4282-0.52734-2.2051-0.52734-0.96267 0-1.807 0.2027-2.5332 0.60742-0.72622 0.38713-1.3344 0.90556-1.8242 1.5566-0.47289 0.65108-0.83456 1.4092-1.0879 2.2715-0.23644 0.84464-0.35547 1.7236-0.35547 2.6387 0 0.95022 0.11902 1.8643 0.35547 2.7441 0.25333 0.87983 0.615 1.6633 1.0879 2.3496 0.48978 0.66867 1.1065 1.2066 1.8496 1.6113 0.74311 0.38713 1.6044 0.58008 2.584 0.58008 0.86133 0 1.6311-0.15787 2.3066-0.47461 0.69244-0.33434 1.2497-0.87227 1.6719-1.6113h0.05078v1.7422h3.4199v-18.846zm12.875 4.8301c-1.0302 0-1.9596 0.17541-2.7871 0.52734-0.82756 0.33434-1.5358 0.81965-2.127 1.4531-0.59111 0.61588-1.0483 1.3721-1.3691 2.2695-0.32089 0.87983-0.48047 1.866-0.48047 2.957s0.15958 2.0752 0.48047 2.9551c0.32089 0.87983 0.77803 1.6361 1.3691 2.2695 0.59111 0.61588 1.2994 1.0914 2.127 1.4258 0.82756 0.33434 1.7569 0.50195 2.7871 0.50195 1.0302 0 1.9596-0.16762 2.7871-0.50195 0.84444-0.33434 1.5612-0.8099 2.1523-1.4258 0.59111-0.63348 1.0483-1.3897 1.3691-2.2695 0.32089-0.87983 0.48047-1.8641 0.48047-2.9551s-0.15958-2.0772-0.48047-2.957c-0.32089-0.89743-0.77803-1.6536-1.3691-2.2695-0.59111-0.63348-1.3079-1.1188-2.1523-1.4531-0.82756-0.35193-1.7569-0.52734-2.7871-0.52734zm41.715 0c-0.912 0-1.7223 0.18516-2.4316 0.55469-0.69244 0.36953-1.2752 0.87043-1.748 1.5039-0.47289 0.61588-0.83651 1.337-1.0898 2.1641-0.23644 0.80944-0.35352 1.6553-0.35352 2.5352 0 0.93262 0.10007 1.8214 0.30273 2.666 0.21956 0.82704 0.55767 1.556 1.0137 2.1895 0.456 0.61588 1.0387 1.109 1.748 1.4785 0.70933 0.35193 1.5536 0.5293 2.5332 0.5293 0.79378 0 1.5446-0.16762 2.2539-0.50195 0.72622-0.35193 1.2834-0.88986 1.6719-1.6113h0.05078v1.7949c0.01689 0.96782-0.21071 1.7689-0.68359 2.4023-0.456 0.63348-1.1898 0.95117-2.2031 0.95117-0.64178 0-1.2075-0.14228-1.6973-0.42383-0.48978-0.26395-0.81939-0.74731-0.98828-1.4512h-3.5723c0.05067 0.77425 0.25276 1.435 0.60742 1.9805 0.37156 0.56309 0.8287 1.0192 1.3691 1.3711 0.55733 0.35193 1.1656 0.60726 1.8242 0.76562 0.67556 0.17597 1.3328 0.26562 1.9746 0.26562 1.5031 0 2.7025-0.21245 3.5977-0.63477 0.89511-0.42232 1.5798-0.94076 2.0527-1.5566 0.47289-0.59829 0.777-1.2493 0.91211-1.9531 0.152-0.70386 0.22656-1.3295 0.22656-1.875v-12.775h-3.4199v1.8223h-0.05078c-0.43911-0.79185-0.98782-1.3551-1.6465-1.6895-0.64178-0.33434-1.3926-0.50195-2.2539-0.50195zm16.523 0c-0.99644 0-1.9088 0.18516-2.7363 0.55469-0.81067 0.36953-1.5124 0.88017-2.1035 1.5312-0.59111 0.63348-1.0463 1.3897-1.3672 2.2695s-0.48047 1.831-0.48047 2.8516c0 1.0558 0.15108 2.0225 0.45508 2.9023 0.32089 0.87983 0.76758 1.6361 1.3418 2.2695 0.57422 0.63348 1.276 1.1266 2.1035 1.4785 0.82756 0.33434 1.7569 0.50195 2.7871 0.50195 1.4862 0 2.7517-0.35278 3.7988-1.0566 1.0471-0.70386 1.8254-1.8733 2.332-3.5098h-3.168c-0.11822 0.42232-0.43934 0.82772-0.96289 1.2148-0.52355 0.36953-1.1468 0.55274-1.873 0.55273-1.0133 0-1.7916-0.27286-2.332-0.81836-0.54044-0.5455-0.83605-1.4245-0.88672-2.6387h9.4492c0.06756-1.0558-0.01551-2.0673-0.25195-3.0352-0.23644-0.96782-0.62557-1.8293-1.166-2.5859-0.52356-0.75666-1.1998-1.355-2.0273-1.7949-0.82756-0.45751-1.7974-0.6875-2.9121-0.6875zm16.189 0c-0.76 0-1.5023 0.18516-2.2285 0.55469-0.72622 0.35193-1.3174 0.923-1.7734 1.7148h-0.07617v-1.9004h-3.4199v13.646h3.5977v-7.1523c0-1.3901 0.21909-2.3841 0.6582-2.9824 0.43911-0.61588 1.1494-0.92383 2.1289-0.92383 0.86133 0 1.461 0.28066 1.7988 0.84375 0.33778 0.5455 0.50586 1.3816 0.50586 2.5078v7.707h3.5977v-8.3926c0-0.84464-0.0765-1.6106-0.22852-2.2969-0.13511-0.70387-0.3797-1.2925-0.73437-1.7676-0.35466-0.49271-0.84386-0.87277-1.4688-1.1367-0.608-0.28155-1.3948-0.42188-2.3574-0.42188zm-66.062 0.36914 4.3066 6.4668-4.7129 7.1797h4.0293l2.7363-4.3027 2.7344 4.3027h4.1055l-4.8398-7.2578 4.3066-6.3887h-3.9766l-2.2793 3.5645-2.3066-3.5645zm13.275 0 4.584 12.803c0.10133 0.26395 0.15234 0.54461 0.15234 0.84375 0 0.40472-0.11707 0.77504-0.35352 1.1094-0.21956 0.33434-0.56617 0.52729-1.0391 0.58008-0.35467 0.0176-0.70979 0.0098-1.0645-0.02539-0.35467-0.03519-0.70128-0.07027-1.0391-0.10547v3.0879c0.37156 0.03519 0.73518 0.06052 1.0898 0.07813 0.37156 0.03519 0.74368 0.05273 1.1152 0.05273 1.2329 0 2.1943-0.23778 2.8867-0.71289 0.69244-0.47511 1.2326-1.2664 1.6211-2.375l5.4727-15.336h-3.7246l-2.8613 9.3437h-0.05078l-2.9648-9.3437zm-37.48 2.4551c0.59111 0 1.0823 0.12279 1.4707 0.36914s0.6991 0.57184 0.93555 0.97656c0.25333 0.38713 0.43187 0.84515 0.5332 1.373 0.10133 0.5103 0.15234 1.0482 0.15234 1.6113 0 0.56309-0.05101 1.1069-0.15234 1.6348-0.10133 0.5279-0.27137 1.0035-0.50781 1.4258-0.23644 0.40472-0.5556 0.73021-0.96094 0.97656-0.38844 0.24635-0.87959 0.36914-1.4707 0.36914-0.55733 0-1.038-0.12279-1.4434-0.36914-0.38844-0.26395-0.71806-0.59723-0.98828-1.002-0.25333-0.42232-0.43842-0.89788-0.55664-1.4258s-0.17773-1.0561-0.17773-1.584c-1e-7 -0.56309 0.05101-1.0991 0.15234-1.6094 0.11822-0.5279 0.29481-0.99567 0.53125-1.4004 0.25333-0.40472 0.58295-0.73021 0.98828-0.97656 0.40533-0.24635 0.90303-0.36914 1.4941-0.36914zm15.84 0c0.608 0 1.1142 0.13254 1.5195 0.39648 0.42222 0.24635 0.75184 0.57184 0.98828 0.97656 0.25333 0.40472 0.42992 0.87054 0.53125 1.3984 0.10133 0.5279 0.15234 1.0658 0.15234 1.6113 0 0.5455-0.05101 1.0815-0.15234 1.6094-0.10133 0.5103-0.27792 0.97612-0.53125 1.3984-0.23644 0.40472-0.56606 0.73021-0.98828 0.97656-0.40533 0.24635-0.91153 0.36914-1.5195 0.36914-0.608 0-1.1142-0.12279-1.5195-0.36914s-0.73495-0.57184-0.98828-0.97656c-0.23644-0.42232-0.40648-0.88813-0.50781-1.3984-0.10133-0.5279-0.15234-1.0639-0.15234-1.6094 0-0.5455 0.05101-1.0834 0.15234-1.6113 0.10133-0.5279 0.27137-0.99371 0.50781-1.3984 0.25333-0.40472 0.58295-0.73021 0.98828-0.97656 0.40533-0.26395 0.91153-0.39648 1.5195-0.39648zm42.602 0c0.59111 0 1.0803 0.11499 1.4688 0.34375 0.38844 0.22876 0.70106 0.5367 0.9375 0.92383 0.23644 0.38713 0.40648 0.8354 0.50781 1.3457 0.10133 0.49271 0.15039 1.0209 0.15039 1.584 0 0.49271-0.06606 0.96827-0.20117 1.4258-0.11822 0.43992-0.30526 0.83557-0.55859 1.1875-0.25333 0.35193-0.57445 0.63259-0.96289 0.84375-0.38844 0.21116-0.83513 0.31836-1.3418 0.31836-0.55733 0-1.021-0.12474-1.3926-0.37109-0.37156-0.24635-0.67566-0.56209-0.91211-0.94922-0.21956-0.38713-0.38109-0.81786-0.48242-1.293-0.08444-0.49271-0.12695-0.98581-0.12695-1.4785 0-0.5103 0.05101-0.99366 0.15234-1.4512 0.11822-0.47511 0.29676-0.89026 0.5332-1.2422 0.25333-0.36953 0.55744-0.65993 0.91211-0.87109 0.37156-0.21116 0.80974-0.31641 1.3164-0.31641zm15.535 0c0.87822 0 1.529 0.24753 1.9512 0.74024 0.43911 0.49271 0.74322 1.2138 0.91211 2.1641h-5.8535c0.01689-0.26395 0.0679-0.5641 0.15234-0.89844 0.10133-0.33434 0.26287-0.65008 0.48242-0.94922 0.23644-0.29914 0.54055-0.54667 0.91211-0.74023 0.38845-0.21116 0.86914-0.31641 1.4434-0.31641z" fill="url(#e)" stroke="#4665A2" stroke-width=".7"/>
<path d="m52.988 27.291c0.99602-1.0359 1.3944-1.8725 1.7928-3.1076l3.8247-0.03984c0.3113 1.6096 0.82413 2.5137 1.6335 3.1474z" fill="url(#b)" stroke="#000" stroke-width=".5"/>
<path d="m73.89 24.04 28.885-0.2011-0.12476 3.3879-31.033 0.16229c1.2621-1.0234 1.9665-2.2859 2.2724-3.3491z" fill="url(#c)" stroke="#000" stroke-width=".41788"/>
</g>
</svg>
/*
@licstart The following is the entire license notice for the JavaScript code in this file.
The MIT License (MIT)
Copyright (C) 1997-2020 by Dimitri van Heesch
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
and associated documentation files (the "Software"), to deal in the Software without restriction,
including without limitation the rights to use, copy, modify, merge, publish, distribute,
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or
substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@licend The above is the entire license notice for the JavaScript code in this file
*/
function toggleVisibility(linkObj)
{
var base = $(linkObj).attr('id');
var summary = $('#'+base+'-summary');
var content = $('#'+base+'-content');
var trigger = $('#'+base+'-trigger');
var src=$(trigger).attr('src');
if (content.is(':visible')===true) {
content.hide();
summary.show();
$(linkObj).addClass('closed').removeClass('opened');
$(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
} else {
content.show();
summary.hide();
$(linkObj).removeClass('closed').addClass('opened');
$(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
}
return false;
}
function updateStripes()
{
$('table.directory tr').
removeClass('even').filter(':visible:even').addClass('even');
}
function toggleLevel(level)
{
$('table.directory tr').each(function() {
var l = this.id.split('_').length-1;
var i = $('#img'+this.id.substring(3));
var a = $('#arr'+this.id.substring(3));
if (l<level+1) {
i.removeClass('iconfopen iconfclosed').addClass('iconfopen');
a.html('&#9660;');
$(this).show();
} else if (l==level+1) {
i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');
a.html('&#9658;');
$(this).show();
} else {
$(this).hide();
}
});
updateStripes();
}
function toggleFolder(id)
{
// the clicked row
var currentRow = $('#row_'+id);
// all rows after the clicked row
var rows = currentRow.nextAll("tr");
var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
// only match elements AFTER this one (can't hide elements before)
var childRows = rows.filter(function() { return this.id.match(re); });
// first row is visible we are HIDING
if (childRows.filter(':first').is(':visible')===true) {
// replace down arrow by right arrow for current row
var currentRowSpans = currentRow.find("span");
currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
currentRowSpans.filter(".arrow").html('&#9658;');
rows.filter("[id^=row_"+id+"]").hide(); // hide all children
} else { // we are SHOWING
// replace right arrow by down arrow for current row
var currentRowSpans = currentRow.find("span");
currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen");
currentRowSpans.filter(".arrow").html('&#9660;');
// replace down arrows by right arrows for child rows
var childRowsSpans = childRows.find("span");
childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
childRowsSpans.filter(".arrow").html('&#9658;');
childRows.show(); //show all children
}
updateStripes();
}
function toggleInherit(id)
{
var rows = $('tr.inherit.'+id);
var img = $('tr.inherit_header.'+id+' img');
var src = $(img).attr('src');
if (rows.filter(':first').is(':visible')===true) {
rows.css('display','none');
$(img).attr('src',src.substring(0,src.length-8)+'closed.png');
} else {
rows.css('display','table-row'); // using show() causes jump in firefox
$(img).attr('src',src.substring(0,src.length-10)+'open.png');
}
}
/* @license-end */
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Wireless-X: File List</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="ic_launcher.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Wireless-X
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.0 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">File List</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock">Here is a list of all documented files with brief descriptions:</div><div class="directory">
<table class="directory">
<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="MainActivity_8java.html" target="_self">MainActivity.java</a></td><td class="desc">This is where the main code of the Wireless-X android application is written </td></tr>
<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="Wireless-X__server_8py.html" target="_self">Wireless-X_server.py</a></td><td class="desc">This includes the code for the server-side of Wireless-X </td></tr>
</table>
</div><!-- directory -->
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="http://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.0
</small></address>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Wireless-X: Class Members</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="ic_launcher.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Wireless-X
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.0 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="contents">
<div class="textblock">Here is a list of all documented class members with links to the class documentation for each member:</div><ul>
<li>camera_on_off()
: <a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a6e4df6530f7752cf5ce3ea803518796b">com.example.wireless_x.MainActivity</a>
</li>
<li>camera_switch()
: <a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a57bdabe7331b7b6c2366c5a712421eed">com.example.wireless_x.MainActivity</a>
</li>
<li>enter_wireless_x()
: <a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a4d629b747ed093762bec62919da98983">com.example.wireless_x.MainActivity</a>
</li>
<li>getEmojiByUnicode()
: <a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a9850053fcd3feb95047e9e7cd09a1bc6">com.example.wireless_x.MainActivity</a>
</li>
<li>keyPress()
: <a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#af9efad2592afbec052882809d6db191e">com.example.wireless_x.MainActivity</a>
</li>
<li>layout_switch()
: <a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#af2ec32fa67be3d839f1a9c089328315a">com.example.wireless_x.MainActivity</a>
</li>
<li>mouse_click()
: <a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a4ba20fbfd80e439a90dbc2fadabe175f">com.example.wireless_x.MainActivity</a>
</li>
<li>mouse_on_off()
: <a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#ad092f1f66bf81130a5089f32130e1879">com.example.wireless_x.MainActivity</a>
</li>
<li>onBackPressed()
: <a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#af4be89ec8bce3fa9bddb1c0151c3e592">com.example.wireless_x.MainActivity</a>
</li>
<li>onCameraFrame()
: <a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a8777e09d0d879a9f63f089ef62746b5b">com.example.wireless_x.MainActivity</a>
</li>
<li>onCreate()
: <a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a2afda76ce41917b69b043fb5b5d1ee32">com.example.wireless_x.MainActivity</a>
</li>
<li>onDestroy()
: <a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a557ea163daf4e60c184a49812aaf87c4">com.example.wireless_x.MainActivity</a>
</li>
<li>onPause()
: <a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#ae977f58ff77f0c94805aa5e3e7d2e41d">com.example.wireless_x.MainActivity</a>
</li>
<li>onRequestPermissionsResult()
: <a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#ad0be1b394cf38591e8c3b4fddcb0847c">com.example.wireless_x.MainActivity</a>
</li>
<li>onResume()
: <a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a22e8af693e360c03ba5b33eef44c133a">com.example.wireless_x.MainActivity</a>
</li>
<li>shiftPress()
: <a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a13c68af3d44accfe973b3dc661daf9e4">com.example.wireless_x.MainActivity</a>
</li>
<li>test_IP()
: <a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#aad7a718ec54b19184dc7e301fde42f0e">com.example.wireless_x.MainActivity</a>
</li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="http://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.0
</small></address>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Wireless-X: Class Members - Functions</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="ic_launcher.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Wireless-X
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.0 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="contents">
&#160;<ul>
<li>camera_on_off()
: <a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a6e4df6530f7752cf5ce3ea803518796b">com.example.wireless_x.MainActivity</a>
</li>
<li>camera_switch()
: <a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a57bdabe7331b7b6c2366c5a712421eed">com.example.wireless_x.MainActivity</a>
</li>
<li>enter_wireless_x()
: <a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a4d629b747ed093762bec62919da98983">com.example.wireless_x.MainActivity</a>
</li>
<li>getEmojiByUnicode()
: <a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a9850053fcd3feb95047e9e7cd09a1bc6">com.example.wireless_x.MainActivity</a>
</li>
<li>keyPress()
: <a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#af9efad2592afbec052882809d6db191e">com.example.wireless_x.MainActivity</a>
</li>
<li>layout_switch()
: <a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#af2ec32fa67be3d839f1a9c089328315a">com.example.wireless_x.MainActivity</a>
</li>
<li>mouse_click()
: <a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a4ba20fbfd80e439a90dbc2fadabe175f">com.example.wireless_x.MainActivity</a>
</li>
<li>mouse_on_off()
: <a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#ad092f1f66bf81130a5089f32130e1879">com.example.wireless_x.MainActivity</a>
</li>
<li>onBackPressed()
: <a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#af4be89ec8bce3fa9bddb1c0151c3e592">com.example.wireless_x.MainActivity</a>
</li>
<li>onCameraFrame()
: <a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a8777e09d0d879a9f63f089ef62746b5b">com.example.wireless_x.MainActivity</a>
</li>
<li>onCreate()
: <a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a2afda76ce41917b69b043fb5b5d1ee32">com.example.wireless_x.MainActivity</a>
</li>
<li>onDestroy()
: <a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a557ea163daf4e60c184a49812aaf87c4">com.example.wireless_x.MainActivity</a>
</li>
<li>onPause()
: <a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#ae977f58ff77f0c94805aa5e3e7d2e41d">com.example.wireless_x.MainActivity</a>
</li>
<li>onRequestPermissionsResult()
: <a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#ad0be1b394cf38591e8c3b4fddcb0847c">com.example.wireless_x.MainActivity</a>
</li>
<li>onResume()
: <a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a22e8af693e360c03ba5b33eef44c133a">com.example.wireless_x.MainActivity</a>
</li>
<li>shiftPress()
: <a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a13c68af3d44accfe973b3dc661daf9e4">com.example.wireless_x.MainActivity</a>
</li>
<li>test_IP()
: <a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html#aad7a718ec54b19184dc7e301fde42f0e">com.example.wireless_x.MainActivity</a>
</li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="http://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.0
</small></address>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Wireless-X: Class Hierarchy</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="ic_launcher.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Wireless-X
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.0 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">Class Hierarchy</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock">This inheritance list is sorted roughly, but not completely, alphabetically:</div><div class="directory">
<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span>]</div><table class="directory">
<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><b>CvCameraViewListener2</b></td><td class="desc"></td></tr>
<tr id="row_0_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html" target="_self">com.example.wireless_x.MainActivity</a></td><td class="desc">This is where the main code of the Wireless-X android application is written </td></tr>
<tr id="row_1_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_1_" class="arrow" onclick="toggleFolder('1_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><b>AppCompatActivity</b></td><td class="desc"></td></tr>
<tr id="row_1_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html" target="_self">com.example.wireless_x.MainActivity</a></td><td class="desc">This is where the main code of the Wireless-X android application is written </td></tr>
</table>
</div><!-- directory -->
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="http://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.0
</small></address>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Wireless-X: Main Page</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="ic_launcher.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Wireless-X
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.0 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="PageDoc"><div class="header">
<div class="headertitle">
<div class="title">Wireless-X Documentation</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>Wireless-X consists of an android app backed by a python server. This app eliminates the need to buy a wireless mouse, wireless keyboard and a dedicated webcam. Using this app, the user can use his/her android smartphone's screen as mouse, a keyboard layout available on the app as the wireless keyboard, and his/her smartphone's camera as the webcam. A python server running on the target laptop/PC will capture these commands and emulate the effects on laptop. </p>
</div></div><!-- PageDoc -->
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="http://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.0
</small></address>
</body>
</html>
This source diff could not be displayed because it is too large. You can view the blob instead.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Wireless-X: WIRELESS X</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="ic_launcher.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Wireless-X
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.0 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
</div><!-- top -->
<div class="PageDoc"><div class="header">
<div class="headertitle">
<div class="title">WIRELESS X </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h1><a class="anchor" id="autotoc_md1"></a>
Git repository link</h1>
<p><a href="https://git.cse.iitb.ac.in/rajneeshkatkam/PARA-Site_WirelessX">https://git.cse.iitb.ac.in/rajneeshkatkam/PARA-Site_WirelessX</a></p>
<h1><a class="anchor" id="autotoc_md2"></a>
Installation Setup</h1>
<pre class="fragment">1. Make sure that you are in the Wireless-X source directory
2. Grant the permission to execute install.sh installation script using the following command:
$ sudo chmod a+x install.sh
3. Execute the install.sh script to install the necessary dependencies using the following command:
$ sudo ./install.sh
</pre> <h1><a class="anchor" id="autotoc_md3"></a>
Running the application (Strictly follow the below order to run it successfully):</h1>
<pre class="fragment">1. Run the Wireless-X server using the following command:
$ python3 Wireless-X_server.py
2. Enter your linux system password (the same password you enter while executing a command as "sudo"). This is required in order to set up the virtual webcam device.
3. Application Installation and Setup on Android Smartphone:
a. Install the Wireless-X apk on Android smartphone and give required permissions.
b. Now, enter the IP address displayed in the terminal (on which the server is running) into the android application.
c. Click on Test Button to test the connection of smartphone with the server. If failed, Recheck if you have entered correct IP address of Laptop/ Desktop (on which the server is running).
d. After successfull connection, you would be able to control mouse, keyboard of laptop and use smartphones camera as webcam for the laptop/Desktop.
e. Now you would be able to use this virtual webcam device on chrome for video conferincing. (Tested on chrome for MS Teams and Google Meet).
f. (Optional) Inorder to test if camera frames are received to the Laptop/ Desktop, use the below command while (Note: camera option should be turned on in the
Wireless-X apk on Android):
$ ffplay /dev/video20
</pre><h3><a class="anchor" id="autotoc_md4"></a>
*Extra (Inorder to remove v42loopback devices, use below command):</h3>
<pre class="fragment"> $ sudo modprobe -r v4l2loopback
</pre><h1><a class="anchor" id="autotoc_md5"></a>
Steps for Debugging (If python code doesn't run after above commands):</h1>
<pre class="fragment">1. Check if your virtual device is created
$ ls /dev | grep -P '^video\d+$'
OR
$ v4l2-ctl --list-devices # TO List the virtual devices in detail
Output should look somewhat like this:
Wireless-X Camera (platform:v4l2loopback-000):
/dev/video20
Webcam C170: Webcam C170 (usb-0000:00:1a.0-1.2):
/dev/video0
/dev/video1
2. Inorder to test if virtual device is working:
Copy the sample code from https://github.com/jremmons/pyfakewebcam page and save it as python file and run it.
$ python3 demo.py
If everything worked correctly, no error should be displayed and terminal should be blank.
Now, Open another terminal and test if virtual device output is being display by entering below command:
$ ffplay /dev/video20
Note: ffplay
</pre><h1><a class="anchor" id="autotoc_md6"></a>
Working (TODO)</h1>
<h1><a class="anchor" id="autotoc_md7"></a>
References</h1>
<p>OpenCV Reference: </p><pre class="fragment">https://cmsdk.com/java/android-opencv-tcp-video-streaming.html
</pre><p>v4l2loopback References: </p><pre class="fragment">https://github.com/jremmons/pyfakewebcam
https://github.com/jremmons/pyfakewebcam/issues/5
https://github.com/umlaeute/v4l2loopback#DKMS
</pre><p>Android Reference: </p><pre class="fragment">https://stackoverflow.com/questions/23024831/android-shared-preferences-for-creating-one-time-activity-example
</pre> </div></div><!-- contents -->
</div><!-- PageDoc -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="http://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.0
</small></address>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>My Project: WIRELESS X</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">My Project
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.0 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
</div><!-- top -->
<div class="PageDoc"><div class="header">
<div class="headertitle">
<div class="title">WIRELESS X </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h1><a class="anchor" id="autotoc_md1"></a>
Installation Setup</h1>
<pre class="fragment">1. (Optional if already present) Install below packages (python development):
$ sudo apt-get install python3-tk python3-dev
2. Install opencv, autopy, pynput, pyfakewebcam library:
$ sudo pip3 install opencv-python
$ sudo pip3 install autopy
$ sudo pip3 install pynput
$ sudo pip3 install pyfakewebcam
3. FFmpeg and v4l2loopback Setup (for virtual device creation and video frames rendering):
a. Install FFmpeg by typing following command:
$ sudo apt install ffmpeg
b. Install v4l2loopback-dkms v4l2loopback-utils module:
$ sudo apt install v4l2loopback-dkms v4l2loopback-utils
$ sudo modprobe -r v4l2loopback
$ sudo depmod -a
</pre><h1><a class="anchor" id="autotoc_md2"></a>
Running the application (Strictly follow the below order inorder to run it successfully):</h1>
<pre class="fragment">1. Creating virtual device (for webcam) and server On Desktop / Laptop side:
a. Create device using below 2 commands:
$ sudo modprobe v4l2loopback devices=1 video_nr=20 card_label='Wireless-X Camera' exclusive_caps=1
Check if your virtual device is created
$ ls /dev | grep -P '^video\d+$'
(Optional if already done earlier):
$ sudo depmod -a
b. run python file in the directory using below command:
$ python3 Wireless-X_server.py
If no errors encountered, below output should be displayed on terminal:
---------Wireless-X Server------
Camera stream port: 9998
Keyboard and Mouse Listening port: 6666
2. Application Installation and Setup on Android Smartphone:
a. Install the Wireless-X apk on Android smartphone and give required permissions.
b. Now enter the IP address of the Laptop/ Desktop on which the server is hosted. You can type the below command in terminal to get host IP:
$ ifconfig
c. Click on Test Button to test the connection of smartphone with the server. If failed, Recheck if you have entered correct IP address of Laptop/ Desktop (on
which the server is running).
d. After successfull connection, you would be able to control mouse, keyboard of laptop and use smartphones camera as webcam for the laptop/Desktop.
e. Now you would be able to use this virtual webcam device on chrome for video conferincing. (Tested on chrome for MS Teams and Google Meet).
f. (Optional) Inorder to test if camera frames are received to the Laptop/ Desktop, use the below command while (Note: camera option should be turned on in the
Wireless-X apk on Android):
$ ffplay /dev/video20
</pre><h1><a class="anchor" id="autotoc_md3"></a>
IMPORTANT: Make sure you have a virtual device created before running the Wireless-X_server.py.</h1>
<h3><a class="anchor" id="autotoc_md4"></a>
*Extra (Inorder to remove v42loopback devices, use below command):</h3>
<pre class="fragment"> $ sudo modprobe -r v4l2loopback
</pre><h1><a class="anchor" id="autotoc_md5"></a>
Steps for Debugging (If python code doesn't run after above commands):</h1>
<pre class="fragment">1. Check if your virtual device is created
$ ls /dev | grep -P '^video\d+$'
OR
$ v4l2-ctl --list-devices # TO List the virtual devices in detail
Output should look somewhat like this:
Wireless-X Camera (platform:v4l2loopback-000):
/dev/video20
Webcam C170: Webcam C170 (usb-0000:00:1a.0-1.2):
/dev/video0
/dev/video1
2. Inorder to test if virtual device is working:
Copy the sample code from https://github.com/jremmons/pyfakewebcam page and save it as python file and run it.
$ python3 demo.py
If everything worked correctly, no error should be displayed and terminal should be blank.
Now, Open another terminal and test if virtual device output is being display by entering below command:
$ ffplay /dev/video20
Note: ffplay
</pre><p>#References</p>
<p>Opencv references: </p><pre class="fragment">https://cmsdk.com/java/android-opencv-tcp-video-streaming.html
</pre><p>v4l2loopback references: </p><pre class="fragment">https://github.com/jremmons/pyfakewebcam
https://github.com/jremmons/pyfakewebcam/issues/5
https://github.com/umlaeute/v4l2loopback#DKMS
</pre><p>Android: <a href="https://stackoverflow.com/questions/23024831/android-shared-preferences-for-creating-one-time-activity-example">https://stackoverflow.com/questions/23024831/android-shared-preferences-for-creating-one-time-activity-example</a> </p>
</div></div><!-- contents -->
</div><!-- PageDoc -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="http://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.0
</small></address>
</body>
</html>
/*
@licstart The following is the entire license notice for the JavaScript code in this file.
The MIT License (MIT)
Copyright (C) 1997-2020 by Dimitri van Heesch
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
and associated documentation files (the "Software"), to deal in the Software without restriction,
including without limitation the rights to use, copy, modify, merge, publish, distribute,
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or
substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@licend The above is the entire license notice for the JavaScript code in this file
*/
function initMenu(relPath,searchEnabled,serverSide,searchPage,search) {
function makeTree(data,relPath) {
var result='';
if ('children' in data) {
result+='<ul>';
for (var i in data.children) {
result+='<li><a href="'+relPath+data.children[i].url+'">'+
data.children[i].text+'</a>'+
makeTree(data.children[i],relPath)+'</li>';
}
result+='</ul>';
}
return result;
}
$('#main-nav').append(makeTree(menudata,relPath));
$('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu');
if (searchEnabled) {
if (serverSide) {
$('#main-menu').append('<li style="float:right"><div id="MSearchBox" class="MSearchBoxInactive"><div class="left"><form id="FSearchBox" action="'+relPath+searchPage+'" method="get"><img id="MSearchSelect" src="'+relPath+'search/mag.svg" alt=""/><input type="text" id="MSearchField" name="query" value="'+search+'" size="20" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)"></form></div><div class="right"></div></div></li>');
} else {
$('#main-menu').append('<li style="float:right"><div id="MSearchBox" class="MSearchBoxInactive"><span class="left"><img id="MSearchSelect" src="'+relPath+'search/mag_sel.svg" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" alt=""/><input type="text" id="MSearchField" value="'+search+'" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/></span><span class="right"><a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="'+relPath+'search/close.svg" alt=""/></a></span></div></li>');
}
}
$('#main-menu').smartmenus();
}
/* @license-end */
/*
@licstart The following is the entire license notice for the JavaScript code in this file.
The MIT License (MIT)
Copyright (C) 1997-2020 by Dimitri van Heesch
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
and associated documentation files (the "Software"), to deal in the Software without restriction,
including without limitation the rights to use, copy, modify, merge, publish, distribute,
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or
substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@licend The above is the entire license notice for the JavaScript code in this file
*/
var menudata={children:[
{text:"Main Page",url:"index.html"},
{text:"Related Pages",url:"pages.html"},
{text:"Classes",url:"annotated.html",children:[
{text:"Class List",url:"annotated.html"},
{text:"Class Index",url:"classes.html"},
{text:"Class Hierarchy",url:"hierarchy.html"},
{text:"Class Members",url:"functions.html",children:[
{text:"All",url:"functions.html"},
{text:"Functions",url:"functions_func.html"}]}]},
{text:"Files",url:"files.html",children:[
{text:"File List",url:"files.html"}]}]}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>My Project: Wireless Namespace Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">My Project
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.0 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Wireless Namespace Reference</div> </div>
</div><!--header-->
<div class="contents">
<p>-X_server
<a href="namespaceWireless.html#details">More...</a></p>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>-X_server </p>
<pre class="fragment">@file
This includes the code for the server-side of Wireless-X
The server running on laptop or PC is responsible for receiving the actions performed by user on the
Wireless-X android app as well as receiving the camera frames of the user's smartphone (if the user has turned)
on the camera). Such actions are transmitted to the server in encoded form, the server decodes the received
message and instructs the laptop or PC to perform the action described in that message.
</pre> </div></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="http://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.0
</small></address>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>My Project: Namespace List</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">My Project
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.0 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">Namespace List</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock">Here is a list of all documented namespaces with brief descriptions:</div><div class="directory">
<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span><span onclick="javascript:toggleLevel(3);">3</span><span onclick="javascript:toggleLevel(4);">4</span>]</div><table class="directory">
<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>com</b></td><td class="desc"></td></tr>
<tr id="row_0_0_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_0_" class="arrow" onclick="toggleFolder('0_0_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>example</b></td><td class="desc"></td></tr>
<tr id="row_0_0_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_0_0_" class="arrow" onclick="toggleFolder('0_0_0_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>wireless_x</b></td><td class="desc"></td></tr>
<tr id="row_0_0_0_0_"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classcom_1_1example_1_1wireless__x_1_1MainActivity.html" target="_self">MainActivity</a></td><td class="desc">This is where the main code of the Wireless-X android application is written </td></tr>
<tr id="row_1_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">N</span></span><a class="el" href="namespaceWireless.html" target="_self">Wireless</a></td><td class="desc">-X_server </td></tr>
<tr id="row_2_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">N</span></span><b>Wireless-X_server</b></td><td class="desc"></td></tr>
</table>
</div><!-- directory -->
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="http://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.0
</small></address>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Wireless-X: Related Pages</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="ic_launcher.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Wireless-X
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.0 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">Related Pages</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock">Here is a list of all related documentation pages:</div><div class="directory">
<table class="directory">
<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="md_README.html" target="_self">WIRELESS X</a></td><td class="desc"></td></tr>
</table>
</div><!-- directory -->
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="http://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.0
</small></address>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="all_0.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
createResults();
/* @license-end */
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
--></script>
</div>
</body>
</html>
var searchData=
[
['bind_5fsockets_0',['bind_sockets',['../Wireless-X__server_8py.html#a89ff6223b623131684a93295f32bc976',1,'Wireless-X_server']]]
];
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="all_1.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
createResults();
/* @license-end */
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
--></script>
</div>
</body>
</html>
var searchData=
[
['camera_1',['camera',['../Wireless-X__server_8py.html#a13f596ef10f1688c79547c0bc99ea75f',1,'Wireless-X_server']]],
['camera_5fon_5foff_2',['camera_on_off',['../classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a6e4df6530f7752cf5ce3ea803518796b',1,'com::example::wireless_x::MainActivity']]],
['camera_5fstream_5fconnections_3',['camera_stream_connections',['../Wireless-X__server_8py.html#aa577d8e17a9ed9e9765dfad47310f8e4',1,'Wireless-X_server']]],
['camera_5fswitch_4',['camera_switch',['../classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a57bdabe7331b7b6c2366c5a712421eed',1,'com::example::wireless_x::MainActivity']]],
['camerasocket_5',['cameraSocket',['../Wireless-X__server_8py.html#a45dcde7bcdcb4693f7800b933f376ee0',1,'Wireless-X_server']]],
['curr_5fx_6',['curr_x',['../Wireless-X__server_8py.html#aaebd0084b5c865b4d6ee83691622e178',1,'Wireless-X_server']]],
['curr_5fy_7',['curr_y',['../Wireless-X__server_8py.html#a764bc7fd7cda5a9c302abbd1c0b9ce9d',1,'Wireless-X_server']]]
];
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="all_2.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
createResults();
/* @license-end */
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
--></script>
</div>
</body>
</html>
var searchData=
[
['enter_5fwireless_5fx_8',['enter_wireless_x',['../classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a4d629b747ed093762bec62919da98983',1,'com::example::wireless_x::MainActivity']]]
];
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="all_3.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
createResults();
/* @license-end */
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
--></script>
</div>
</body>
</html>
var searchData=
[
['getemojibyunicode_9',['getEmojiByUnicode',['../classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a9850053fcd3feb95047e9e7cd09a1bc6',1,'com::example::wireless_x::MainActivity']]]
];
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="all_4.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
createResults();
/* @license-end */
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
--></script>
</div>
</body>
</html>
var searchData=
[
['height_10',['height',['../Wireless-X__server_8py.html#a5fbc4cec3d85ed72e2b15df06cc732fc',1,'Wireless-X_server']]]
];
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="all_5.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
createResults();
/* @license-end */
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
--></script>
</div>
</body>
</html>
var searchData=
[
['img_5fheight_11',['img_height',['../Wireless-X__server_8py.html#a8eebf5dc6b9c928115225a1e3588c3c5',1,'Wireless-X_server']]],
['img_5fwidth_12',['img_width',['../Wireless-X__server_8py.html#afa870e05abcd643a6414cb70bbe57cc6',1,'Wireless-X_server']]]
];
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="all_6.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
createResults();
/* @license-end */
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
--></script>
</div>
</body>
</html>
var searchData=
[
['keyboard_13',['keyboard',['../Wireless-X__server_8py.html#a58e2d0036cb3910e655408e179feec10',1,'Wireless-X_server']]],
['keypress_14',['keyPress',['../classcom_1_1example_1_1wireless__x_1_1MainActivity.html#af9efad2592afbec052882809d6db191e',1,'com::example::wireless_x::MainActivity']]]
];
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="all_7.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
createResults();
/* @license-end */
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
--></script>
</div>
</body>
</html>
var searchData=
[
['layout_5fswitch_15',['layout_switch',['../classcom_1_1example_1_1wireless__x_1_1MainActivity.html#af2ec32fa67be3d839f1a9c089328315a',1,'com::example::wireless_x::MainActivity']]],
['listening_5fconnections_16',['listening_connections',['../Wireless-X__server_8py.html#a79901b301ca92aaf0cf102d9eb534a91',1,'Wireless-X_server']]]
];
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="all_8.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
createResults();
/* @license-end */
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
--></script>
</div>
</body>
</html>
var searchData=
[
['mainactivity_17',['MainActivity',['../classcom_1_1example_1_1wireless__x_1_1MainActivity.html',1,'com::example::wireless_x']]],
['mainactivity_2ejava_18',['MainActivity.java',['../MainActivity_8java.html',1,'']]],
['mouse_19',['mouse',['../Wireless-X__server_8py.html#a5b66540b63fab3022f0c750bac663345',1,'Wireless-X_server']]],
['mouse_5fclick_20',['mouse_click',['../classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a4ba20fbfd80e439a90dbc2fadabe175f',1,'com::example::wireless_x::MainActivity']]],
['mouse_5fkeyboard_5fconnections_21',['mouse_keyboard_connections',['../Wireless-X__server_8py.html#a6db0464af01126b82f9ff27839b4d236',1,'Wireless-X_server']]],
['mouse_5fon_5foff_22',['mouse_on_off',['../classcom_1_1example_1_1wireless__x_1_1MainActivity.html#ad092f1f66bf81130a5089f32130e1879',1,'com::example::wireless_x::MainActivity']]],
['mouse_5fspeed_23',['mouse_speed',['../Wireless-X__server_8py.html#a3b73746def437cc51ef5946752dd09ad',1,'Wireless-X_server']]]
];
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="all_9.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
createResults();
/* @license-end */
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
--></script>
</div>
</body>
</html>
var searchData=
[
['onbackpressed_24',['onBackPressed',['../classcom_1_1example_1_1wireless__x_1_1MainActivity.html#af4be89ec8bce3fa9bddb1c0151c3e592',1,'com::example::wireless_x::MainActivity']]],
['oncameraframe_25',['onCameraFrame',['../classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a8777e09d0d879a9f63f089ef62746b5b',1,'com::example::wireless_x::MainActivity']]],
['oncreate_26',['onCreate',['../classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a2afda76ce41917b69b043fb5b5d1ee32',1,'com::example::wireless_x::MainActivity']]],
['ondestroy_27',['onDestroy',['../classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a557ea163daf4e60c184a49812aaf87c4',1,'com::example::wireless_x::MainActivity']]],
['onpause_28',['onPause',['../classcom_1_1example_1_1wireless__x_1_1MainActivity.html#ae977f58ff77f0c94805aa5e3e7d2e41d',1,'com::example::wireless_x::MainActivity']]],
['onrequestpermissionsresult_29',['onRequestPermissionsResult',['../classcom_1_1example_1_1wireless__x_1_1MainActivity.html#ad0be1b394cf38591e8c3b4fddcb0847c',1,'com::example::wireless_x::MainActivity']]],
['onresume_30',['onResume',['../classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a22e8af693e360c03ba5b33eef44c133a',1,'com::example::wireless_x::MainActivity']]]
];
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="all_a.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
createResults();
/* @license-end */
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
--></script>
</div>
</body>
</html>
var searchData=
[
['remote_5fx_31',['remote_x',['../Wireless-X__server_8py.html#a1450e29f8b058a690ac172cb516bd558',1,'Wireless-X_server']]],
['remote_5fy_32',['remote_y',['../Wireless-X__server_8py.html#adeae735ccc3dbb8abd29b300dbc830eb',1,'Wireless-X_server']]]
];
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="all_b.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
createResults();
/* @license-end */
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
--></script>
</div>
</body>
</html>
var searchData=
[
['s_33',['s',['../Wireless-X__server_8py.html#a91f42afd61bbcbd6f88f4f9d0ac3cb45',1,'Wireless-X_server']]],
['screenshot_5fcount_34',['screenshot_count',['../Wireless-X__server_8py.html#a84a42e06c60f25a66338c51f4fcf5f99',1,'Wireless-X_server']]],
['shiftpress_35',['shiftPress',['../classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a13c68af3d44accfe973b3dc661daf9e4',1,'com::example::wireless_x::MainActivity']]],
['special_5fkey_5fandroid_5fdictionary_36',['special_key_android_dictionary',['../Wireless-X__server_8py.html#a2bfd6439764b53b8df612bbc0335a07c',1,'Wireless-X_server']]]
];
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="all_c.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
createResults();
/* @license-end */
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
--></script>
</div>
</body>
</html>
var searchData=
[
['test_5fip_37',['test_IP',['../classcom_1_1example_1_1wireless__x_1_1MainActivity.html#aad7a718ec54b19184dc7e301fde42f0e',1,'com::example::wireless_x::MainActivity']]],
['thread_5frun_38',['thread_run',['../Wireless-X__server_8py.html#a33b4715674007489c6b6756bc8ef4b70',1,'Wireless-X_server']]]
];
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="all_d.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
createResults();
/* @license-end */
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
--></script>
</div>
</body>
</html>
var searchData=
[
['virtualcamera_39',['virtualCamera',['../Wireless-X__server_8py.html#ab168597dce547df306f8cef48714f256',1,'Wireless-X_server']]]
];
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="all_e.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
createResults();
/* @license-end */
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
--></script>
</div>
</body>
</html>
var searchData=
[
['wireless_20x_40',['WIRELESS X',['../md_README.html',1,'']]],
['width_41',['width',['../Wireless-X__server_8py.html#af68defefb623d24f4e1976c3a061bf98',1,'Wireless-X_server']]],
['wireless_2dx_5fserver_2epy_42',['Wireless-X_server.py',['../Wireless-X__server_8py.html',1,'']]]
];
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="classes_0.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
createResults();
/* @license-end */
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
--></script>
</div>
</body>
</html>
var searchData=
[
['mainactivity_43',['MainActivity',['../classcom_1_1example_1_1wireless__x_1_1MainActivity.html',1,'com::example::wireless_x']]]
];
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 11 11"
height="11"
width="11"
id="svg2"
version="1.1">
<metadata
id="metadata8">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs6" />
<path
id="path12"
d="M 5.5 0.5 A 5 5 0 0 0 0.5 5.5 A 5 5 0 0 0 5.5 10.5 A 5 5 0 0 0 10.5 5.5 A 5 5 0 0 0 5.5 0.5 z M 3.5820312 3 A 0.58291923 0.58291923 0 0 1 4 3.1757812 L 5.5 4.6757812 L 7 3.1757812 A 0.58291923 0.58291923 0 0 1 7.4003906 3 A 0.58291923 0.58291923 0 0 1 7.8242188 4 L 6.3242188 5.5 L 7.8242188 7 A 0.58291923 0.58291923 0 1 1 7 7.8242188 L 5.5 6.3242188 L 4 7.8242188 A 0.58291923 0.58291923 0 1 1 3.1757812 7 L 4.6757812 5.5 L 3.1757812 4 A 0.58291923 0.58291923 0 0 1 3.5820312 3 z "
style="stroke-width:1.09870648;fill:#bababa;fill-opacity:1" />
</svg>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="files_0.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
createResults();
/* @license-end */
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
--></script>
</div>
</body>
</html>
var searchData=
[
['mainactivity_2ejava_44',['MainActivity.java',['../MainActivity_8java.html',1,'']]]
];
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="files_1.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
createResults();
/* @license-end */
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
--></script>
</div>
</body>
</html>
var searchData=
[
['wireless_2dx_5fserver_2epy_45',['Wireless-X_server.py',['../Wireless-X__server_8py.html',1,'']]]
];
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="functions_0.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
createResults();
/* @license-end */
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
--></script>
</div>
</body>
</html>
var searchData=
[
['bind_5fsockets_46',['bind_sockets',['../Wireless-X__server_8py.html#a89ff6223b623131684a93295f32bc976',1,'Wireless-X_server']]]
];
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="functions_1.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
createResults();
/* @license-end */
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
--></script>
</div>
</body>
</html>
var searchData=
[
['camera_5fon_5foff_47',['camera_on_off',['../classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a6e4df6530f7752cf5ce3ea803518796b',1,'com::example::wireless_x::MainActivity']]],
['camera_5fstream_5fconnections_48',['camera_stream_connections',['../Wireless-X__server_8py.html#aa577d8e17a9ed9e9765dfad47310f8e4',1,'Wireless-X_server']]],
['camera_5fswitch_49',['camera_switch',['../classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a57bdabe7331b7b6c2366c5a712421eed',1,'com::example::wireless_x::MainActivity']]]
];
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="functions_2.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
createResults();
/* @license-end */
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
--></script>
</div>
</body>
</html>
var searchData=
[
['enter_5fwireless_5fx_50',['enter_wireless_x',['../classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a4d629b747ed093762bec62919da98983',1,'com::example::wireless_x::MainActivity']]]
];
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="functions_3.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
createResults();
/* @license-end */
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
--></script>
</div>
</body>
</html>
var searchData=
[
['getemojibyunicode_51',['getEmojiByUnicode',['../classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a9850053fcd3feb95047e9e7cd09a1bc6',1,'com::example::wireless_x::MainActivity']]]
];
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="functions_4.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
createResults();
/* @license-end */
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
--></script>
</div>
</body>
</html>
var searchData=
[
['keypress_52',['keyPress',['../classcom_1_1example_1_1wireless__x_1_1MainActivity.html#af9efad2592afbec052882809d6db191e',1,'com::example::wireless_x::MainActivity']]]
];
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="functions_5.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
createResults();
/* @license-end */
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
--></script>
</div>
</body>
</html>
var searchData=
[
['layout_5fswitch_53',['layout_switch',['../classcom_1_1example_1_1wireless__x_1_1MainActivity.html#af2ec32fa67be3d839f1a9c089328315a',1,'com::example::wireless_x::MainActivity']]],
['listening_5fconnections_54',['listening_connections',['../Wireless-X__server_8py.html#a79901b301ca92aaf0cf102d9eb534a91',1,'Wireless-X_server']]]
];
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="functions_6.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
createResults();
/* @license-end */
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
--></script>
</div>
</body>
</html>
var searchData=
[
['mouse_5fclick_55',['mouse_click',['../classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a4ba20fbfd80e439a90dbc2fadabe175f',1,'com::example::wireless_x::MainActivity']]],
['mouse_5fkeyboard_5fconnections_56',['mouse_keyboard_connections',['../Wireless-X__server_8py.html#a6db0464af01126b82f9ff27839b4d236',1,'Wireless-X_server']]],
['mouse_5fon_5foff_57',['mouse_on_off',['../classcom_1_1example_1_1wireless__x_1_1MainActivity.html#ad092f1f66bf81130a5089f32130e1879',1,'com::example::wireless_x::MainActivity']]]
];
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="functions_7.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
createResults();
/* @license-end */
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
--></script>
</div>
</body>
</html>
var searchData=
[
['onbackpressed_58',['onBackPressed',['../classcom_1_1example_1_1wireless__x_1_1MainActivity.html#af4be89ec8bce3fa9bddb1c0151c3e592',1,'com::example::wireless_x::MainActivity']]],
['oncameraframe_59',['onCameraFrame',['../classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a8777e09d0d879a9f63f089ef62746b5b',1,'com::example::wireless_x::MainActivity']]],
['oncreate_60',['onCreate',['../classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a2afda76ce41917b69b043fb5b5d1ee32',1,'com::example::wireless_x::MainActivity']]],
['ondestroy_61',['onDestroy',['../classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a557ea163daf4e60c184a49812aaf87c4',1,'com::example::wireless_x::MainActivity']]],
['onpause_62',['onPause',['../classcom_1_1example_1_1wireless__x_1_1MainActivity.html#ae977f58ff77f0c94805aa5e3e7d2e41d',1,'com::example::wireless_x::MainActivity']]],
['onrequestpermissionsresult_63',['onRequestPermissionsResult',['../classcom_1_1example_1_1wireless__x_1_1MainActivity.html#ad0be1b394cf38591e8c3b4fddcb0847c',1,'com::example::wireless_x::MainActivity']]],
['onresume_64',['onResume',['../classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a22e8af693e360c03ba5b33eef44c133a',1,'com::example::wireless_x::MainActivity']]]
];
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="functions_8.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
createResults();
/* @license-end */
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
--></script>
</div>
</body>
</html>
var searchData=
[
['shiftpress_65',['shiftPress',['../classcom_1_1example_1_1wireless__x_1_1MainActivity.html#a13c68af3d44accfe973b3dc661daf9e4',1,'com::example::wireless_x::MainActivity']]]
];
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="functions_9.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
createResults();
/* @license-end */
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
--></script>
</div>
</body>
</html>
var searchData=
[
['test_5fip_66',['test_IP',['../classcom_1_1example_1_1wireless__x_1_1MainActivity.html#aad7a718ec54b19184dc7e301fde42f0e',1,'com::example::wireless_x::MainActivity']]]
];
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="svg2"
width="20"
height="19"
viewBox="0 0 20 19"
sodipodi:docname="mag_sel.svg"
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)">
<metadata
id="metadata8">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs6" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="2096"
id="namedview4"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:zoom="32"
inkscape:cx="5.9792688"
inkscape:cy="1.1436277"
inkscape:window-x="1920"
inkscape:window-y="27"
inkscape:window-maximized="0"
inkscape:current-layer="svg2" />
<circle
style="fill:#000000;fill-opacity:0;stroke:#656565;stroke-width:1.4;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
id="path4611"
cx="5.5"
cy="8.5"
r="3.5" />
<path
style="fill:#656565;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 11,7 13.5,10 16,7 Z"
id="path4609"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="fill:none;stroke:#656565;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 8.1085854,11.109059 2.7823556,2.782356"
id="path4630"
inkscape:connector-curvature="0" />
</svg>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="namespaces_0.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
createResults();
/* @license-end */
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
--></script>
</div>
</body>
</html>
var searchData=
[
['wireless_22',['Wireless',['../namespaceWireless.html',1,'']]]
];
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="pages_0.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
createResults();
/* @license-end */
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
--></script>
</div>
</body>
</html>
var searchData=
[
['wireless_20x_85',['WIRELESS X',['../md_README.html',1,'']]]
];
/*---------------- Search Box */
#MSearchBox {
white-space : nowrap;
background: white;
border-radius: 0.65em;
box-shadow: inset 0.5px 0.5px 3px 0px #555;
z-index: 102;
}
#MSearchBox .left {
display: inline-block;
vertical-align: middle;
height: 1.4em;
}
#MSearchSelect {
display: inline-block;
vertical-align: middle;
height: 1.4em;
padding: 0 0 0 0.3em;
margin: 0;
}
#MSearchField {
display: inline-block;
vertical-align: middle;
width: 7.5em;
height: 1.1em;
margin: 0 0.15em;
padding: 0;
line-height: 1em;
border:none;
color: #909090;
outline: none;
font-family: Arial, Verdana, sans-serif;
-webkit-border-radius: 0px;
border-radius: 0px;
background: none;
}
#MSearchBox .right {
display: inline-block;
vertical-align: middle;
width: 1.4em;
height: 1.4em;
}
#MSearchClose {
display: none;
font-size: inherit;
background : none;
border: none;
margin: 0;
padding: 0;
outline: none;
}
#MSearchCloseImg {
height: 1.4em;
padding: 0.3em;
margin: 0;
}
.MSearchBoxActive #MSearchField {
color: #000000;
}
#main-menu > li:last-child {
/* This <li> object is the parent of the search bar */
display: flex;
justify-content: center;
align-items: center;
height: 36px;
margin-right: 1em;
}
/*---------------- Search filter selection */
#MSearchSelectWindow {
display: none;
position: absolute;
left: 0; top: 0;
border: 1px solid #90A5CE;
background-color: #F9FAFC;
z-index: 10001;
padding-top: 4px;
padding-bottom: 4px;
-moz-border-radius: 4px;
-webkit-border-top-left-radius: 4px;
-webkit-border-top-right-radius: 4px;
-webkit-border-bottom-left-radius: 4px;
-webkit-border-bottom-right-radius: 4px;
-webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
}
.SelectItem {
font: 8pt Arial, Verdana, sans-serif;
padding-left: 2px;
padding-right: 12px;
border: 0px;
}
span.SelectionMark {
margin-right: 4px;
font-family: monospace;
outline-style: none;
text-decoration: none;
}
a.SelectItem {
display: block;
outline-style: none;
color: #000000;
text-decoration: none;
padding-left: 6px;
padding-right: 12px;
}
a.SelectItem:focus,
a.SelectItem:active {
color: #000000;
outline-style: none;
text-decoration: none;
}
a.SelectItem:hover {
color: #FFFFFF;
background-color: #3D578C;
outline-style: none;
text-decoration: none;
cursor: pointer;
display: block;
}
/*---------------- Search results window */
iframe#MSearchResults {
width: 60ex;
height: 15em;
}
#MSearchResultsWindow {
display: none;
position: absolute;
left: 0; top: 0;
border: 1px solid #000;
background-color: #EEF1F7;
z-index:10000;
}
/* ----------------------------------- */
#SRIndex {
clear:both;
padding-bottom: 15px;
}
.SREntry {
font-size: 10pt;
padding-left: 1ex;
}
.SRPage .SREntry {
font-size: 8pt;
padding: 1px 5px;
}
body.SRPage {
margin: 5px 2px;
}
.SRChildren {
padding-left: 3ex; padding-bottom: .5em
}
.SRPage .SRChildren {
display: none;
}
.SRSymbol {
font-weight: bold;
color: #425E97;
font-family: Arial, Verdana, sans-serif;
text-decoration: none;
outline: none;
}
a.SRScope {
display: block;
color: #425E97;
font-family: Arial, Verdana, sans-serif;
text-decoration: none;
outline: none;
}
a.SRSymbol:focus, a.SRSymbol:active,
a.SRScope:focus, a.SRScope:active {
text-decoration: underline;
}
span.SRScope {
padding-left: 4px;
}
.SRPage .SRStatus {
padding: 2px 5px;
font-size: 8pt;
font-style: italic;
}
.SRResult {
display: none;
}
DIV.searchresults {
margin-left: 10px;
margin-right: 10px;
}
/*---------------- External search page results */
.searchresult {
background-color: #F0F3F8;
}
.pages b {
color: white;
padding: 5px 5px 3px 5px;
background-image: url("../tab_a.png");
background-repeat: repeat-x;
text-shadow: 0 1px 1px #000000;
}
.pages {
line-height: 17px;
margin-left: 4px;
text-decoration: none;
}
.hl {
font-weight: bold;
}
#searchresults {
margin-bottom: 20px;
}
.searchpages {
margin-top: 10px;
}
/*
@licstart The following is the entire license notice for the JavaScript code in this file.
The MIT License (MIT)
Copyright (C) 1997-2020 by Dimitri van Heesch
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
and associated documentation files (the "Software"), to deal in the Software without restriction,
including without limitation the rights to use, copy, modify, merge, publish, distribute,
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or
substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@licend The above is the entire license notice for the JavaScript code in this file
*/
function convertToId(search)
{
var result = '';
for (i=0;i<search.length;i++)
{
var c = search.charAt(i);
var cn = c.charCodeAt(0);
if (c.match(/[a-z0-9\u0080-\uFFFF]/))
{
result+=c;
}
else if (cn<16)
{
result+="_0"+cn.toString(16);
}
else
{
result+="_"+cn.toString(16);
}
}
return result;
}
function getXPos(item)
{
var x = 0;
if (item.offsetWidth)
{
while (item && item!=document.body)
{
x += item.offsetLeft;
item = item.offsetParent;
}
}
return x;
}
function getYPos(item)
{
var y = 0;
if (item.offsetWidth)
{
while (item && item!=document.body)
{
y += item.offsetTop;
item = item.offsetParent;
}
}
return y;
}
/* A class handling everything associated with the search panel.
Parameters:
name - The name of the global variable that will be
storing this instance. Is needed to be able to set timeouts.
resultPath - path to use for external files
*/
function SearchBox(name, resultsPath, inFrame, label, extension)
{
if (!name || !resultsPath) { alert("Missing parameters to SearchBox."); }
if (!extension || extension == "") { extension = ".html"; }
// ---------- Instance variables
this.name = name;
this.resultsPath = resultsPath;
this.keyTimeout = 0;
this.keyTimeoutLength = 500;
this.closeSelectionTimeout = 300;
this.lastSearchValue = "";
this.lastResultsPage = "";
this.hideTimeout = 0;
this.searchIndex = 0;
this.searchActive = false;
this.insideFrame = inFrame;
this.searchLabel = label;
this.extension = extension;
// ----------- DOM Elements
this.DOMSearchField = function()
{ return document.getElementById("MSearchField"); }
this.DOMSearchSelect = function()
{ return document.getElementById("MSearchSelect"); }
this.DOMSearchSelectWindow = function()
{ return document.getElementById("MSearchSelectWindow"); }
this.DOMPopupSearchResults = function()
{ return document.getElementById("MSearchResults"); }
this.DOMPopupSearchResultsWindow = function()
{ return document.getElementById("MSearchResultsWindow"); }
this.DOMSearchClose = function()
{ return document.getElementById("MSearchClose"); }
this.DOMSearchBox = function()
{ return document.getElementById("MSearchBox"); }
// ------------ Event Handlers
// Called when focus is added or removed from the search field.
this.OnSearchFieldFocus = function(isActive)
{
this.Activate(isActive);
}
this.OnSearchSelectShow = function()
{
var searchSelectWindow = this.DOMSearchSelectWindow();
var searchField = this.DOMSearchSelect();
if (this.insideFrame)
{
var left = getXPos(searchField);
var top = getYPos(searchField);
left += searchField.offsetWidth + 6;
top += searchField.offsetHeight;
// show search selection popup
searchSelectWindow.style.display='block';
left -= searchSelectWindow.offsetWidth;
searchSelectWindow.style.left = left + 'px';
searchSelectWindow.style.top = top + 'px';
}
else
{
var left = getXPos(searchField);
var top = getYPos(searchField);
top += searchField.offsetHeight;
// show search selection popup
searchSelectWindow.style.display='block';
searchSelectWindow.style.left = left + 'px';
searchSelectWindow.style.top = top + 'px';
}
// stop selection hide timer
if (this.hideTimeout)
{
clearTimeout(this.hideTimeout);
this.hideTimeout=0;
}
return false; // to avoid "image drag" default event
}
this.OnSearchSelectHide = function()
{
this.hideTimeout = setTimeout(this.name +".CloseSelectionWindow()",
this.closeSelectionTimeout);
}
// Called when the content of the search field is changed.
this.OnSearchFieldChange = function(evt)
{
if (this.keyTimeout) // kill running timer
{
clearTimeout(this.keyTimeout);
this.keyTimeout = 0;
}
var e = (evt) ? evt : window.event; // for IE
if (e.keyCode==40 || e.keyCode==13)
{
if (e.shiftKey==1)
{
this.OnSearchSelectShow();
var win=this.DOMSearchSelectWindow();
for (i=0;i<win.childNodes.length;i++)
{
var child = win.childNodes[i]; // get span within a
if (child.className=='SelectItem')
{
child.focus();
return;
}
}
return;
}
else
{
window.frames.MSearchResults.postMessage("take_focus", "*");
}
}
else if (e.keyCode==27) // Escape out of the search field
{
this.DOMSearchField().blur();
this.DOMPopupSearchResultsWindow().style.display = 'none';
this.DOMSearchClose().style.display = 'none';
this.lastSearchValue = '';
this.Activate(false);
return;
}
// strip whitespaces
var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
if (searchValue != this.lastSearchValue) // search value has changed
{
if (searchValue != "") // non-empty search
{
// set timer for search update
this.keyTimeout = setTimeout(this.name + '.Search()',
this.keyTimeoutLength);
}
else // empty search field
{
this.DOMPopupSearchResultsWindow().style.display = 'none';
this.DOMSearchClose().style.display = 'none';
this.lastSearchValue = '';
}
}
}
this.SelectItemCount = function(id)
{
var count=0;
var win=this.DOMSearchSelectWindow();
for (i=0;i<win.childNodes.length;i++)
{
var child = win.childNodes[i]; // get span within a
if (child.className=='SelectItem')
{
count++;
}
}
return count;
}
this.SelectItemSet = function(id)
{
var i,j=0;
var win=this.DOMSearchSelectWindow();
for (i=0;i<win.childNodes.length;i++)
{
var child = win.childNodes[i]; // get span within a
if (child.className=='SelectItem')
{
var node = child.firstChild;
if (j==id)
{
node.innerHTML='&#8226;';
}
else
{
node.innerHTML='&#160;';
}
j++;
}
}
}
// Called when an search filter selection is made.
// set item with index id as the active item
this.OnSelectItem = function(id)
{
this.searchIndex = id;
this.SelectItemSet(id);
var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
if (searchValue!="" && this.searchActive) // something was found -> do a search
{
this.Search();
}
}
this.OnSearchSelectKey = function(evt)
{
var e = (evt) ? evt : window.event; // for IE
if (e.keyCode==40 && this.searchIndex<this.SelectItemCount()) // Down
{
this.searchIndex++;
this.OnSelectItem(this.searchIndex);
}
else if (e.keyCode==38 && this.searchIndex>0) // Up
{
this.searchIndex--;
this.OnSelectItem(this.searchIndex);
}
else if (e.keyCode==13 || e.keyCode==27)
{
this.OnSelectItem(this.searchIndex);
this.CloseSelectionWindow();
this.DOMSearchField().focus();
}
return false;
}
// --------- Actions
// Closes the results window.
this.CloseResultsWindow = function()
{
this.DOMPopupSearchResultsWindow().style.display = 'none';
this.DOMSearchClose().style.display = 'none';
this.Activate(false);
}
this.CloseSelectionWindow = function()
{
this.DOMSearchSelectWindow().style.display = 'none';
}
// Performs a search.
this.Search = function()
{
this.keyTimeout = 0;
// strip leading whitespace
var searchValue = this.DOMSearchField().value.replace(/^ +/, "");
var code = searchValue.toLowerCase().charCodeAt(0);
var idxChar = searchValue.substr(0, 1).toLowerCase();
if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair
{
idxChar = searchValue.substr(0, 2);
}
var resultsPage;
var resultsPageWithSearch;
var hasResultsPage;
var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar);
if (idx!=-1)
{
var hexCode=idx.toString(16);
resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + this.extension;
resultsPageWithSearch = resultsPage+'?'+escape(searchValue);
hasResultsPage = true;
}
else // nothing available for this search term
{
resultsPage = this.resultsPath + '/nomatches.html';
resultsPageWithSearch = resultsPage;
hasResultsPage = false;
}
window.frames.MSearchResults.location = resultsPageWithSearch;
var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow();
if (domPopupSearchResultsWindow.style.display!='block')
{
var domSearchBox = this.DOMSearchBox();
this.DOMSearchClose().style.display = 'inline-block';
if (this.insideFrame)
{
var domPopupSearchResults = this.DOMPopupSearchResults();
domPopupSearchResultsWindow.style.position = 'relative';
domPopupSearchResultsWindow.style.display = 'block';
var width = document.body.clientWidth - 8; // the -8 is for IE :-(
domPopupSearchResultsWindow.style.width = width + 'px';
domPopupSearchResults.style.width = width + 'px';
}
else
{
var domPopupSearchResults = this.DOMPopupSearchResults();
var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth;
var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1;
domPopupSearchResultsWindow.style.display = 'block';
left -= domPopupSearchResults.offsetWidth;
domPopupSearchResultsWindow.style.top = top + 'px';
domPopupSearchResultsWindow.style.left = left + 'px';
}
}
this.lastSearchValue = searchValue;
this.lastResultsPage = resultsPage;
}
// -------- Activation Functions
// Activates or deactivates the search panel, resetting things to
// their default values if necessary.
this.Activate = function(isActive)
{
if (isActive || // open it
this.DOMPopupSearchResultsWindow().style.display == 'block'
)
{
this.DOMSearchBox().className = 'MSearchBoxActive';
var searchField = this.DOMSearchField();
if (searchField.value == this.searchLabel) // clear "Search" term upon entry
{
searchField.value = '';
this.searchActive = true;
}
}
else if (!isActive) // directly remove the panel
{
this.DOMSearchBox().className = 'MSearchBoxInactive';
this.DOMSearchField().value = this.searchLabel;
this.searchActive = false;
this.lastSearchValue = ''
this.lastResultsPage = '';
}
}
}
// -----------------------------------------------------------------------
// The class that handles everything on the search results page.
function SearchResults(name)
{
// The number of matches from the last run of <Search()>.
this.lastMatchCount = 0;
this.lastKey = 0;
this.repeatOn = false;
// Toggles the visibility of the passed element ID.
this.FindChildElement = function(id)
{
var parentElement = document.getElementById(id);
var element = parentElement.firstChild;
while (element && element!=parentElement)
{
if (element.nodeName == 'DIV' && element.className == 'SRChildren')
{
return element;
}
if (element.nodeName == 'DIV' && element.hasChildNodes())
{
element = element.firstChild;
}
else if (element.nextSibling)
{
element = element.nextSibling;
}
else
{
do
{
element = element.parentNode;
}
while (element && element!=parentElement && !element.nextSibling);
if (element && element!=parentElement)
{
element = element.nextSibling;
}
}
}
}
this.Toggle = function(id)
{
var element = this.FindChildElement(id);
if (element)
{
if (element.style.display == 'block')
{
element.style.display = 'none';
}
else
{
element.style.display = 'block';
}
}
}
// Searches for the passed string. If there is no parameter,
// it takes it from the URL query.
//
// Always returns true, since other documents may try to call it
// and that may or may not be possible.
this.Search = function(search)
{
if (!search) // get search word from URL
{
search = window.location.search;
search = search.substring(1); // Remove the leading '?'
search = unescape(search);
}
search = search.replace(/^ +/, ""); // strip leading spaces
search = search.replace(/ +$/, ""); // strip trailing spaces
search = search.toLowerCase();
search = convertToId(search);
var resultRows = document.getElementsByTagName("div");
var matches = 0;
var i = 0;
while (i < resultRows.length)
{
var row = resultRows.item(i);
if (row.className == "SRResult")
{
var rowMatchName = row.id.toLowerCase();
rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_'
if (search.length<=rowMatchName.length &&
rowMatchName.substr(0, search.length)==search)
{
row.style.display = 'block';
matches++;
}
else
{
row.style.display = 'none';
}
}
i++;
}
document.getElementById("Searching").style.display='none';
if (matches == 0) // no results
{
document.getElementById("NoMatches").style.display='block';
}
else // at least one result
{
document.getElementById("NoMatches").style.display='none';
}
this.lastMatchCount = matches;
return true;
}
// return the first item with index index or higher that is visible
this.NavNext = function(index)
{
var focusItem;
while (1)
{
var focusName = 'Item'+index;
focusItem = document.getElementById(focusName);
if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
{
break;
}
else if (!focusItem) // last element
{
break;
}
focusItem=null;
index++;
}
return focusItem;
}
this.NavPrev = function(index)
{
var focusItem;
while (1)
{
var focusName = 'Item'+index;
focusItem = document.getElementById(focusName);
if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
{
break;
}
else if (!focusItem) // last element
{
break;
}
focusItem=null;
index--;
}
return focusItem;
}
this.ProcessKeys = function(e)
{
if (e.type == "keydown")
{
this.repeatOn = false;
this.lastKey = e.keyCode;
}
else if (e.type == "keypress")
{
if (!this.repeatOn)
{
if (this.lastKey) this.repeatOn = true;
return false; // ignore first keypress after keydown
}
}
else if (e.type == "keyup")
{
this.lastKey = 0;
this.repeatOn = false;
}
return this.lastKey!=0;
}
this.Nav = function(evt,itemIndex)
{
var e = (evt) ? evt : window.event; // for IE
if (e.keyCode==13) return true;
if (!this.ProcessKeys(e)) return false;
if (this.lastKey==38) // Up
{
var newIndex = itemIndex-1;
var focusItem = this.NavPrev(newIndex);
if (focusItem)
{
var child = this.FindChildElement(focusItem.parentNode.parentNode.id);
if (child && child.style.display == 'block') // children visible
{
var n=0;
var tmpElem;
while (1) // search for last child
{
tmpElem = document.getElementById('Item'+newIndex+'_c'+n);
if (tmpElem)
{
focusItem = tmpElem;
}
else // found it!
{
break;
}
n++;
}
}
}
if (focusItem)
{
focusItem.focus();
}
else // return focus to search field
{
parent.document.getElementById("MSearchField").focus();
}
}
else if (this.lastKey==40) // Down
{
var newIndex = itemIndex+1;
var focusItem;
var item = document.getElementById('Item'+itemIndex);
var elem = this.FindChildElement(item.parentNode.parentNode.id);
if (elem && elem.style.display == 'block') // children visible
{
focusItem = document.getElementById('Item'+itemIndex+'_c0');
}
if (!focusItem) focusItem = this.NavNext(newIndex);
if (focusItem) focusItem.focus();
}
else if (this.lastKey==39) // Right
{
var item = document.getElementById('Item'+itemIndex);
var elem = this.FindChildElement(item.parentNode.parentNode.id);
if (elem) elem.style.display = 'block';
}
else if (this.lastKey==37) // Left
{
var item = document.getElementById('Item'+itemIndex);
var elem = this.FindChildElement(item.parentNode.parentNode.id);
if (elem) elem.style.display = 'none';
}
else if (this.lastKey==27) // Escape
{
parent.searchBox.CloseResultsWindow();
parent.document.getElementById("MSearchField").focus();
}
else if (this.lastKey==13) // Enter
{
return true;
}
return false;
}
this.NavChild = function(evt,itemIndex,childIndex)
{
var e = (evt) ? evt : window.event; // for IE
if (e.keyCode==13) return true;
if (!this.ProcessKeys(e)) return false;
if (this.lastKey==38) // Up
{
if (childIndex>0)
{
var newIndex = childIndex-1;
document.getElementById('Item'+itemIndex+'_c'+newIndex).focus();
}
else // already at first child, jump to parent
{
document.getElementById('Item'+itemIndex).focus();
}
}
else if (this.lastKey==40) // Down
{
var newIndex = childIndex+1;
var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex);
if (!elem) // last child, jump to parent next parent
{
elem = this.NavNext(itemIndex+1);
}
if (elem)
{
elem.focus();
}
}
else if (this.lastKey==27) // Escape
{
parent.searchBox.CloseResultsWindow();
parent.document.getElementById("MSearchField").focus();
}
else if (this.lastKey==13) // Enter
{
return true;
}
return false;
}
}
function setKeyActions(elem,action)
{
elem.setAttribute('onkeydown',action);
elem.setAttribute('onkeypress',action);
elem.setAttribute('onkeyup',action);
}
function setClassAttr(elem,attr)
{
elem.setAttribute('class',attr);
elem.setAttribute('className',attr);
}
function createResults()
{
var results = document.getElementById("SRResults");
for (var e=0; e<searchData.length; e++)
{
var id = searchData[e][0];
var srResult = document.createElement('div');
srResult.setAttribute('id','SR_'+id);
setClassAttr(srResult,'SRResult');
var srEntry = document.createElement('div');
setClassAttr(srEntry,'SREntry');
var srLink = document.createElement('a');
srLink.setAttribute('id','Item'+e);
setKeyActions(srLink,'return searchResults.Nav(event,'+e+')');
setClassAttr(srLink,'SRSymbol');
srLink.innerHTML = searchData[e][1][0];
srEntry.appendChild(srLink);
if (searchData[e][1].length==2) // single result
{
srLink.setAttribute('href',searchData[e][1][1][0]);
if (searchData[e][1][1][1])
{
srLink.setAttribute('target','_parent');
}
var srScope = document.createElement('span');
setClassAttr(srScope,'SRScope');
srScope.innerHTML = searchData[e][1][1][2];
srEntry.appendChild(srScope);
}
else // multiple results
{
srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")');
var srChildren = document.createElement('div');
setClassAttr(srChildren,'SRChildren');
for (var c=0; c<searchData[e][1].length-1; c++)
{
var srChild = document.createElement('a');
srChild.setAttribute('id','Item'+e+'_c'+c);
setKeyActions(srChild,'return searchResults.NavChild(event,'+e+','+c+')');
setClassAttr(srChild,'SRScope');
srChild.setAttribute('href',searchData[e][1][c+1][0]);
if (searchData[e][1][c+1][1])
{
srChild.setAttribute('target','_parent');
}
srChild.innerHTML = searchData[e][1][c+1][2];
srChildren.appendChild(srChild);
}
srEntry.appendChild(srChildren);
}
srResult.appendChild(srEntry);
results.appendChild(srResult);
}
}
function init_search()
{
var results = document.getElementById("MSearchSelectWindow");
for (var key in indexSectionLabels)
{
var link = document.createElement('a');
link.setAttribute('class','SelectItem');
link.setAttribute('onclick','searchBox.OnSelectItem('+key+')');
link.href='javascript:void(0)';
link.innerHTML='<span class="SelectionMark">&#160;</span>'+indexSectionLabels[key];
results.appendChild(link);
}
searchBox.OnSelectItem(0);
}
/* @license-end */
var indexSectionsWithContent =
{
0: "bceghiklmorstvw",
1: "m",
2: "mw",
3: "bcegklmost",
4: "chikmrstvw",
5: "w"
};
var indexSectionNames =
{
0: "all",
1: "classes",
2: "files",
3: "functions",
4: "variables",
5: "pages"
};
var indexSectionLabels =
{
0: "All",
1: "Classes",
2: "Files",
3: "Functions",
4: "Variables",
5: "Pages"
};
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="variables_0.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
createResults();
/* @license-end */
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
--></script>
</div>
</body>
</html>
var searchData=
[
['camera_67',['camera',['../Wireless-X__server_8py.html#a13f596ef10f1688c79547c0bc99ea75f',1,'Wireless-X_server']]],
['camerasocket_68',['cameraSocket',['../Wireless-X__server_8py.html#a45dcde7bcdcb4693f7800b933f376ee0',1,'Wireless-X_server']]],
['curr_5fx_69',['curr_x',['../Wireless-X__server_8py.html#aaebd0084b5c865b4d6ee83691622e178',1,'Wireless-X_server']]],
['curr_5fy_70',['curr_y',['../Wireless-X__server_8py.html#a764bc7fd7cda5a9c302abbd1c0b9ce9d',1,'Wireless-X_server']]]
];
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="variables_1.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
createResults();
/* @license-end */
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
--></script>
</div>
</body>
</html>
var searchData=
[
['height_71',['height',['../Wireless-X__server_8py.html#a5fbc4cec3d85ed72e2b15df06cc732fc',1,'Wireless-X_server']]]
];
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="variables_2.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
createResults();
/* @license-end */
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
--></script>
</div>
</body>
</html>
var searchData=
[
['img_5fheight_72',['img_height',['../Wireless-X__server_8py.html#a8eebf5dc6b9c928115225a1e3588c3c5',1,'Wireless-X_server']]],
['img_5fwidth_73',['img_width',['../Wireless-X__server_8py.html#afa870e05abcd643a6414cb70bbe57cc6',1,'Wireless-X_server']]]
];
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="variables_3.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
createResults();
/* @license-end */
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
--></script>
</div>
</body>
</html>
var searchData=
[
['keyboard_74',['keyboard',['../Wireless-X__server_8py.html#a58e2d0036cb3910e655408e179feec10',1,'Wireless-X_server']]]
];
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="variables_4.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
createResults();
/* @license-end */
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
--></script>
</div>
</body>
</html>
var searchData=
[
['mouse_75',['mouse',['../Wireless-X__server_8py.html#a5b66540b63fab3022f0c750bac663345',1,'Wireless-X_server']]],
['mouse_5fspeed_76',['mouse_speed',['../Wireless-X__server_8py.html#a3b73746def437cc51ef5946752dd09ad',1,'Wireless-X_server']]]
];
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="variables_5.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
createResults();
/* @license-end */
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
--></script>
</div>
</body>
</html>
var searchData=
[
['remote_5fx_77',['remote_x',['../Wireless-X__server_8py.html#a1450e29f8b058a690ac172cb516bd558',1,'Wireless-X_server']]],
['remote_5fy_78',['remote_y',['../Wireless-X__server_8py.html#adeae735ccc3dbb8abd29b300dbc830eb',1,'Wireless-X_server']]]
];
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="variables_6.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
createResults();
/* @license-end */
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
--></script>
</div>
</body>
</html>
var searchData=
[
['s_79',['s',['../Wireless-X__server_8py.html#a91f42afd61bbcbd6f88f4f9d0ac3cb45',1,'Wireless-X_server']]],
['screenshot_5fcount_80',['screenshot_count',['../Wireless-X__server_8py.html#a84a42e06c60f25a66338c51f4fcf5f99',1,'Wireless-X_server']]],
['special_5fkey_5fandroid_5fdictionary_81',['special_key_android_dictionary',['../Wireless-X__server_8py.html#a2bfd6439764b53b8df612bbc0335a07c',1,'Wireless-X_server']]]
];
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="variables_7.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
createResults();
/* @license-end */
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
--></script>
</div>
</body>
</html>
var searchData=
[
['thread_5frun_82',['thread_run',['../Wireless-X__server_8py.html#a33b4715674007489c6b6756bc8ef4b70',1,'Wireless-X_server']]]
];
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="variables_8.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
createResults();
/* @license-end */
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
--></script>
</div>
</body>
</html>
var searchData=
[
['virtualcamera_83',['virtualCamera',['../Wireless-X__server_8py.html#ab168597dce547df306f8cef48714f256',1,'Wireless-X_server']]]
];
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="variables_9.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
createResults();
/* @license-end */
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
--></script>
</div>
</body>
</html>
var searchData=
[
['width_84',['width',['../Wireless-X__server_8py.html#af68defefb623d24f4e1976c3a061bf98',1,'Wireless-X_server']]]
];
.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0 1px 1px rgba(255,255,255,0.9);color:#283a5d;outline:0}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace!important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283a5d transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;-moz-border-radius:0!important;-webkit-border-radius:0;border-radius:0!important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a:hover span.sub-arrow{border-color:white transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;-moz-border-radius:5px!important;-webkit-border-radius:5px;border-radius:5px!important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0!important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent white}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px!important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}}
\ No newline at end of file
\hypertarget{MainActivity_8java}{}\doxysection{Main\+Activity.\+java File Reference}
\label{MainActivity_8java}\index{MainActivity.java@{MainActivity.java}}
This is where the main code of the Wireless-\/X android application is written.
\doxysubsection*{Classes}
\begin{DoxyCompactItemize}
\item
class \mbox{\hyperlink{classcom_1_1example_1_1wireless__x_1_1MainActivity}{com.\+example.\+wireless\+\_\+x.\+Main\+Activity}}
\begin{DoxyCompactList}\small\item\em This is where the main code of the Wireless-\/X android application is written. \end{DoxyCompactList}\item
class {\bfseries com.\+example.\+wireless\+\_\+x.\+Main\+Activity.\+Test\+IP\+\_\+\+Thread}
\begin{DoxyCompactList}\small\item\em Tests whether the server\textquotesingle{}s IP address is valid or not. \end{DoxyCompactList}\item
class {\bfseries com.\+example.\+wireless\+\_\+x.\+Main\+Activity.\+Send\+Mouse\+Coordinates\+Thread}
\begin{DoxyCompactList}\small\item\em Sends the mouse coordinates to the server. \end{DoxyCompactList}\item
class {\bfseries com.\+example.\+wireless\+\_\+x.\+Main\+Activity.\+Send\+Mouse\+Clicks}
\begin{DoxyCompactList}\small\item\em Used to send the mouse click events to the server. \end{DoxyCompactList}\item
class {\bfseries com.\+example.\+wireless\+\_\+x.\+Main\+Activity.\+Send\+Keyboard\+Presses\+Thread}
\begin{DoxyCompactList}\small\item\em Used to send the keyboard events to the server. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsection{Detailed Description}
This is where the main code of the Wireless-\/X android application is written.
LATEX_CMD=pdflatex
all: refman.pdf
pdf: refman.pdf
refman.pdf: clean refman.tex
$(LATEX_CMD) refman
makeindex refman.idx
$(LATEX_CMD) refman
latex_count=8 ; \
while egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log && [ $$latex_count -gt 0 ] ;\
do \
echo "Rerunning latex...." ;\
$(LATEX_CMD) refman ;\
latex_count=`expr $$latex_count - 1` ;\
done
makeindex refman.idx
$(LATEX_CMD) refman
clean:
rm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out *.brf *.blg *.bbl refman.pdf
\hypertarget{Wireless-X__server_8py}{}\doxysection{Wireless-\/\+X\+\_\+server.py File Reference}
\label{Wireless-X__server_8py}\index{Wireless-\/X\_server.py@{Wireless-\/X\_server.py}}
This includes the code for the server-\/side of Wireless-\/X.
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
\item
def \mbox{\hyperlink{Wireless-X__server_8py_a89ff6223b623131684a93295f32bc976}{Wireless-\/\+X\+\_\+server.\+bind\+\_\+sockets}} ()
\begin{DoxyCompactList}\small\item\em This function establishes two sockets for receiving camera frames as well as mouse and keyboard actions. \end{DoxyCompactList}\item
def \mbox{\hyperlink{Wireless-X__server_8py_a6db0464af01126b82f9ff27839b4d236}{Wireless-\/\+X\+\_\+server.\+mouse\+\_\+keyboard\+\_\+connections}} ()
\begin{DoxyCompactList}\small\item\em This function decodes the received mouse and keyboard actions and acts accordingly. \end{DoxyCompactList}\item
def \mbox{\hyperlink{Wireless-X__server_8py_aa577d8e17a9ed9e9765dfad47310f8e4}{Wireless-\/\+X\+\_\+server.\+camera\+\_\+stream\+\_\+connections}} ()
\begin{DoxyCompactList}\small\item\em This function is responsible for handling the camera frames. \end{DoxyCompactList}\item
def \mbox{\hyperlink{Wireless-X__server_8py_a79901b301ca92aaf0cf102d9eb534a91}{Wireless-\/\+X\+\_\+server.\+listening\+\_\+connections}} ()
\begin{DoxyCompactList}\small\item\em This function is responsible for listening to connections. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsection*{Variables}
\begin{DoxyCompactItemize}
\item
\mbox{\Hypertarget{Wireless-X__server_8py_ab168597dce547df306f8cef48714f256}\label{Wireless-X__server_8py_ab168597dce547df306f8cef48714f256}}
\mbox{\hyperlink{Wireless-X__server_8py_ab168597dce547df306f8cef48714f256}{Wireless-\/\+X\+\_\+server.\+virtual\+Camera}} = subprocess.\+run(\mbox{[}\char`\"{}sudo\char`\"{}, \char`\"{}modprobe\char`\"{}, \char`\"{}v4l2loopback\char`\"{}, \char`\"{}devices=1\char`\"{}, \char`\"{}video\+\_\+nr=20\char`\"{}, \char`\"{}card\+\_\+label=\textquotesingle{}Wireless-\/X Camera\textquotesingle{}\char`\"{}, \char`\"{}exclusive\+\_\+caps=1\char`\"{}\mbox{]})
\begin{DoxyCompactList}\small\item\em Creates a virtual camera on the laptop/\+PC. \end{DoxyCompactList}\item
\mbox{\Hypertarget{Wireless-X__server_8py_af68defefb623d24f4e1976c3a061bf98}\label{Wireless-X__server_8py_af68defefb623d24f4e1976c3a061bf98}}
\mbox{\hyperlink{Wireless-X__server_8py_af68defefb623d24f4e1976c3a061bf98}{Wireless-\/\+X\+\_\+server.\+width}}
\begin{DoxyCompactList}\small\item\em Stores the width of the screen. \end{DoxyCompactList}\item
\mbox{\Hypertarget{Wireless-X__server_8py_a5fbc4cec3d85ed72e2b15df06cc732fc}\label{Wireless-X__server_8py_a5fbc4cec3d85ed72e2b15df06cc732fc}}
\mbox{\hyperlink{Wireless-X__server_8py_a5fbc4cec3d85ed72e2b15df06cc732fc}{Wireless-\/\+X\+\_\+server.\+height}}
\begin{DoxyCompactList}\small\item\em Stores the height of the screen. \end{DoxyCompactList}\item
\mbox{\Hypertarget{Wireless-X__server_8py_aaebd0084b5c865b4d6ee83691622e178}\label{Wireless-X__server_8py_aaebd0084b5c865b4d6ee83691622e178}}
\mbox{\hyperlink{Wireless-X__server_8py_aaebd0084b5c865b4d6ee83691622e178}{Wireless-\/\+X\+\_\+server.\+curr\+\_\+x}}
\begin{DoxyCompactList}\small\item\em Stores the x-\/coordinate of the current mouse location. \end{DoxyCompactList}\item
\mbox{\Hypertarget{Wireless-X__server_8py_a764bc7fd7cda5a9c302abbd1c0b9ce9d}\label{Wireless-X__server_8py_a764bc7fd7cda5a9c302abbd1c0b9ce9d}}
\mbox{\hyperlink{Wireless-X__server_8py_a764bc7fd7cda5a9c302abbd1c0b9ce9d}{Wireless-\/\+X\+\_\+server.\+curr\+\_\+y}}
\begin{DoxyCompactList}\small\item\em Stores the y-\/coordinate of the current mouse location. \end{DoxyCompactList}\item
\mbox{\Hypertarget{Wireless-X__server_8py_a1450e29f8b058a690ac172cb516bd558}\label{Wireless-X__server_8py_a1450e29f8b058a690ac172cb516bd558}}
def \mbox{\hyperlink{Wireless-X__server_8py_a1450e29f8b058a690ac172cb516bd558}{Wireless-\/\+X\+\_\+server.\+remote\+\_\+x}} = curr\+\_\+x/2
\begin{DoxyCompactList}\small\item\em Stores the mid of x-\/coordinate of current mouse location. \end{DoxyCompactList}\item
\mbox{\Hypertarget{Wireless-X__server_8py_adeae735ccc3dbb8abd29b300dbc830eb}\label{Wireless-X__server_8py_adeae735ccc3dbb8abd29b300dbc830eb}}
def \mbox{\hyperlink{Wireless-X__server_8py_adeae735ccc3dbb8abd29b300dbc830eb}{Wireless-\/\+X\+\_\+server.\+remote\+\_\+y}} = curr\+\_\+y/2
\begin{DoxyCompactList}\small\item\em Stores the mid of y-\/coordinate of current mouse location. \end{DoxyCompactList}\item
\mbox{\Hypertarget{Wireless-X__server_8py_a91f42afd61bbcbd6f88f4f9d0ac3cb45}\label{Wireless-X__server_8py_a91f42afd61bbcbd6f88f4f9d0ac3cb45}}
string \mbox{\hyperlink{Wireless-X__server_8py_a91f42afd61bbcbd6f88f4f9d0ac3cb45}{Wireless-\/\+X\+\_\+server.\+s}} = \textquotesingle{}\textquotesingle{}
\begin{DoxyCompactList}\small\item\em Socket used for receiving keyboard and mouse related actions. \end{DoxyCompactList}\item
\mbox{\Hypertarget{Wireless-X__server_8py_a45dcde7bcdcb4693f7800b933f376ee0}\label{Wireless-X__server_8py_a45dcde7bcdcb4693f7800b933f376ee0}}
string \mbox{\hyperlink{Wireless-X__server_8py_a45dcde7bcdcb4693f7800b933f376ee0}{Wireless-\/\+X\+\_\+server.\+camera\+Socket}} = \textquotesingle{}\textquotesingle{}
\begin{DoxyCompactList}\small\item\em Socket used for receiving the camera frames of user\textquotesingle{}s smartphone. \end{DoxyCompactList}\item
\mbox{\Hypertarget{Wireless-X__server_8py_afa870e05abcd643a6414cb70bbe57cc6}\label{Wireless-X__server_8py_afa870e05abcd643a6414cb70bbe57cc6}}
int \mbox{\hyperlink{Wireless-X__server_8py_afa870e05abcd643a6414cb70bbe57cc6}{Wireless-\/\+X\+\_\+server.\+img\+\_\+width}} = 720
\begin{DoxyCompactList}\small\item\em Width of the camera frame. \end{DoxyCompactList}\item
\mbox{\Hypertarget{Wireless-X__server_8py_a8eebf5dc6b9c928115225a1e3588c3c5}\label{Wireless-X__server_8py_a8eebf5dc6b9c928115225a1e3588c3c5}}
int \mbox{\hyperlink{Wireless-X__server_8py_a8eebf5dc6b9c928115225a1e3588c3c5}{Wireless-\/\+X\+\_\+server.\+img\+\_\+height}} = 480
\begin{DoxyCompactList}\small\item\em Height of the camera frame. \end{DoxyCompactList}\item
\mbox{\Hypertarget{Wireless-X__server_8py_a13f596ef10f1688c79547c0bc99ea75f}\label{Wireless-X__server_8py_a13f596ef10f1688c79547c0bc99ea75f}}
\mbox{\hyperlink{Wireless-X__server_8py_a13f596ef10f1688c79547c0bc99ea75f}{Wireless-\/\+X\+\_\+server.\+camera}} = pyfakewebcam.\+Fake\+Webcam(\textquotesingle{}/dev/video20\textquotesingle{}, img\+\_\+width, img\+\_\+height)
\begin{DoxyCompactList}\small\item\em Virtual webcam device. \end{DoxyCompactList}\item
\mbox{\Hypertarget{Wireless-X__server_8py_a33b4715674007489c6b6756bc8ef4b70}\label{Wireless-X__server_8py_a33b4715674007489c6b6756bc8ef4b70}}
bool \mbox{\hyperlink{Wireless-X__server_8py_a33b4715674007489c6b6756bc8ef4b70}{Wireless-\/\+X\+\_\+server.\+thread\+\_\+run}} = True
\begin{DoxyCompactList}\small\item\em The camera and keyboard-\/mouse sockets receive user requests until this variable is set to \textquotesingle{}True\textquotesingle{}. \end{DoxyCompactList}\item
\mbox{\Hypertarget{Wireless-X__server_8py_a58e2d0036cb3910e655408e179feec10}\label{Wireless-X__server_8py_a58e2d0036cb3910e655408e179feec10}}
\mbox{\hyperlink{Wireless-X__server_8py_a58e2d0036cb3910e655408e179feec10}{Wireless-\/\+X\+\_\+server.\+keyboard}} = Keyboard\+Controller()
\begin{DoxyCompactList}\small\item\em Initializing the Keyboard\+Controller object. \end{DoxyCompactList}\item
\mbox{\Hypertarget{Wireless-X__server_8py_a5b66540b63fab3022f0c750bac663345}\label{Wireless-X__server_8py_a5b66540b63fab3022f0c750bac663345}}
\mbox{\hyperlink{Wireless-X__server_8py_a5b66540b63fab3022f0c750bac663345}{Wireless-\/\+X\+\_\+server.\+mouse}} = Mouse\+Controller()
\begin{DoxyCompactList}\small\item\em Initializing the Mouse\+Controller object. \end{DoxyCompactList}\item
\mbox{\Hypertarget{Wireless-X__server_8py_a3b73746def437cc51ef5946752dd09ad}\label{Wireless-X__server_8py_a3b73746def437cc51ef5946752dd09ad}}
int \mbox{\hyperlink{Wireless-X__server_8py_a3b73746def437cc51ef5946752dd09ad}{Wireless-\/\+X\+\_\+server.\+mouse\+\_\+speed}} = 2
\begin{DoxyCompactList}\small\item\em Speed of mouse movement. \end{DoxyCompactList}\item
\mbox{\Hypertarget{Wireless-X__server_8py_a84a42e06c60f25a66338c51f4fcf5f99}\label{Wireless-X__server_8py_a84a42e06c60f25a66338c51f4fcf5f99}}
int \mbox{\hyperlink{Wireless-X__server_8py_a84a42e06c60f25a66338c51f4fcf5f99}{Wireless-\/\+X\+\_\+server.\+screenshot\+\_\+count}} = 0
\begin{DoxyCompactList}\small\item\em Screenshot counter to keep track of screenshots. \end{DoxyCompactList}\item
\mbox{\Hypertarget{Wireless-X__server_8py_a2bfd6439764b53b8df612bbc0335a07c}\label{Wireless-X__server_8py_a2bfd6439764b53b8df612bbc0335a07c}}
dictionary \mbox{\hyperlink{Wireless-X__server_8py_a2bfd6439764b53b8df612bbc0335a07c}{Wireless-\/\+X\+\_\+server.\+special\+\_\+key\+\_\+android\+\_\+dictionary}} = \{\char`\"{}F1\char`\"{}\+: \char`\"{}F1\char`\"{}, \char`\"{}F2\char`\"{}\+:\char`\"{}F2\char`\"{}, \char`\"{}F3\char`\"{}\+:\char`\"{}F3\char`\"{}, \char`\"{}F4\char`\"{}\+:\char`\"{}F4\char`\"{}, \char`\"{}F5\char`\"{}\+:\char`\"{}F5\char`\"{}, \char`\"{}F6\char`\"{}\+:\char`\"{}F6\char`\"{}, \char`\"{}F7\char`\"{}\+:\char`\"{}F7\char`\"{}, \char`\"{}F8\char`\"{}\+:\char`\"{}F8\char`\"{}, \char`\"{}F9\char`\"{}\+:\char`\"{}F9\char`\"{}, \char`\"{}F10\char`\"{}\+:\char`\"{}F10\char`\"{}, \char`\"{}F11\char`\"{}\+:\char`\"{}F11\char`\"{}, \char`\"{}F12\char`\"{}\+:\char`\"{}F12\char`\"{}, \char`\"{}Alt\char`\"{}\+:\char`\"{}ALT\char`\"{}, \char`\"{}Backspace\char`\"{}\+:\char`\"{}BACKSPACE\char`\"{}, \char`\"{}Caps\textbackslash{}n\+Lock\char`\"{}\+:\char`\"{}CAPS\+\_\+\+LOCK\char`\"{}, \char`\"{}Ctrl\char`\"{}\+:\char`\"{}CONTROL\char`\"{}, \char`\"{}Delete\char`\"{}\+:\char`\"{}DELETE\char`\"{}, \char`\"{}\char`\"{}\+:\char`\"{}DOWN\+\_\+\+ARROW\char`\"{}, \char`\"{}End\char`\"{}\+:\char`\"{}END\char`\"{}, \char`\"{}Esc\char`\"{}\+:\char`\"{}ESCAPE\char`\"{}, \char`\"{}Home\char`\"{}\+:\char`\"{}HOME\char`\"{}, \char`\"{}\char`\"{}\+:\char`\"{}LEFT\+\_\+\+ARROW\char`\"{}, \char`\"{}META\char`\"{}\+:\char`\"{}META\char`\"{}, \char`\"{}Page Down\char`\"{}\+:\char`\"{}PAGE\+\_\+\+DOWN\char`\"{}, \char`\"{}Page Up\char`\"{}\+:\char`\"{}PAGE\+\_\+\+UP\char`\"{}, \char`\"{}Enter\char`\"{}\+:\char`\"{}RETURN\char`\"{}, \char`\"{}\char`\"{}\+:\char`\"{}RIGHT\+\_\+\+ARROW\char`\"{}, \char`\"{}Shift\char`\"{}\+:\char`\"{}SHIFT\char`\"{}, \char`\"{}Space\char`\"{}\+:\char`\"{}SPACE\char`\"{}, \char`\"{}\char`\"{}\+:\char`\"{}UP\+\_\+\+ARROW\char`\"{}, \char`\"{}Tab\char`\"{}\+:\char`\"{}Tab\char`\"{}\}
\begin{DoxyCompactList}\small\item\em Maps the keys in keyboard layout to the actual keyboard keys. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsection{Detailed Description}
This includes the code for the server-\/side of Wireless-\/X.
The server running on laptop or PC is responsible for receiving the actions performed by user on the Wireless-\/X android app as well as receiving the camera frames of the user\textquotesingle{}s smartphone (if the user has turned) on the camera). Such actions are transmitted to the server in encoded form, the server decodes the received message and instructs the laptop or PC to perform the action described in that message.
\doxysubsection{Function Documentation}
\mbox{\Hypertarget{Wireless-X__server_8py_a89ff6223b623131684a93295f32bc976}\label{Wireless-X__server_8py_a89ff6223b623131684a93295f32bc976}}
\index{Wireless-\/X\_server.py@{Wireless-\/X\_server.py}!bind\_sockets@{bind\_sockets}}
\index{bind\_sockets@{bind\_sockets}!Wireless-\/X\_server.py@{Wireless-\/X\_server.py}}
\doxysubsubsection{\texorpdfstring{bind\_sockets()}{bind\_sockets()}}
{\footnotesize\ttfamily def Wireless-\/X\+\_\+server.\+bind\+\_\+sockets (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
This function establishes two sockets for receiving camera frames as well as mouse and keyboard actions.
\begin{DoxyVerb}This function creates a camera socket which is responsible for receiving the camera frames, and it also
creates another socket which is responsible for receiving the keyboard and mouse frames.\end{DoxyVerb}
\mbox{\Hypertarget{Wireless-X__server_8py_aa577d8e17a9ed9e9765dfad47310f8e4}\label{Wireless-X__server_8py_aa577d8e17a9ed9e9765dfad47310f8e4}}
\index{Wireless-\/X\_server.py@{Wireless-\/X\_server.py}!camera\_stream\_connections@{camera\_stream\_connections}}
\index{camera\_stream\_connections@{camera\_stream\_connections}!Wireless-\/X\_server.py@{Wireless-\/X\_server.py}}
\doxysubsubsection{\texorpdfstring{camera\_stream\_connections()}{camera\_stream\_connections()}}
{\footnotesize\ttfamily def Wireless-\/X\+\_\+server.\+camera\+\_\+stream\+\_\+connections (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
This function is responsible for handling the camera frames.
\begin{DoxyVerb}This function uses the 'OpenCV' library to decode and resize the camera frame. Then, this frame is scheduled on
the virtual webcam device created using 'pyfakewebcam' library.\end{DoxyVerb}
\mbox{\Hypertarget{Wireless-X__server_8py_a79901b301ca92aaf0cf102d9eb534a91}\label{Wireless-X__server_8py_a79901b301ca92aaf0cf102d9eb534a91}}
\index{Wireless-\/X\_server.py@{Wireless-\/X\_server.py}!listening\_connections@{listening\_connections}}
\index{listening\_connections@{listening\_connections}!Wireless-\/X\_server.py@{Wireless-\/X\_server.py}}
\doxysubsubsection{\texorpdfstring{listening\_connections()}{listening\_connections()}}
{\footnotesize\ttfamily def Wireless-\/X\+\_\+server.\+listening\+\_\+connections (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
This function is responsible for listening to connections.
\begin{DoxyVerb}This function creates two threads corresponding to the two sockets, one for handling mouse and keyboard events
and the other for handling camera frames received from the user's smartphone.\end{DoxyVerb}
\mbox{\Hypertarget{Wireless-X__server_8py_a6db0464af01126b82f9ff27839b4d236}\label{Wireless-X__server_8py_a6db0464af01126b82f9ff27839b4d236}}
\index{Wireless-\/X\_server.py@{Wireless-\/X\_server.py}!mouse\_keyboard\_connections@{mouse\_keyboard\_connections}}
\index{mouse\_keyboard\_connections@{mouse\_keyboard\_connections}!Wireless-\/X\_server.py@{Wireless-\/X\_server.py}}
\doxysubsubsection{\texorpdfstring{mouse\_keyboard\_connections()}{mouse\_keyboard\_connections()}}
{\footnotesize\ttfamily def Wireless-\/X\+\_\+server.\+mouse\+\_\+keyboard\+\_\+connections (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
This function decodes the received mouse and keyboard actions and acts accordingly.
\begin{DoxyVerb}This function checks if the message received corresponds to a mouse action (left-click, scroll, etc.) or a keyboard action
(such as keypress). It then instructs the laptop to perform these actions, using the 'autopy' and 'pynput' libraries. Some special
characters in keyboard are not supported by 'autopy' library, so the actions corresponding to these special characters are performed
by the 'pynput' library, other key actions are handled by the 'autopy' library. In case of mouse, the 'autopy' library was not that
efficient, so we used the 'pynput' library.\end{DoxyVerb}
\ No newline at end of file
\doxysection{Class List}
Here are the classes, structs, unions and interfaces with brief descriptions\+:\begin{DoxyCompactList}
\item\contentsline{section}{\mbox{\hyperlink{classcom_1_1example_1_1wireless__x_1_1MainActivity}{com.\+example.\+wireless\+\_\+x.\+Main\+Activity}} \\*This is where the main code of the Wireless-\/X android application is written }{\pageref{classcom_1_1example_1_1wireless__x_1_1MainActivity}}{}
\end{DoxyCompactList}
%!PS-Adobe-2.0 EPSF-2.0
%%Title: ClassName
%%Creator: Doxygen
%%CreationDate: Time
%%For:
%Magnification: 1.00
%%Orientation: Portrait
%%BoundingBox: 0 0 500 86.956520
%%Pages: 0
%%BeginSetup
%%EndSetup
%%EndComments
% ----- variables -----
/boxwidth 0 def
/boxheight 40 def
/fontheight 24 def
/marginwidth 10 def
/distx 20 def
/disty 40 def
/boundaspect 5.750000 def % aspect ratio of the BoundingBox (width/height)
/boundx 500 def
/boundy boundx boundaspect div def
/xspacing 0 def
/yspacing 0 def
/rows 2 def
/cols 2 def
/scalefactor 0 def
/boxfont /Times-Roman findfont fontheight scalefont def
% ----- procedures -----
/dotted { [1 4] 0 setdash } def
/dashed { [5] 0 setdash } def
/solid { [] 0 setdash } def
/max % result = MAX(arg1,arg2)
{
/a exch def
/b exch def
a b gt {a} {b} ifelse
} def
/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2)
{
0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max
} def
/cw % boxwidth = MAX(boxwidth, stringwidth(arg1))
{
/str exch def
/boxwidth boxwidth str stringwidth pop max def
} def
/box % draws a box with text 'arg1' at grid pos (arg2,arg3)
{ gsave
2 setlinewidth
newpath
exch xspacing mul xoffset add
exch yspacing mul
moveto
boxwidth 0 rlineto
0 boxheight rlineto
boxwidth neg 0 rlineto
0 boxheight neg rlineto
closepath
dup stringwidth pop neg boxwidth add 2 div
boxheight fontheight 2 div sub 2 div
rmoveto show stroke
grestore
} def
/mark
{ newpath
exch xspacing mul xoffset add boxwidth add
exch yspacing mul
moveto
0 boxheight 4 div rlineto
boxheight neg 4 div boxheight neg 4 div rlineto
closepath
eofill
stroke
} def
/arrow
{ newpath
moveto
3 -8 rlineto
-6 0 rlineto
3 8 rlineto
closepath
eofill
stroke
} def
/out % draws an output connector for the block at (arg1,arg2)
{
newpath
exch xspacing mul xoffset add boxwidth 2 div add
exch yspacing mul boxheight add
/y exch def
/x exch def
x y moveto
0 disty 2 div rlineto
stroke
1 eq { x y disty 2 div add arrow } if
} def
/in % draws an input connector for the block at (arg1,arg2)
{
newpath
exch xspacing mul xoffset add boxwidth 2 div add
exch yspacing mul disty 2 div sub
/y exch def
/x exch def
x y moveto
0 disty 2 div rlineto
stroke
1 eq { x y disty 2 div add arrow } if
} def
/hedge
{
exch xspacing mul xoffset add boxwidth 2 div add
exch yspacing mul boxheight 2 div sub
/y exch def
/x exch def
newpath
x y moveto
boxwidth 2 div distx add 0 rlineto
stroke
1 eq
{ newpath x boxwidth 2 div distx add add y moveto
-8 3 rlineto
0 -6 rlineto
8 3 rlineto
closepath
eofill
stroke
} if
} def
/vedge
{
/ye exch def
/ys exch def
/xs exch def
newpath
xs xspacing mul xoffset add boxwidth 2 div add dup
ys yspacing mul boxheight 2 div sub
moveto
ye yspacing mul boxheight 2 div sub
lineto
stroke
} def
/conn % connections the blocks from col 'arg1' to 'arg2' of row 'arg3'
{
/ys exch def
/xe exch def
/xs exch def
newpath
xs xspacing mul xoffset add boxwidth 2 div add
ys yspacing mul disty 2 div sub
moveto
xspacing xe xs sub mul 0
rlineto
stroke
} def
% ----- main ------
boxfont setfont
1 boundaspect scale
(com.example.wireless_x.MainActivity) cw
(AppCompatActivity) cw
(CvCameraViewListener2) cw
/boxwidth boxwidth marginwidth 2 mul add def
/xspacing boxwidth distx add def
/yspacing boxheight disty add def
/scalefactor
boxwidth cols mul distx cols 1 sub mul add
boxheight rows mul disty rows 1 sub mul add boundaspect mul
max def
boundx scalefactor div boundy scalefactor div scale
% ----- classes -----
(com.example.wireless_x.MainActivity) 0.500000 0.000000 box
(AppCompatActivity) 0.000000 1.000000 box
(CvCameraViewListener2) 1.000000 1.000000 box
% ----- relations -----
solid
0 0.500000 0.000000 out
solid
0.000000 1.000000 1.000000 conn
solid
1 0.000000 1.000000 in
solid
1 1.000000 1.000000 in
\hypertarget{classcom_1_1example_1_1wireless__x_1_1MainActivity}{}\doxysection{com.\+example.\+wireless\+\_\+x.\+Main\+Activity Class Reference}
\label{classcom_1_1example_1_1wireless__x_1_1MainActivity}\index{com.example.wireless\_x.MainActivity@{com.example.wireless\_x.MainActivity}}
This is where the main code of the Wireless-\/X android application is written.
Inheritance diagram for com.\+example.\+wireless\+\_\+x.\+Main\+Activity\+:\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[height=2.000000cm]{classcom_1_1example_1_1wireless__x_1_1MainActivity}
\end{center}
\end{figure}
\doxysubsection*{Classes}
\begin{DoxyCompactItemize}
\item
class {\bfseries Send\+Keyboard\+Presses\+Thread}
\begin{DoxyCompactList}\small\item\em Used to send the keyboard events to the server. \end{DoxyCompactList}\item
class {\bfseries Send\+Mouse\+Clicks}
\begin{DoxyCompactList}\small\item\em Used to send the mouse click events to the server. \end{DoxyCompactList}\item
class {\bfseries Send\+Mouse\+Coordinates\+Thread}
\begin{DoxyCompactList}\small\item\em Sends the mouse coordinates to the server. \end{DoxyCompactList}\item
class {\bfseries Test\+IP\+\_\+\+Thread}
\begin{DoxyCompactList}\small\item\em Tests whether the server\textquotesingle{}s IP address is valid or not. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsection*{Public Member Functions}
\begin{DoxyCompactItemize}
\item
void \mbox{\hyperlink{classcom_1_1example_1_1wireless__x_1_1MainActivity_a13c68af3d44accfe973b3dc661daf9e4}{shift\+Press}} (View view)
\begin{DoxyCompactList}\small\item\em Displays the keys which correspond to special characters. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classcom_1_1example_1_1wireless__x_1_1MainActivity_aad7a718ec54b19184dc7e301fde42f0e}{test\+\_\+\+IP}} (View view)
\begin{DoxyCompactList}\small\item\em Describes the action to be performed when Test IP is clicked on the app. \end{DoxyCompactList}\item
\mbox{\Hypertarget{classcom_1_1example_1_1wireless__x_1_1MainActivity_a9850053fcd3feb95047e9e7cd09a1bc6}\label{classcom_1_1example_1_1wireless__x_1_1MainActivity_a9850053fcd3feb95047e9e7cd09a1bc6}}
String \mbox{\hyperlink{classcom_1_1example_1_1wireless__x_1_1MainActivity_a9850053fcd3feb95047e9e7cd09a1bc6}{get\+Emoji\+By\+Unicode}} (int unicode)
\begin{DoxyCompactList}\small\item\em Returns the emoji corresponding to an unicode. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classcom_1_1example_1_1wireless__x_1_1MainActivity_a4d629b747ed093762bec62919da98983}{enter\+\_\+wireless\+\_\+x}} (View view)
\begin{DoxyCompactList}\small\item\em Performs the action when the \char`\"{}\+Enter Wireless-\/\+X\char`\"{} button is clicked. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classcom_1_1example_1_1wireless__x_1_1MainActivity_af4be89ec8bce3fa9bddb1c0151c3e592}{on\+Back\+Pressed}} ()
\begin{DoxyCompactList}\small\item\em Performs the action when the back button is pressed. \end{DoxyCompactList}\item
\mbox{\Hypertarget{classcom_1_1example_1_1wireless__x_1_1MainActivity_ad092f1f66bf81130a5089f32130e1879}\label{classcom_1_1example_1_1wireless__x_1_1MainActivity_ad092f1f66bf81130a5089f32130e1879}}
void \mbox{\hyperlink{classcom_1_1example_1_1wireless__x_1_1MainActivity_ad092f1f66bf81130a5089f32130e1879}{mouse\+\_\+on\+\_\+off}} (View view)
\begin{DoxyCompactList}\small\item\em Enables or disables the visibility of Mouse UI. \end{DoxyCompactList}\item
\mbox{\Hypertarget{classcom_1_1example_1_1wireless__x_1_1MainActivity_a6e4df6530f7752cf5ce3ea803518796b}\label{classcom_1_1example_1_1wireless__x_1_1MainActivity_a6e4df6530f7752cf5ce3ea803518796b}}
void \mbox{\hyperlink{classcom_1_1example_1_1wireless__x_1_1MainActivity_a6e4df6530f7752cf5ce3ea803518796b}{camera\+\_\+on\+\_\+off}} (View view)
\begin{DoxyCompactList}\small\item\em Enables or disables the camera layout. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classcom_1_1example_1_1wireless__x_1_1MainActivity_a57bdabe7331b7b6c2366c5a712421eed}{camera\+\_\+switch}} (View view)
\begin{DoxyCompactList}\small\item\em Implementation of the camera switch button functionality. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classcom_1_1example_1_1wireless__x_1_1MainActivity_ad0be1b394cf38591e8c3b4fddcb0847c}{on\+Request\+Permissions\+Result}} (int request\+Code, @Non\+Null String\mbox{[}$\,$\mbox{]} permissions, @Non\+Null int\mbox{[}$\,$\mbox{]} grant\+Results)
\begin{DoxyCompactList}\small\item\em Sets up the camera view if all the permissions are granted. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classcom_1_1example_1_1wireless__x_1_1MainActivity_a22e8af693e360c03ba5b33eef44c133a}{on\+Resume}} ()
\begin{DoxyCompactList}\small\item\em Handles the on\+Resume state of the app. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classcom_1_1example_1_1wireless__x_1_1MainActivity_ae977f58ff77f0c94805aa5e3e7d2e41d}{on\+Pause}} ()
\begin{DoxyCompactList}\small\item\em Handles the on\+Pause state of the app. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classcom_1_1example_1_1wireless__x_1_1MainActivity_a557ea163daf4e60c184a49812aaf87c4}{on\+Destroy}} ()
\begin{DoxyCompactList}\small\item\em Handles the on\+Destroy state of the app. \end{DoxyCompactList}\item
Mat \mbox{\hyperlink{classcom_1_1example_1_1wireless__x_1_1MainActivity_a8777e09d0d879a9f63f089ef62746b5b}{on\+Camera\+Frame}} (Camera\+Bridge\+View\+Base.\+Cv\+Camera\+View\+Frame input\+Frame)
\begin{DoxyCompactList}\small\item\em Transmits the camera frames to the server. \end{DoxyCompactList}\item
\mbox{\Hypertarget{classcom_1_1example_1_1wireless__x_1_1MainActivity_af2ec32fa67be3d839f1a9c089328315a}\label{classcom_1_1example_1_1wireless__x_1_1MainActivity_af2ec32fa67be3d839f1a9c089328315a}}
void \mbox{\hyperlink{classcom_1_1example_1_1wireless__x_1_1MainActivity_af2ec32fa67be3d839f1a9c089328315a}{layout\+\_\+switch}} (View view)
\begin{DoxyCompactList}\small\item\em Sets up the layout as defined in the \char`\"{}activity\+\_\+main.\+xml\char`\"{} file. \end{DoxyCompactList}\item
\mbox{\Hypertarget{classcom_1_1example_1_1wireless__x_1_1MainActivity_a4ba20fbfd80e439a90dbc2fadabe175f}\label{classcom_1_1example_1_1wireless__x_1_1MainActivity_a4ba20fbfd80e439a90dbc2fadabe175f}}
void \mbox{\hyperlink{classcom_1_1example_1_1wireless__x_1_1MainActivity_a4ba20fbfd80e439a90dbc2fadabe175f}{mouse\+\_\+click}} (View view)
\begin{DoxyCompactList}\small\item\em Sends the mouse clicks. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classcom_1_1example_1_1wireless__x_1_1MainActivity_af9efad2592afbec052882809d6db191e}{key\+Press}} (View view)
\begin{DoxyCompactList}\small\item\em Handles the key press event. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsection*{Protected Member Functions}
\begin{DoxyCompactItemize}
\item
void \mbox{\hyperlink{classcom_1_1example_1_1wireless__x_1_1MainActivity_a2afda76ce41917b69b043fb5b5d1ee32}{on\+Create}} (Bundle saved\+Instance\+State)
\begin{DoxyCompactList}\small\item\em Sets up the app layout and contains the methods to handle various touch-\/related events. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsection{Detailed Description}
This is where the main code of the Wireless-\/X android application is written.
The \mbox{\hyperlink{classcom_1_1example_1_1wireless__x_1_1MainActivity}{Main\+Activity}} consists of the methods that initialize all the required variables and fields when the app starts, methods which keep listening to the mouse and keyboard events such as a mouse click event or a key press event, screen touch events, methods which send the camera frames to the virtual camera device running on the laptop and so on.
\doxysubsection{Member Function Documentation}
\mbox{\Hypertarget{classcom_1_1example_1_1wireless__x_1_1MainActivity_a57bdabe7331b7b6c2366c5a712421eed}\label{classcom_1_1example_1_1wireless__x_1_1MainActivity_a57bdabe7331b7b6c2366c5a712421eed}}
\index{com.example.wireless\_x.MainActivity@{com.example.wireless\_x.MainActivity}!camera\_switch@{camera\_switch}}
\index{camera\_switch@{camera\_switch}!com.example.wireless\_x.MainActivity@{com.example.wireless\_x.MainActivity}}
\doxysubsubsection{\texorpdfstring{camera\_switch()}{camera\_switch()}}
{\footnotesize\ttfamily void com.\+example.\+wireless\+\_\+x.\+Main\+Activity.\+camera\+\_\+switch (\begin{DoxyParamCaption}\item[{View}]{view }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
Implementation of the camera switch button functionality.
This method changes the main camera to the front or rear camera of the smartphone depending upon what the user has selected. \mbox{\Hypertarget{classcom_1_1example_1_1wireless__x_1_1MainActivity_a4d629b747ed093762bec62919da98983}\label{classcom_1_1example_1_1wireless__x_1_1MainActivity_a4d629b747ed093762bec62919da98983}}
\index{com.example.wireless\_x.MainActivity@{com.example.wireless\_x.MainActivity}!enter\_wireless\_x@{enter\_wireless\_x}}
\index{enter\_wireless\_x@{enter\_wireless\_x}!com.example.wireless\_x.MainActivity@{com.example.wireless\_x.MainActivity}}
\doxysubsubsection{\texorpdfstring{enter\_wireless\_x()}{enter\_wireless\_x()}}
{\footnotesize\ttfamily void com.\+example.\+wireless\+\_\+x.\+Main\+Activity.\+enter\+\_\+wireless\+\_\+x (\begin{DoxyParamCaption}\item[{View}]{view }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
Performs the action when the \char`\"{}\+Enter Wireless-\/\+X\char`\"{} button is clicked.
This method displays the mouse layout once the user clicks on \char`\"{}\+Enter Wireless-\/\+X\char`\"{} button. \mbox{\Hypertarget{classcom_1_1example_1_1wireless__x_1_1MainActivity_af9efad2592afbec052882809d6db191e}\label{classcom_1_1example_1_1wireless__x_1_1MainActivity_af9efad2592afbec052882809d6db191e}}
\index{com.example.wireless\_x.MainActivity@{com.example.wireless\_x.MainActivity}!keyPress@{keyPress}}
\index{keyPress@{keyPress}!com.example.wireless\_x.MainActivity@{com.example.wireless\_x.MainActivity}}
\doxysubsubsection{\texorpdfstring{keyPress()}{keyPress()}}
{\footnotesize\ttfamily void com.\+example.\+wireless\+\_\+x.\+Main\+Activity.\+key\+Press (\begin{DoxyParamCaption}\item[{View}]{view }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
Handles the key press event.
This method handles the key press event and also handles the scroll button available on mouse layout. \mbox{\Hypertarget{classcom_1_1example_1_1wireless__x_1_1MainActivity_af4be89ec8bce3fa9bddb1c0151c3e592}\label{classcom_1_1example_1_1wireless__x_1_1MainActivity_af4be89ec8bce3fa9bddb1c0151c3e592}}
\index{com.example.wireless\_x.MainActivity@{com.example.wireless\_x.MainActivity}!onBackPressed@{onBackPressed}}
\index{onBackPressed@{onBackPressed}!com.example.wireless\_x.MainActivity@{com.example.wireless\_x.MainActivity}}
\doxysubsubsection{\texorpdfstring{onBackPressed()}{onBackPressed()}}
{\footnotesize\ttfamily void com.\+example.\+wireless\+\_\+x.\+Main\+Activity.\+on\+Back\+Pressed (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
Performs the action when the back button is pressed.
It checks whether the back button is pressed twice within 2 seconds, if it is, then it exits the app. It also saves the IP address of the server so that the user doesn\textquotesingle{}t need to re-\/enter it the next time he/she opens the app. \mbox{\Hypertarget{classcom_1_1example_1_1wireless__x_1_1MainActivity_a8777e09d0d879a9f63f089ef62746b5b}\label{classcom_1_1example_1_1wireless__x_1_1MainActivity_a8777e09d0d879a9f63f089ef62746b5b}}
\index{com.example.wireless\_x.MainActivity@{com.example.wireless\_x.MainActivity}!onCameraFrame@{onCameraFrame}}
\index{onCameraFrame@{onCameraFrame}!com.example.wireless\_x.MainActivity@{com.example.wireless\_x.MainActivity}}
\doxysubsubsection{\texorpdfstring{onCameraFrame()}{onCameraFrame()}}
{\footnotesize\ttfamily Mat com.\+example.\+wireless\+\_\+x.\+Main\+Activity.\+on\+Camera\+Frame (\begin{DoxyParamCaption}\item[{Camera\+Bridge\+View\+Base.\+Cv\+Camera\+View\+Frame}]{input\+Frame }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
Transmits the camera frames to the server.
On receiving a camera frame, this method encodes that frame and transmits it to the server. \mbox{\Hypertarget{classcom_1_1example_1_1wireless__x_1_1MainActivity_a2afda76ce41917b69b043fb5b5d1ee32}\label{classcom_1_1example_1_1wireless__x_1_1MainActivity_a2afda76ce41917b69b043fb5b5d1ee32}}
\index{com.example.wireless\_x.MainActivity@{com.example.wireless\_x.MainActivity}!onCreate@{onCreate}}
\index{onCreate@{onCreate}!com.example.wireless\_x.MainActivity@{com.example.wireless\_x.MainActivity}}
\doxysubsubsection{\texorpdfstring{onCreate()}{onCreate()}}
{\footnotesize\ttfamily void com.\+example.\+wireless\+\_\+x.\+Main\+Activity.\+on\+Create (\begin{DoxyParamCaption}\item[{Bundle}]{saved\+Instance\+State }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [protected]}}
Sets up the app layout and contains the methods to handle various touch-\/related events.
Initializes all the app components and contains an listener for those events which can occur when the user interacts with the screen by single tap, double tap, scrolling or some gesture on the screen. Method which listens for screen-\/touch related events.
When the user performs a double tap, it is translated to the double left-\/click on a physical mouse. Similarly, when the user performs a single tap, it\textquotesingle{}s effect is same as a single click on any physical mouse. There is also an on\+Scroll event which corresponds to the mouse scrolling event. This listener uses the Gesture\+Detector class to handle such events.
Method to handle the double-\/tap event.
When the user performs a double tap, it is translated to the double left-\/click on a physical mouse. This is done by starting two threads simultaneously, which product the effect of two single-\/clicks without much delay, thus corresponding to a double-\/click.
Method to handle the single-\/tap event.
When the user performs a single tap, it is translated to the single left-\/click on a physical mouse. This is done by starting a thread, which sends the event information to the server running on laptop and then the server acts accordingly.
Method to handle the mouse scrolling event.
When the user performs a scroll event, the coordinates are transferred to the server, which translates those coordinates to the position with respect to the laptop screen.
Method to handle the screen-\/touch event.
This method calls the Gesture\+Detector object to handle the screen-\/touch event which can be any one of the single-\/tap, double-\/tap or scroll events.\mbox{\Hypertarget{classcom_1_1example_1_1wireless__x_1_1MainActivity_a557ea163daf4e60c184a49812aaf87c4}\label{classcom_1_1example_1_1wireless__x_1_1MainActivity_a557ea163daf4e60c184a49812aaf87c4}}
\index{com.example.wireless\_x.MainActivity@{com.example.wireless\_x.MainActivity}!onDestroy@{onDestroy}}
\index{onDestroy@{onDestroy}!com.example.wireless\_x.MainActivity@{com.example.wireless\_x.MainActivity}}
\doxysubsubsection{\texorpdfstring{onDestroy()}{onDestroy()}}
{\footnotesize\ttfamily void com.\+example.\+wireless\+\_\+x.\+Main\+Activity.\+on\+Destroy (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
Handles the on\+Destroy state of the app.
If the app reaches the \char`\"{}on\+Destroy\char`\"{} state in the lifecycle, then this method disables the camera view. \mbox{\Hypertarget{classcom_1_1example_1_1wireless__x_1_1MainActivity_ae977f58ff77f0c94805aa5e3e7d2e41d}\label{classcom_1_1example_1_1wireless__x_1_1MainActivity_ae977f58ff77f0c94805aa5e3e7d2e41d}}
\index{com.example.wireless\_x.MainActivity@{com.example.wireless\_x.MainActivity}!onPause@{onPause}}
\index{onPause@{onPause}!com.example.wireless\_x.MainActivity@{com.example.wireless\_x.MainActivity}}
\doxysubsubsection{\texorpdfstring{onPause()}{onPause()}}
{\footnotesize\ttfamily void com.\+example.\+wireless\+\_\+x.\+Main\+Activity.\+on\+Pause (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
Handles the on\+Pause state of the app.
If the app reaches the \char`\"{}on\+Pause\char`\"{} state in the lifecycle, then this method disables the camera view. It also saves the server\textquotesingle{}s IP address so that the next time the app is opened, the user doesn\textquotesingle{}t require to enter the same address again. \mbox{\Hypertarget{classcom_1_1example_1_1wireless__x_1_1MainActivity_ad0be1b394cf38591e8c3b4fddcb0847c}\label{classcom_1_1example_1_1wireless__x_1_1MainActivity_ad0be1b394cf38591e8c3b4fddcb0847c}}
\index{com.example.wireless\_x.MainActivity@{com.example.wireless\_x.MainActivity}!onRequestPermissionsResult@{onRequestPermissionsResult}}
\index{onRequestPermissionsResult@{onRequestPermissionsResult}!com.example.wireless\_x.MainActivity@{com.example.wireless\_x.MainActivity}}
\doxysubsubsection{\texorpdfstring{onRequestPermissionsResult()}{onRequestPermissionsResult()}}
{\footnotesize\ttfamily void com.\+example.\+wireless\+\_\+x.\+Main\+Activity.\+on\+Request\+Permissions\+Result (\begin{DoxyParamCaption}\item[{int}]{request\+Code, }\item[{@Non\+Null String\mbox{[}$\,$\mbox{]}}]{permissions, }\item[{@Non\+Null int\mbox{[}$\,$\mbox{]}}]{grant\+Results }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
Sets up the camera view if all the permissions are granted.
This method initializes all the camera parameters subject to the condition that all the required permissions are granted by the user. If this is not the case, then an error message is displayed. \mbox{\Hypertarget{classcom_1_1example_1_1wireless__x_1_1MainActivity_a22e8af693e360c03ba5b33eef44c133a}\label{classcom_1_1example_1_1wireless__x_1_1MainActivity_a22e8af693e360c03ba5b33eef44c133a}}
\index{com.example.wireless\_x.MainActivity@{com.example.wireless\_x.MainActivity}!onResume@{onResume}}
\index{onResume@{onResume}!com.example.wireless\_x.MainActivity@{com.example.wireless\_x.MainActivity}}
\doxysubsubsection{\texorpdfstring{onResume()}{onResume()}}
{\footnotesize\ttfamily void com.\+example.\+wireless\+\_\+x.\+Main\+Activity.\+on\+Resume (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
Handles the on\+Resume state of the app.
If the app reaches an \char`\"{}on\+Resume\char`\"{} state in the lifecycle, then this method checks if all the permissions are granted or not, if they are, then it sets up camera parameters otherwise it requests the permissions. \mbox{\Hypertarget{classcom_1_1example_1_1wireless__x_1_1MainActivity_a13c68af3d44accfe973b3dc661daf9e4}\label{classcom_1_1example_1_1wireless__x_1_1MainActivity_a13c68af3d44accfe973b3dc661daf9e4}}
\index{com.example.wireless\_x.MainActivity@{com.example.wireless\_x.MainActivity}!shiftPress@{shiftPress}}
\index{shiftPress@{shiftPress}!com.example.wireless\_x.MainActivity@{com.example.wireless\_x.MainActivity}}
\doxysubsubsection{\texorpdfstring{shiftPress()}{shiftPress()}}
{\footnotesize\ttfamily void com.\+example.\+wireless\+\_\+x.\+Main\+Activity.\+shift\+Press (\begin{DoxyParamCaption}\item[{View}]{view }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
Displays the keys which correspond to special characters.
When the shift-\/key is pressed on the keyboard in Wireless-\/X app, this method changes the layout of some keys to those keys which correspond to special characters such as brackets, \textquotesingle{}@\textquotesingle{}, etc. \mbox{\Hypertarget{classcom_1_1example_1_1wireless__x_1_1MainActivity_aad7a718ec54b19184dc7e301fde42f0e}\label{classcom_1_1example_1_1wireless__x_1_1MainActivity_aad7a718ec54b19184dc7e301fde42f0e}}
\index{com.example.wireless\_x.MainActivity@{com.example.wireless\_x.MainActivity}!test\_IP@{test\_IP}}
\index{test\_IP@{test\_IP}!com.example.wireless\_x.MainActivity@{com.example.wireless\_x.MainActivity}}
\doxysubsubsection{\texorpdfstring{test\_IP()}{test\_IP()}}
{\footnotesize\ttfamily void com.\+example.\+wireless\+\_\+x.\+Main\+Activity.\+test\+\_\+\+IP (\begin{DoxyParamCaption}\item[{View}]{view }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
Describes the action to be performed when Test IP is clicked on the app.
This method tries to set-\/up a connection with the IP address entered in the textfield to check if the IP address entered by the user is valid or not.
The documentation for this class was generated from the following file\+:\begin{DoxyCompactItemize}
\item
\mbox{\hyperlink{MainActivity_8java}{Main\+Activity.\+java}}\end{DoxyCompactItemize}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{doxygen}
% Packages used by this style file
\RequirePackage{alltt}
%%\RequirePackage{array} %% moved to refman.tex due to workaround for LaTex 2019 version and unmaintained tabu package
\RequirePackage{calc}
\RequirePackage{float}
%%\RequirePackage{ifthen} %% moved to refman.tex due to workaround for LaTex 2019 version and unmaintained tabu package
\RequirePackage{verbatim}
\RequirePackage[table]{xcolor}
\RequirePackage{longtable_doxygen}
\RequirePackage{tabu_doxygen}
\RequirePackage{fancyvrb}
\RequirePackage{tabularx}
\RequirePackage{multicol}
\RequirePackage{multirow}
\RequirePackage{hanging}
\RequirePackage{ifpdf}
\RequirePackage{adjustbox}
\RequirePackage{amssymb}
\RequirePackage{stackengine}
\RequirePackage[normalem]{ulem} % for strikeout, but don't modify emphasis
%---------- Internal commands used in this style file ----------------
\newcommand{\ensurespace}[1]{%
\begingroup%
\setlength{\dimen@}{#1}%
\vskip\z@\@plus\dimen@%
\penalty -100\vskip\z@\@plus -\dimen@%
\vskip\dimen@%
\penalty 9999%
\vskip -\dimen@%
\vskip\z@skip% hide the previous |\vskip| from |\addvspace|
\endgroup%
}
\newcommand{\DoxyHorRuler}[1]{%
\setlength{\parskip}{0ex plus 0ex minus 0ex}%
\ifthenelse{#1=0}%
{%
\hrule%
}%
{%
\hrulefilll%
}%
}
\newcommand{\DoxyLabelFont}{}
\newcommand{\entrylabel}[1]{%
{%
\parbox[b]{\labelwidth-4pt}{%
\makebox[0pt][l]{\DoxyLabelFont#1}%
\vspace{1.5\baselineskip}%
}%
}%
}
\newenvironment{DoxyDesc}[1]{%
\ensurespace{4\baselineskip}%
\begin{list}{}{%
\settowidth{\labelwidth}{20pt}%
%\setlength{\parsep}{0pt}%
\setlength{\itemsep}{0pt}%
\setlength{\leftmargin}{\labelwidth+\labelsep}%
\renewcommand{\makelabel}{\entrylabel}%
}%
\item[#1]%
}{%
\end{list}%
}
\newsavebox{\xrefbox}
\newlength{\xreflength}
\newcommand{\xreflabel}[1]{%
\sbox{\xrefbox}{#1}%
\setlength{\xreflength}{\wd\xrefbox}%
\ifthenelse{\xreflength>\labelwidth}{%
\begin{minipage}{\textwidth}%
\setlength{\parindent}{0pt}%
\hangindent=15pt\bfseries #1\vspace{1.2\itemsep}%
\end{minipage}%
}{%
\parbox[b]{\labelwidth}{\makebox[0pt][l]{\textbf{#1}}}%
}%
}
%---------- Commands used by doxygen LaTeX output generator ----------
% Used by <pre> ... </pre>
\newenvironment{DoxyPre}{%
\small%
\begin{alltt}%
}{%
\end{alltt}%
\normalsize%
}
% Necessary for redefining not defined characters, i.e. "Replacement Character" in tex output.
\newlength{\CodeWidthChar}
\newlength{\CodeHeightChar}
\settowidth{\CodeWidthChar}{?}
\settoheight{\CodeHeightChar}{?}
% Necessary for hanging indent
\newlength{\DoxyCodeWidth}
\newcommand\DoxyCodeLine[1]{\hangpara{\DoxyCodeWidth}{1}{#1}\par}
\newcommand\NiceSpace{%
\discretionary{}{\kern\fontdimen2\font}{\kern\fontdimen2\font}%
}
% Used by @code ... @endcode
\newenvironment{DoxyCode}[1]{%
\par%
\scriptsize%
\normalfont\ttfamily%
\rightskip0pt plus 1fil%
\settowidth{\DoxyCodeWidth}{000000}%
\settowidth{\CodeWidthChar}{?}%
\settoheight{\CodeHeightChar}{?}%
\setlength{\parskip}{0ex plus 0ex minus 0ex}%
\ifthenelse{\equal{#1}{0}}
{
{\lccode`~32 \lowercase{\global\let~}\NiceSpace}\obeyspaces%
}
{
{\lccode`~32 \lowercase{\global\let~}}\obeyspaces%
}
}{%
\normalfont%
\normalsize%
\settowidth{\CodeWidthChar}{?}%
\settoheight{\CodeHeightChar}{?}%
}
% Redefining not defined characters, i.e. "Replacement Character" in tex output.
\def\ucr{\adjustbox{width=\CodeWidthChar,height=\CodeHeightChar}{\stackinset{c}{}{c}{-.2pt}{%
\textcolor{white}{\sffamily\bfseries\small ?}}{%
\rotatebox{45}{$\blacksquare$}}}}
% Used by @example, @include, @includelineno and @dontinclude
\newenvironment{DoxyCodeInclude}[1]{%
\DoxyCode{#1}%
}{%
\endDoxyCode%
}
% Used by @verbatim ... @endverbatim
\newenvironment{DoxyVerb}{%
\footnotesize%
\verbatim%
}{%
\endverbatim%
\normalsize%
}
% Used by @verbinclude
\newenvironment{DoxyVerbInclude}{%
\DoxyVerb%
}{%
\endDoxyVerb%
}
% Used by numbered lists (using '-#' or <ol> ... </ol>)
\newenvironment{DoxyEnumerate}{%
\enumerate%
}{%
\endenumerate%
}
% Used by bullet lists (using '-', @li, @arg, or <ul> ... </ul>)
\newenvironment{DoxyItemize}{%
\itemize%
}{%
\enditemize%
}
% Used by description lists (using <dl> ... </dl>)
\newenvironment{DoxyDescription}{%
\description%
}{%
\enddescription%
}
% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc
% (only if caption is specified)
\newenvironment{DoxyImage}{%
\begin{figure}[H]%
\centering%
}{%
\end{figure}%
}
% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc
% (only if no caption is specified)
\newenvironment{DoxyImageNoCaption}{%
\begin{center}%
}{%
\end{center}%
}
% Used by @image
% (only if inline is specified)
\newenvironment{DoxyInlineImage}{%
}{%
}
% Used by @attention
\newenvironment{DoxyAttention}[1]{%
\begin{DoxyDesc}{#1}%
}{%
\end{DoxyDesc}%
}
% Used by @author and @authors
\newenvironment{DoxyAuthor}[1]{%
\begin{DoxyDesc}{#1}%
}{%
\end{DoxyDesc}%
}
% Used by @date
\newenvironment{DoxyDate}[1]{%
\begin{DoxyDesc}{#1}%
}{%
\end{DoxyDesc}%
}
% Used by @invariant
\newenvironment{DoxyInvariant}[1]{%
\begin{DoxyDesc}{#1}%
}{%
\end{DoxyDesc}%
}
% Used by @note
\newenvironment{DoxyNote}[1]{%
\begin{DoxyDesc}{#1}%
}{%
\end{DoxyDesc}%
}
% Used by @post
\newenvironment{DoxyPostcond}[1]{%
\begin{DoxyDesc}{#1}%
}{%
\end{DoxyDesc}%
}
% Used by @pre
\newenvironment{DoxyPrecond}[1]{%
\begin{DoxyDesc}{#1}%
}{%
\end{DoxyDesc}%
}
% Used by @copyright
\newenvironment{DoxyCopyright}[1]{%
\begin{DoxyDesc}{#1}%
}{%
\end{DoxyDesc}%
}
% Used by @remark
\newenvironment{DoxyRemark}[1]{%
\begin{DoxyDesc}{#1}%
}{%
\end{DoxyDesc}%
}
% Used by @return and @returns
\newenvironment{DoxyReturn}[1]{%
\begin{DoxyDesc}{#1}%
}{%
\end{DoxyDesc}%
}
% Used by @since
\newenvironment{DoxySince}[1]{%
\begin{DoxyDesc}{#1}%
}{%
\end{DoxyDesc}%
}
% Used by @see
\newenvironment{DoxySeeAlso}[1]{%
\begin{DoxyDesc}{#1}%
}{%
\end{DoxyDesc}%
}
% Used by @version
\newenvironment{DoxyVersion}[1]{%
\begin{DoxyDesc}{#1}%
}{%
\end{DoxyDesc}%
}
% Used by @warning
\newenvironment{DoxyWarning}[1]{%
\begin{DoxyDesc}{#1}%
}{%
\end{DoxyDesc}%
}
% Used by @internal
\newenvironment{DoxyInternal}[1]{%
\paragraph*{#1}%
}{%
}
% Used by @par and @paragraph
\newenvironment{DoxyParagraph}[1]{%
\begin{DoxyDesc}{#1}%
}{%
\end{DoxyDesc}%
}
% Used by parameter lists
\newenvironment{DoxyParams}[2][]{%
\tabulinesep=1mm%
\par%
\ifthenelse{\equal{#1}{}}%
{\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|}}% name + description
{\ifthenelse{\equal{#1}{1}}%
{\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|X[-1,l]|}}% in/out + name + desc
{\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|X[-1,l]|X[-1,l]|}}% in/out + type + name + desc
}
\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]%
\hline%
\endfirsthead%
\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]%
\hline%
\endhead%
}{%
\end{longtabu*}%
\vspace{6pt}%
}
% Used for fields of simple structs
\newenvironment{DoxyFields}[1]{%
\tabulinesep=1mm%
\par%
\begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|X[-1,l]|}%
\multicolumn{3}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
\hline%
\endfirsthead%
\multicolumn{3}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
\hline%
\endhead%
}{%
\end{longtabu*}%
\vspace{6pt}%
}
% Used for fields simple class style enums
\newenvironment{DoxyEnumFields}[1]{%
\tabulinesep=1mm%
\par%
\begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}%
\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
\hline%
\endfirsthead%
\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
\hline%
\endhead%
}{%
\end{longtabu*}%
\vspace{6pt}%
}
% Used for parameters within a detailed function description
\newenvironment{DoxyParamCaption}{%
\renewcommand{\item}[2][]{\\ \hspace*{2.0cm} ##1 {\em ##2}}%
}{%
}
% Used by return value lists
\newenvironment{DoxyRetVals}[1]{%
\tabulinesep=1mm%
\par%
\begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}%
\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
\hline%
\endfirsthead%
\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
\hline%
\endhead%
}{%
\end{longtabu*}%
\vspace{6pt}%
}
% Used by exception lists
\newenvironment{DoxyExceptions}[1]{%
\tabulinesep=1mm%
\par%
\begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}%
\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
\hline%
\endfirsthead%
\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
\hline%
\endhead%
}{%
\end{longtabu*}%
\vspace{6pt}%
}
% Used by template parameter lists
\newenvironment{DoxyTemplParams}[1]{%
\tabulinesep=1mm%
\par%
\begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}%
\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
\hline%
\endfirsthead%
\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
\hline%
\endhead%
}{%
\end{longtabu*}%
\vspace{6pt}%
}
% Used for member lists
\newenvironment{DoxyCompactItemize}{%
\begin{itemize}%
\setlength{\itemsep}{-3pt}%
\setlength{\parsep}{0pt}%
\setlength{\topsep}{0pt}%
\setlength{\partopsep}{0pt}%
}{%
\end{itemize}%
}
% Used for member descriptions
\newenvironment{DoxyCompactList}{%
\begin{list}{}{%
\setlength{\leftmargin}{0.5cm}%
\setlength{\itemsep}{0pt}%
\setlength{\parsep}{0pt}%
\setlength{\topsep}{0pt}%
\renewcommand{\makelabel}{\hfill}%
}%
}{%
\end{list}%
}
% Used for reference lists (@bug, @deprecated, @todo, etc.)
\newenvironment{DoxyRefList}{%
\begin{list}{}{%
\setlength{\labelwidth}{10pt}%
\setlength{\leftmargin}{\labelwidth}%
\addtolength{\leftmargin}{\labelsep}%
\renewcommand{\makelabel}{\xreflabel}%
}%
}{%
\end{list}%
}
% Used by @bug, @deprecated, @todo, etc.
\newenvironment{DoxyRefDesc}[1]{%
\begin{list}{}{%
\renewcommand\makelabel[1]{\textbf{##1}}%
\settowidth\labelwidth{\makelabel{#1}}%
\setlength\leftmargin{\labelwidth+\labelsep}%
}%
}{%
\end{list}%
}
% Used by parameter lists and simple sections
\newenvironment{Desc}
{\begin{list}{}{%
\settowidth{\labelwidth}{20pt}%
\setlength{\parsep}{0pt}%
\setlength{\itemsep}{0pt}%
\setlength{\leftmargin}{\labelwidth+\labelsep}%
\renewcommand{\makelabel}{\entrylabel}%
}
}{%
\end{list}%
}
% Used by tables
\newcommand{\PBS}[1]{\let\temp=\\#1\let\\=\temp}%
\newenvironment{TabularC}[1]%
{\tabulinesep=1mm
\begin{longtabu*}spread 0pt [c]{*#1{|X[-1]}|}}%
{\end{longtabu*}\par}%
\newenvironment{TabularNC}[1]%
{\begin{tabu}spread 0pt [l]{*#1{|X[-1]}|}}%
{\end{tabu}\par}%
% Used for member group headers
\newenvironment{Indent}{%
\begin{list}{}{%
\setlength{\leftmargin}{0.5cm}%
}%
\item[]\ignorespaces%
}{%
\unskip%
\end{list}%
}
% Used when hyperlinks are turned off
\newcommand{\doxyref}[3]{%
\textbf{#1} (\textnormal{#2}\,\pageref{#3})%
}
% Used to link to a table when hyperlinks are turned on
\newcommand{\doxytablelink}[2]{%
\ref{#1}%
}
% Used to link to a table when hyperlinks are turned off
\newcommand{\doxytableref}[3]{%
\ref{#3}%
}
% Used by @addindex
\newcommand{\lcurly}{\{}
\newcommand{\rcurly}{\}}
% Colors used for syntax highlighting
\definecolor{comment}{rgb}{0.5,0.0,0.0}
\definecolor{keyword}{rgb}{0.0,0.5,0.0}
\definecolor{keywordtype}{rgb}{0.38,0.25,0.125}
\definecolor{keywordflow}{rgb}{0.88,0.5,0.0}
\definecolor{preprocessor}{rgb}{0.5,0.38,0.125}
\definecolor{stringliteral}{rgb}{0.0,0.125,0.25}
\definecolor{charliteral}{rgb}{0.0,0.5,0.5}
\definecolor{vhdldigit}{rgb}{1.0,0.0,1.0}
\definecolor{vhdlkeyword}{rgb}{0.43,0.0,0.43}
\definecolor{vhdllogic}{rgb}{1.0,0.0,0.0}
\definecolor{vhdlchar}{rgb}{0.0,0.0,0.0}
% Color used for table heading
\newcommand{\tableheadbgcolor}{lightgray}%
% Version of hypertarget with correct landing location
\newcommand{\Hypertarget}[1]{\Hy@raisedlink{\hypertarget{#1}{}}}
% possibility to have sections etc. be within the margins
% unfortunately had to copy part of book.cls and add \raggedright
\makeatletter
\newcommand\doxysection{\@startsection {section}{1}{\z@}%
{-3.5ex \@plus -1ex \@minus -.2ex}%
{2.3ex \@plus.2ex}%
{\raggedright\normalfont\Large\bfseries}}
\newcommand\doxysubsection{\@startsection{subsection}{2}{\z@}%
{-3.25ex\@plus -1ex \@minus -.2ex}%
{1.5ex \@plus .2ex}%
{\raggedright\normalfont\large\bfseries}}
\newcommand\doxysubsubsection{\@startsection{subsubsection}{3}{\z@}%
{-3.25ex\@plus -1ex \@minus -.2ex}%
{1.5ex \@plus .2ex}%
{\raggedright\normalfont\normalsize\bfseries}}
\newcommand\doxyparagraph{\@startsection{paragraph}{4}{\z@}%
{3.25ex \@plus1ex \@minus.2ex}%
{-1em}%
{\raggedright\normalfont\normalsize\bfseries}}
\newcommand\doxysubparagraph{\@startsection{subparagraph}{5}{\parindent}%
{3.25ex \@plus1ex \@minus .2ex}%
{-1em}%
{\raggedright\normalfont\normalsize\bfseries}}
\makeatother
% Define caption that is also suitable in a table
\makeatletter
\def\doxyfigcaption{%
\H@refstepcounter{figure}%
\@dblarg{\@caption{figure}}}
\makeatother
\doxysection{File List}
Here is a list of all documented files with brief descriptions\+:\begin{DoxyCompactList}
\item\contentsline{section}{\mbox{\hyperlink{MainActivity_8java}{Main\+Activity.\+java}} \\*This is where the main code of the Wireless-\/X android application is written }{\pageref{MainActivity_8java}}{}
\item\contentsline{section}{\mbox{\hyperlink{Wireless-X__server_8py}{Wireless-\/\+X\+\_\+server.\+py}} \\*This includes the code for the server-\/side of Wireless-\/X }{\pageref{Wireless-X__server_8py}}{}
\end{DoxyCompactList}
\doxysection{Class Hierarchy}
This inheritance list is sorted roughly, but not completely, alphabetically\+:\begin{DoxyCompactList}
\item Cv\+Camera\+View\+Listener2\begin{DoxyCompactList}
\item \contentsline{section}{com.\+example.\+wireless\+\_\+x.\+Main\+Activity}{\pageref{classcom_1_1example_1_1wireless__x_1_1MainActivity}}{}
\end{DoxyCompactList}
\item App\+Compat\+Activity\begin{DoxyCompactList}
\item \contentsline{section}{com.\+example.\+wireless\+\_\+x.\+Main\+Activity}{\pageref{classcom_1_1example_1_1wireless__x_1_1MainActivity}}{}
\end{DoxyCompactList}
\end{DoxyCompactList}
Wireless-\/X consists of an android app backed by a python server. This app eliminates the need to buy a wireless mouse, wireless keyboard and a dedicated webcam. Using this app, the user can use his/her android smartphone\textquotesingle{}s screen as mouse, a keyboard layout available on the app as the wireless keyboard, and his/her smartphone\textquotesingle{}s camera as the webcam. A python server running on the target laptop/\+PC will capture these commands and emulate the effects on laptop.
\ No newline at end of file
%%
%% This is file `longtable.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% longtable.dtx (with options: `package')
%%
%% This is a generated file.
%%
%% The source is maintained by the LaTeX Project team and bug
%% reports for it can be opened at http://latex-project.org/bugs.html
%% (but please observe conditions on bug reports sent to that address!)
%%
%% Copyright 1993-2016
%% The LaTeX3 Project and any individual authors listed elsewhere
%% in this file.
%%
%% This file was generated from file(s) of the Standard LaTeX `Tools Bundle'.
%% --------------------------------------------------------------------------
%%
%% It may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3c
%% of this license or (at your option) any later version.
%% The latest version of this license is in
%% http://www.latex-project.org/lppl.txt
%% and version 1.3c or later is part of all distributions of LaTeX
%% version 2005/12/01 or later.
%%
%% This file may only be distributed together with a copy of the LaTeX
%% `Tools Bundle'. You may however distribute the LaTeX `Tools Bundle'
%% without such generated files.
%%
%% The list of all files belonging to the LaTeX `Tools Bundle' is
%% given in the file `manifest.txt'.
%%
%% File: longtable.dtx Copyright (C) 1990-2001 David Carlisle
\NeedsTeXFormat{LaTeX2e}[1995/06/01]
\ProvidesPackage{longtable_doxygen}
[2014/10/28 v4.11 Multi-page Table package (DPC) - frozen version for doxygen]
\def\LT@err{\PackageError{longtable}}
\def\LT@warn{\PackageWarning{longtable}}
\def\LT@final@warn{%
\AtEndDocument{%
\LT@warn{Table \@width s have changed. Rerun LaTeX.\@gobbletwo}}%
\global\let\LT@final@warn\relax}
\DeclareOption{errorshow}{%
\def\LT@warn{\PackageInfo{longtable}}}
\DeclareOption{pausing}{%
\def\LT@warn#1{%
\LT@err{#1}{This is not really an error}}}
\DeclareOption{set}{}
\DeclareOption{final}{}
\ProcessOptions
\newskip\LTleft \LTleft=\fill
\newskip\LTright \LTright=\fill
\newskip\LTpre \LTpre=\bigskipamount
\newskip\LTpost \LTpost=\bigskipamount
\newcount\LTchunksize \LTchunksize=20
\let\c@LTchunksize\LTchunksize
\newdimen\LTcapwidth \LTcapwidth=4in
\newbox\LT@head
\newbox\LT@firsthead
\newbox\LT@foot
\newbox\LT@lastfoot
\newcount\LT@cols
\newcount\LT@rows
\newcounter{LT@tables}
\newcounter{LT@chunks}[LT@tables]
\ifx\c@table\undefined
\newcounter{table}
\def\fnum@table{\tablename~\thetable}
\fi
\ifx\tablename\undefined
\def\tablename{Table}
\fi
\newtoks\LT@p@ftn
\mathchardef\LT@end@pen=30000
\def\longtable{%
\par
\ifx\multicols\@undefined
\else
\ifnum\col@number>\@ne
\@twocolumntrue
\fi
\fi
\if@twocolumn
\LT@err{longtable not in 1-column mode}\@ehc
\fi
\begingroup
\@ifnextchar[\LT@array{\LT@array[x]}}
\def\LT@array[#1]#2{%
\refstepcounter{table}\stepcounter{LT@tables}%
\if l#1%
\LTleft\z@ \LTright\fill
\else\if r#1%
\LTleft\fill \LTright\z@
\else\if c#1%
\LTleft\fill \LTright\fill
\fi\fi\fi
\let\LT@mcol\multicolumn
\let\LT@@tabarray\@tabarray
\let\LT@@hl\hline
\def\@tabarray{%
\let\hline\LT@@hl
\LT@@tabarray}%
\let\\\LT@tabularcr\let\tabularnewline\\%
\def\newpage{\noalign{\break}}%
\def\pagebreak{\noalign{\ifnum`}=0\fi\@testopt{\LT@no@pgbk-}4}%
\def\nopagebreak{\noalign{\ifnum`}=0\fi\@testopt\LT@no@pgbk4}%
\let\hline\LT@hline \let\kill\LT@kill\let\caption\LT@caption
\@tempdima\ht\strutbox
\let\@endpbox\LT@endpbox
\ifx\extrarowheight\@undefined
\let\@acol\@tabacol
\let\@classz\@tabclassz \let\@classiv\@tabclassiv
\def\@startpbox{\vtop\LT@startpbox}%
\let\@@startpbox\@startpbox
\let\@@endpbox\@endpbox
\let\LT@LL@FM@cr\@tabularcr
\else
\advance\@tempdima\extrarowheight
\col@sep\tabcolsep
\let\@startpbox\LT@startpbox\let\LT@LL@FM@cr\@arraycr
\fi
\setbox\@arstrutbox\hbox{\vrule
\@height \arraystretch \@tempdima
\@depth \arraystretch \dp \strutbox
\@width \z@}%
\let\@sharp##\let\protect\relax
\begingroup
\@mkpream{#2}%
\xdef\LT@bchunk{%
\global\advance\c@LT@chunks\@ne
\global\LT@rows\z@\setbox\z@\vbox\bgroup
\LT@setprevdepth
\tabskip\LTleft \noexpand\halign to\hsize\bgroup
\tabskip\z@ \@arstrut \@preamble \tabskip\LTright \cr}%
\endgroup
\expandafter\LT@nofcols\LT@bchunk&\LT@nofcols
\LT@make@row
\m@th\let\par\@empty
\everycr{}\lineskip\z@\baselineskip\z@
\LT@bchunk}
\def\LT@no@pgbk#1[#2]{\penalty #1\@getpen{#2}\ifnum`{=0\fi}}
\def\LT@start{%
\let\LT@start\endgraf
\endgraf\penalty\z@\vskip\LTpre
\dimen@\pagetotal
\advance\dimen@ \ht\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi
\advance\dimen@ \dp\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi
\advance\dimen@ \ht\LT@foot
\dimen@ii\vfuzz
\vfuzz\maxdimen
\setbox\tw@\copy\z@
\setbox\tw@\vsplit\tw@ to \ht\@arstrutbox
\setbox\tw@\vbox{\unvbox\tw@}%
\vfuzz\dimen@ii
\advance\dimen@ \ht
\ifdim\ht\@arstrutbox>\ht\tw@\@arstrutbox\else\tw@\fi
\advance\dimen@\dp
\ifdim\dp\@arstrutbox>\dp\tw@\@arstrutbox\else\tw@\fi
\advance\dimen@ -\pagegoal
\ifdim \dimen@>\z@\vfil\break\fi
\global\@colroom\@colht
\ifvoid\LT@foot\else
\advance\vsize-\ht\LT@foot
\global\advance\@colroom-\ht\LT@foot
\dimen@\pagegoal\advance\dimen@-\ht\LT@foot\pagegoal\dimen@
\maxdepth\z@
\fi
\ifvoid\LT@firsthead\copy\LT@head\else\box\LT@firsthead\fi\nobreak
\output{\LT@output}}
\def\endlongtable{%
\crcr
\noalign{%
\let\LT@entry\LT@entry@chop
\xdef\LT@save@row{\LT@save@row}}%
\LT@echunk
\LT@start
\unvbox\z@
\LT@get@widths
\if@filesw
{\let\LT@entry\LT@entry@write\immediate\write\@auxout{%
\gdef\expandafter\noexpand
\csname LT@\romannumeral\c@LT@tables\endcsname
{\LT@save@row}}}%
\fi
\ifx\LT@save@row\LT@@save@row
\else
\LT@warn{Column \@width s have changed\MessageBreak
in table \thetable}%
\LT@final@warn
\fi
\endgraf\penalty -\LT@end@pen
\endgroup
\global\@mparbottom\z@
\pagegoal\vsize
\endgraf\penalty\z@\addvspace\LTpost
\ifvoid\footins\else\insert\footins{}\fi}
\def\LT@nofcols#1&{%
\futurelet\@let@token\LT@n@fcols}
\def\LT@n@fcols{%
\advance\LT@cols\@ne
\ifx\@let@token\LT@nofcols
\expandafter\@gobble
\else
\expandafter\LT@nofcols
\fi}
\def\LT@tabularcr{%
\relax\iffalse{\fi\ifnum0=`}\fi
\@ifstar
{\def\crcr{\LT@crcr\noalign{\nobreak}}\let\cr\crcr
\LT@t@bularcr}%
{\LT@t@bularcr}}
\let\LT@crcr\crcr
\let\LT@setprevdepth\relax
\def\LT@t@bularcr{%
\global\advance\LT@rows\@ne
\ifnum\LT@rows=\LTchunksize
\gdef\LT@setprevdepth{%
\prevdepth\z@\global
\global\let\LT@setprevdepth\relax}%
\expandafter\LT@xtabularcr
\else
\ifnum0=`{}\fi
\expandafter\LT@LL@FM@cr
\fi}
\def\LT@xtabularcr{%
\@ifnextchar[\LT@argtabularcr\LT@ntabularcr}
\def\LT@ntabularcr{%
\ifnum0=`{}\fi
\LT@echunk
\LT@start
\unvbox\z@
\LT@get@widths
\LT@bchunk}
\def\LT@argtabularcr[#1]{%
\ifnum0=`{}\fi
\ifdim #1>\z@
\unskip\@xargarraycr{#1}%
\else
\@yargarraycr{#1}%
\fi
\LT@echunk
\LT@start
\unvbox\z@
\LT@get@widths
\LT@bchunk}
\def\LT@echunk{%
\crcr\LT@save@row\cr\egroup
\global\setbox\@ne\lastbox
\unskip
\egroup}
\def\LT@entry#1#2{%
\ifhmode\@firstofone{&}\fi\omit
\ifnum#1=\c@LT@chunks
\else
\kern#2\relax
\fi}
\def\LT@entry@chop#1#2{%
\noexpand\LT@entry
{\ifnum#1>\c@LT@chunks
1}{0pt%
\else
#1}{#2%
\fi}}
\def\LT@entry@write{%
\noexpand\LT@entry^^J%
\@spaces}
\def\LT@kill{%
\LT@echunk
\LT@get@widths
\expandafter\LT@rebox\LT@bchunk}
\def\LT@rebox#1\bgroup{%
#1\bgroup
\unvbox\z@
\unskip
\setbox\z@\lastbox}
\def\LT@blank@row{%
\xdef\LT@save@row{\expandafter\LT@build@blank
\romannumeral\number\LT@cols 001 }}
\def\LT@build@blank#1{%
\if#1m%
\noexpand\LT@entry{1}{0pt}%
\expandafter\LT@build@blank
\fi}
\def\LT@make@row{%
\global\expandafter\let\expandafter\LT@save@row
\csname LT@\romannumeral\c@LT@tables\endcsname
\ifx\LT@save@row\relax
\LT@blank@row
\else
{\let\LT@entry\or
\if!%
\ifcase\expandafter\expandafter\expandafter\LT@cols
\expandafter\@gobble\LT@save@row
\or
\else
\relax
\fi
!%
\else
\aftergroup\LT@blank@row
\fi}%
\fi}
\let\setlongtables\relax
\def\LT@get@widths{%
\setbox\tw@\hbox{%
\unhbox\@ne
\let\LT@old@row\LT@save@row
\global\let\LT@save@row\@empty
\count@\LT@cols
\loop
\unskip
\setbox\tw@\lastbox
\ifhbox\tw@
\LT@def@row
\advance\count@\m@ne
\repeat}%
\ifx\LT@@save@row\@undefined
\let\LT@@save@row\LT@save@row
\fi}
\def\LT@def@row{%
\let\LT@entry\or
\edef\@tempa{%
\ifcase\expandafter\count@\LT@old@row
\else
{1}{0pt}%
\fi}%
\let\LT@entry\relax
\xdef\LT@save@row{%
\LT@entry
\expandafter\LT@max@sel\@tempa
\LT@save@row}}
\def\LT@max@sel#1#2{%
{\ifdim#2=\wd\tw@
#1%
\else
\number\c@LT@chunks
\fi}%
{\the\wd\tw@}}
\def\LT@hline{%
\noalign{\ifnum0=`}\fi
\penalty\@M
\futurelet\@let@token\LT@@hline}
\def\LT@@hline{%
\ifx\@let@token\hline
\global\let\@gtempa\@gobble
\gdef\LT@sep{\penalty-\@medpenalty\vskip\doublerulesep}%
\else
\global\let\@gtempa\@empty
\gdef\LT@sep{\penalty-\@lowpenalty\vskip-\arrayrulewidth}%
\fi
\ifnum0=`{\fi}%
\multispan\LT@cols
\unskip\leaders\hrule\@height\arrayrulewidth\hfill\cr
\noalign{\LT@sep}%
\multispan\LT@cols
\unskip\leaders\hrule\@height\arrayrulewidth\hfill\cr
\noalign{\penalty\@M}%
\@gtempa}
\def\LT@caption{%
\noalign\bgroup
\@ifnextchar[{\egroup\LT@c@ption\@firstofone}\LT@capti@n}
\def\LT@c@ption#1[#2]#3{%
\LT@makecaption#1\fnum@table{#3}%
\def\@tempa{#2}%
\ifx\@tempa\@empty\else
{\let\\\space
\addcontentsline{lot}{table}{\protect\numberline{\thetable}{#2}}}%
\fi}
\def\LT@capti@n{%
\@ifstar
{\egroup\LT@c@ption\@gobble[]}%
{\egroup\@xdblarg{\LT@c@ption\@firstofone}}}
\def\LT@makecaption#1#2#3{%
\LT@mcol\LT@cols c{\hbox to\z@{\hss\parbox[t]\LTcapwidth{%
\sbox\@tempboxa{#1{#2: }#3}%
\ifdim\wd\@tempboxa>\hsize
#1{#2: }#3%
\else
\hbox to\hsize{\hfil\box\@tempboxa\hfil}%
\fi
\endgraf\vskip\baselineskip}%
\hss}}}
\def\LT@output{%
\ifnum\outputpenalty <-\@Mi
\ifnum\outputpenalty > -\LT@end@pen
\LT@err{floats and marginpars not allowed in a longtable}\@ehc
\else
\setbox\z@\vbox{\unvbox\@cclv}%
\ifdim \ht\LT@lastfoot>\ht\LT@foot
\dimen@\pagegoal
\advance\dimen@-\ht\LT@lastfoot
\ifdim\dimen@<\ht\z@
\setbox\@cclv\vbox{\unvbox\z@\copy\LT@foot\vss}%
\@makecol
\@outputpage
\setbox\z@\vbox{\box\LT@head}%
\fi
\fi
\global\@colroom\@colht
\global\vsize\@colht
\vbox
{\unvbox\z@\box\ifvoid\LT@lastfoot\LT@foot\else\LT@lastfoot\fi}%
\fi
\else
\setbox\@cclv\vbox{\unvbox\@cclv\copy\LT@foot\vss}%
\@makecol
\@outputpage
\global\vsize\@colroom
\copy\LT@head\nobreak
\fi}
\def\LT@end@hd@ft#1{%
\LT@echunk
\ifx\LT@start\endgraf
\LT@err
{Longtable head or foot not at start of table}%
{Increase LTchunksize}%
\fi
\setbox#1\box\z@
\LT@get@widths
\LT@bchunk}
\def\endfirsthead{\LT@end@hd@ft\LT@firsthead}
\def\endhead{\LT@end@hd@ft\LT@head}
\def\endfoot{\LT@end@hd@ft\LT@foot}
\def\endlastfoot{\LT@end@hd@ft\LT@lastfoot}
\def\LT@startpbox#1{%
\bgroup
\let\@footnotetext\LT@p@ftntext
\setlength\hsize{#1}%
\@arrayparboxrestore
\vrule \@height \ht\@arstrutbox \@width \z@}
\def\LT@endpbox{%
\@finalstrut\@arstrutbox
\egroup
\the\LT@p@ftn
\global\LT@p@ftn{}%
\hfil}
\def\LT@p@ftntext#1{%
\edef\@tempa{\the\LT@p@ftn\noexpand\footnotetext[\the\c@footnote]}%
\global\LT@p@ftn\expandafter{\@tempa{#1}}}%
\@namedef{ver@longtable.sty}{2014/10/28 v4.11 Multi-page Table package (DPC) - frozen version for doxygen}
\endinput
%%
%% End of file `longtable.sty'.
\hypertarget{md_README_autotoc_md1}{}\doxysection{Git repository link}\label{md_README_autotoc_md1}
\href{https://git.cse.iitb.ac.in/rajneeshkatkam/PARA-Site_WirelessX}{\texttt{ https\+://git.\+cse.\+iitb.\+ac.\+in/rajneeshkatkam/\+PARA-\/\+Site\+\_\+\+WirelessX}}\hypertarget{md_README_autotoc_md2}{}\doxysection{Installation Setup}\label{md_README_autotoc_md2}
\begin{DoxyVerb}1. Make sure that you are in the Wireless-X source directory
2. Grant the permission to execute install.sh installation script using the following command:
$ sudo chmod a+x install.sh
3. Execute the install.sh script to install the necessary dependencies using the following command:
$ sudo ./install.sh
\end{DoxyVerb}
\hypertarget{md_README_autotoc_md3}{}\doxysection{Running the application (\+Strictly follow the below order to run it successfully)\+:}\label{md_README_autotoc_md3}
\begin{DoxyVerb}1. Run the Wireless-X server using the following command:
$ python3 Wireless-X_server.py
2. Enter your linux system password (the same password you enter while executing a command as "sudo"). This is required in order to set up the virtual webcam device.
3. Application Installation and Setup on Android Smartphone:
a. Install the Wireless-X apk on Android smartphone and give required permissions.
b. Now, enter the IP address displayed in the terminal (on which the server is running) into the android application.
c. Click on Test Button to test the connection of smartphone with the server. If failed, Recheck if you have entered correct IP address of Laptop/ Desktop (on which the server is running).
d. After successfull connection, you would be able to control mouse, keyboard of laptop and use smartphones camera as webcam for the laptop/Desktop.
e. Now you would be able to use this virtual webcam device on chrome for video conferincing. (Tested on chrome for MS Teams and Google Meet).
f. (Optional) Inorder to test if camera frames are received to the Laptop/ Desktop, use the below command while (Note: camera option should be turned on in the
Wireless-X apk on Android):
$ ffplay /dev/video20
\end{DoxyVerb}
\hypertarget{md_README_autotoc_md4}{}\doxysubsubsection{$\ast$\+Extra (\+Inorder to remove v42loopback devices, use below command)\+:}\label{md_README_autotoc_md4}
\begin{DoxyVerb} $ sudo modprobe -r v4l2loopback
\end{DoxyVerb}
\hypertarget{md_README_autotoc_md5}{}\doxysection{Steps for Debugging (\+If python code doesn\textquotesingle{}t run after above commands)\+:}\label{md_README_autotoc_md5}
\begin{DoxyVerb}1. Check if your virtual device is created
$ ls /dev | grep -P '^video\d+$'
OR
$ v4l2-ctl --list-devices # TO List the virtual devices in detail
Output should look somewhat like this:
Wireless-X Camera (platform:v4l2loopback-000):
/dev/video20
Webcam C170: Webcam C170 (usb-0000:00:1a.0-1.2):
/dev/video0
/dev/video1
2. Inorder to test if virtual device is working:
Copy the sample code from https://github.com/jremmons/pyfakewebcam page and save it as python file and run it.
$ python3 demo.py
If everything worked correctly, no error should be displayed and terminal should be blank.
Now, Open another terminal and test if virtual device output is being display by entering below command:
$ ffplay /dev/video20
Note: ffplay
\end{DoxyVerb}
\hypertarget{md_README_autotoc_md6}{}\doxysection{Working (\+TODO)}\label{md_README_autotoc_md6}
\hypertarget{md_README_autotoc_md7}{}\doxysection{References}\label{md_README_autotoc_md7}
Open\+CV Reference\+: \begin{DoxyVerb}https://cmsdk.com/java/android-opencv-tcp-video-streaming.html
\end{DoxyVerb}
v4l2loopback References\+: \begin{DoxyVerb}https://github.com/jremmons/pyfakewebcam
https://github.com/jremmons/pyfakewebcam/issues/5
https://github.com/umlaeute/v4l2loopback#DKMS
\end{DoxyVerb}
Android Reference\+: \begin{DoxyVerb}https://stackoverflow.com/questions/23024831/android-shared-preferences-for-creating-one-time-activity-example
\end{DoxyVerb}
\ No newline at end of file
\hypertarget{md_Readme_autotoc_md1}{}\doxysection{Installation Setup}\label{md_Readme_autotoc_md1}
\begin{DoxyVerb}1. (Optional if already present) Install below packages (python development):
$ sudo apt-get install python3-tk python3-dev
2. Install opencv, autopy, pynput, pyfakewebcam library:
$ sudo pip3 install opencv-python
$ sudo pip3 install autopy
$ sudo pip3 install pynput
$ sudo pip3 install pyfakewebcam
3. FFmpeg and v4l2loopback Setup (for virtual device creation and video frames rendering):
a. Install FFmpeg by typing following command:
$ sudo apt install ffmpeg
b. Install v4l2loopback-dkms v4l2loopback-utils module:
$ sudo apt install v4l2loopback-dkms v4l2loopback-utils
$ sudo modprobe -r v4l2loopback
$ sudo depmod -a
\end{DoxyVerb}
\hypertarget{md_Readme_autotoc_md2}{}\doxysection{Running the application (\+Strictly follow the below order inorder to run it successfully)\+:}\label{md_Readme_autotoc_md2}
\begin{DoxyVerb}1. Creating virtual device (for webcam) and server On Desktop / Laptop side:
a. Create device using below 2 commands:
$ sudo modprobe v4l2loopback devices=1 video_nr=20 card_label='Wireless-X Camera' exclusive_caps=1
Check if your virtual device is created
$ ls /dev | grep -P '^video\d+$'
(Optional if already done earlier):
$ sudo depmod -a
b. run python file in the directory using below command:
$ python3 Wireless-X_server.py
If no errors encountered, below output should be displayed on terminal:
---------Wireless-X Server------
Camera stream port: 9998
Keyboard and Mouse Listening port: 6666
2. Application Installation and Setup on Android Smartphone:
a. Install the Wireless-X apk on Android smartphone and give required permissions.
b. Now enter the IP address of the Laptop/ Desktop on which the server is hosted. You can type the below command in terminal to get host IP:
$ ifconfig
c. Click on Test Button to test the connection of smartphone with the server. If failed, Recheck if you have entered correct IP address of Laptop/ Desktop (on
which the server is running).
d. After successfull connection, you would be able to control mouse, keyboard of laptop and use smartphones camera as webcam for the laptop/Desktop.
e. Now you would be able to use this virtual webcam device on chrome for video conferincing. (Tested on chrome for MS Teams and Google Meet).
f. (Optional) Inorder to test if camera frames are received to the Laptop/ Desktop, use the below command while (Note: camera option should be turned on in the
Wireless-X apk on Android):
$ ffplay /dev/video20
\end{DoxyVerb}
\hypertarget{md_Readme_autotoc_md3}{}\doxysection{IMPORTANT\+: Make sure you have a virtual device created before running the Wireless-\/\+X\+\_\+server.\+py.}\label{md_Readme_autotoc_md3}
\hypertarget{md_Readme_autotoc_md4}{}\doxysubsubsection{$\ast$\+Extra (\+Inorder to remove v42loopback devices, use below command)\+:}\label{md_Readme_autotoc_md4}
\begin{DoxyVerb} $ sudo modprobe -r v4l2loopback
\end{DoxyVerb}
\hypertarget{md_Readme_autotoc_md5}{}\doxysection{Steps for Debugging (\+If python code doesn\textquotesingle{}t run after above commands)\+:}\label{md_Readme_autotoc_md5}
\begin{DoxyVerb}1. Check if your virtual device is created
$ ls /dev | grep -P '^video\d+$'
OR
$ v4l2-ctl --list-devices # TO List the virtual devices in detail
Output should look somewhat like this:
Wireless-X Camera (platform:v4l2loopback-000):
/dev/video20
Webcam C170: Webcam C170 (usb-0000:00:1a.0-1.2):
/dev/video0
/dev/video1
2. Inorder to test if virtual device is working:
Copy the sample code from https://github.com/jremmons/pyfakewebcam page and save it as python file and run it.
$ python3 demo.py
If everything worked correctly, no error should be displayed and terminal should be blank.
Now, Open another terminal and test if virtual device output is being display by entering below command:
$ ffplay /dev/video20
Note: ffplay
\end{DoxyVerb}
\#\+References
Opencv references\+: \begin{DoxyVerb}https://cmsdk.com/java/android-opencv-tcp-video-streaming.html
\end{DoxyVerb}
v4l2loopback references\+: \begin{DoxyVerb}https://github.com/jremmons/pyfakewebcam
https://github.com/jremmons/pyfakewebcam/issues/5
https://github.com/umlaeute/v4l2loopback#DKMS
\end{DoxyVerb}
Android\+: \href{https://stackoverflow.com/questions/23024831/android-shared-preferences-for-creating-one-time-activity-example}{\texttt{ https\+://stackoverflow.\+com/questions/23024831/android-\/shared-\/preferences-\/for-\/creating-\/one-\/time-\/activity-\/example}}
\ No newline at end of file
\hypertarget{namespaceWireless}{}\doxysection{Wireless Namespace Reference}
\label{namespaceWireless}\index{Wireless@{Wireless}}
-\/X\+\_\+server
\doxysubsection{Detailed Description}
-\/X\+\_\+server
\begin{DoxyVerb}@file
This includes the code for the server-side of Wireless-X
The server running on laptop or PC is responsible for receiving the actions performed by user on the
Wireless-X android app as well as receiving the camera frames of the user's smartphone (if the user has turned)
on the camera). Such actions are transmitted to the server in encoded form, the server decodes the received
message and instructs the laptop or PC to perform the action described in that message.
\end{DoxyVerb}
\ No newline at end of file
\doxysection{Namespace List}
Here is a list of all documented namespaces with brief descriptions\+:\begin{DoxyCompactList}
\item\contentsline{section}{\mbox{\hyperlink{namespaceWireless}{Wireless}} \\*-\/X\+\_\+server }{\pageref{namespaceWireless}}{}
\end{DoxyCompactList}
This is pdfTeX, Version 3.14159265-2.6-1.40.20 (TeX Live 2019/Debian) (preloaded format=pdflatex 2020.11.17) 17 NOV 2020 20:56
entering extended mode
restricted \write18 enabled.
%&-line parsing enabled.
**refman
(./refman.tex
LaTeX2e <2020-02-02> patch level 2
L3 programming layer <2020-02-14>
(/usr/share/texlive/texmf-dist/tex/latex/base/book.cls
Document Class: book 2019/12/20 v1.4l Standard LaTeX document class
(/usr/share/texlive/texmf-dist/tex/latex/base/bk10.clo
File: bk10.clo 2019/12/20 v1.4l Standard LaTeX file (size option)
)
\c@part=\count167
\c@chapter=\count168
\c@section=\count169
\c@subsection=\count170
\c@subsubsection=\count171
\c@paragraph=\count172
\c@subparagraph=\count173
\c@figure=\count174
\c@table=\count175
\abovecaptionskip=\skip47
\belowcaptionskip=\skip48
\bibindent=\dimen134
)
(/usr/share/texlive/texmf-dist/tex/latex/base/ifthen.sty
Package: ifthen 2014/09/29 v1.1c Standard LaTeX ifthen package (DPC)
)
(/usr/share/texlive/texmf-dist/tex/latex/tools/array.sty
Rollback for package 'array' requested -> date 2016-10-06.
Best approximation is the release introduced on 2016-10-06.
(/usr/share/texlive/texmf-dist/tex/latex/tools/array-2016-10-06.sty
Package: array 2016/10/06 v2.4d Tabular extension package (FMi)
\col@sep=\dimen135
\extrarowheight=\dimen136
\NC@list=\toks14
\extratabsurround=\skip49
\backup@length=\skip50
))
(/usr/share/texlive/texmf-dist/tex/latex/base/fixltx2e.sty
Package: fixltx2e 2016/12/29 v2.1a fixes to LaTeX (obsolete)
Applying: [2015/01/01] Old fixltx2e package on input line 46.
Package fixltx2e Warning: fixltx2e is not required with releases after 2015
(fixltx2e) All fixes are now in the LaTeX kernel.
(fixltx2e) See the latexrelease package for details.
Already applied: [0000/00/00] Old fixltx2e package on input line 53.
) (./doxygen.sty
Package: doxygen
(/usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty
Package: alltt 1997/06/16 v2.0g defines alltt environment
)
(/usr/share/texlive/texmf-dist/tex/latex/tools/calc.sty
Package: calc 2017/05/25 v4.3 Infix arithmetic (KKT,FJ)
\calc@Acount=\count176
\calc@Bcount=\count177
\calc@Adimen=\dimen137
\calc@Bdimen=\dimen138
\calc@Askip=\skip51
\calc@Bskip=\skip52
LaTeX Info: Redefining \setlength on input line 80.
LaTeX Info: Redefining \addtolength on input line 81.
\calc@Ccount=\count178
\calc@Cskip=\skip53
)
(/usr/share/texlive/texmf-dist/tex/latex/float/float.sty
Package: float 2001/11/08 v1.3d Float enhancements (AL)
\c@float@type=\count179
\float@exts=\toks15
\float@box=\box45
\@float@everytoks=\toks16
\@floatcapt=\box46
)
(/usr/share/texlive/texmf-dist/tex/latex/tools/verbatim.sty
Package: verbatim 2019/11/10 v1.5r LaTeX2e package for verbatim enhancements
\every@verbatim=\toks17
\verbatim@line=\toks18
\verbatim@in@stream=\read2
)
(/usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty
Package: xcolor 2016/05/11 v2.12 LaTeX color extensions (UK)
(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg
File: color.cfg 2016/01/02 v1.6 sample color configuration
)
Package xcolor Info: Driver file: pdftex.def on input line 225.
(/usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def
File: pdftex.def 2018/01/08 v1.0l Graphics/color driver for pdftex
)
(/usr/share/texlive/texmf-dist/tex/latex/colortbl/colortbl.sty
Package: colortbl 2020/01/04 v1.0e Color table columns (DPC)
\everycr=\toks19
\minrowclearance=\skip54
)
\rownum=\count180
Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1348.
Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1352.
Package xcolor Info: Model `RGB' extended on input line 1364.
Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1366.
Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1367.
Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1368.
Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1369.
Package xcolor Info: Model `Gray' substituted by `gray' on input line 1370.
Package xcolor Info: Model `wave' substituted by `hsb' on input line 1371.
)
(./longtable_doxygen.sty
Package: longtable_doxygen 2014/10/28 v4.11 Multi-page Table package (DPC) - fr
ozen version for doxygen
\LTleft=\skip55
\LTright=\skip56
\LTpre=\skip57
\LTpost=\skip58
\LTchunksize=\count181
\LTcapwidth=\dimen139
\LT@head=\box47
\LT@firsthead=\box48
\LT@foot=\box49
\LT@lastfoot=\box50
\LT@cols=\count182
\LT@rows=\count183
\c@LT@tables=\count184
\c@LT@chunks=\count185
\LT@p@ftn=\toks20
) (./tabu_doxygen.sty
Package: tabu_doxygen 2011/02/26 v2.8 - flexible LaTeX tabulars (FC), frozen ve
rsion for doxygen
! LaTeX Error: File `varwidth.sty' not found.
Type X to quit or <RETURN> to proceed,
or enter new name. (Default extension: sty)
Enter file name: X
) ) )
(\end occurred when \ifx on line 69 was incomplete)
(\end occurred when \ifx on line 69 was incomplete)
Here is how much of TeX's memory you used:
1310 strings out of 483183
15907 string characters out of 5966291
250907 words of memory out of 5000000
16369 multiletter control sequences out of 15000+600000
532338 words of font info for 24 fonts, out of 8000000 for 9000
14 hyphenation exceptions out of 8191
35i,1n,41p,201b,36s stack positions out of 5000i,500n,10000p,200000b,80000s
No pages of output.
PDF statistics:
0 PDF objects out of 1000 (max. 8388607)
0 named destinations out of 1000 (max. 500000)
1 words of extra memory for PDF output out of 10000 (max. 10000000)
\let\mypdfximage\pdfximage\def\pdfximage{\immediate\mypdfximage}\documentclass[twoside]{book}
%% moved from doxygen.sty due to workaround for LaTex 2019 version and unmaintained tabu package
\usepackage{ifthen}
\ifx\requestedLaTeXdate\undefined
\usepackage{array}
\else
\usepackage{array}[=2016-10-06]
\fi
%%
% Packages required by doxygen
\usepackage{fixltx2e}
\usepackage{doxygen}
\usepackage{graphicx}
\usepackage[utf8]{inputenc}
\usepackage{makeidx}
\PassOptionsToPackage{warn}{textcomp}
\usepackage{textcomp}
\usepackage[nointegrals]{wasysym}
\usepackage{ifxetex}
% Font selection
\usepackage[T1]{fontenc}
\usepackage[scaled=.90]{helvet}
\usepackage{courier}
\renewcommand{\familydefault}{\sfdefault}
\usepackage{sectsty}
\allsectionsfont{%
\fontseries{bc}\selectfont%
\color{darkgray}%
}
\renewcommand{\DoxyLabelFont}{%
\fontseries{bc}\selectfont%
\color{darkgray}%
}
\newcommand{\+}{\discretionary{\mbox{\scriptsize$\hookleftarrow$}}{}{}}
% Arguments of doxygenemoji:
% 1) ':<text>:' form of the emoji, already "LaTeX"-escaped
% 2) file with the name of the emoji without the .png extension
% in case image exist use this otherwise use the ':<text>:' form
\newcommand{\doxygenemoji}[2]{%
\IfFileExists{./#2.png}{\raisebox{-0.1em}{\includegraphics[height=0.9em]{./#2.png}}}{#1}%
}
% Page & text layout
\usepackage{geometry}
\geometry{%
a4paper,%
top=2.5cm,%
bottom=2.5cm,%
left=2.5cm,%
right=2.5cm%
}
\tolerance=750
\hfuzz=15pt
\hbadness=750
\setlength{\emergencystretch}{15pt}
\setlength{\parindent}{0cm}
\newcommand{\doxynormalparskip}{\setlength{\parskip}{3ex plus 2ex minus 2ex}}
\newcommand{\doxytocparskip}{\setlength{\parskip}{1ex plus 0ex minus 0ex}}
\doxynormalparskip
\makeatletter
\renewcommand{\paragraph}{%
\@startsection{paragraph}{4}{0ex}{-1.0ex}{1.0ex}{%
\normalfont\normalsize\bfseries\SS@parafont%
}%
}
\renewcommand{\subparagraph}{%
\@startsection{subparagraph}{5}{0ex}{-1.0ex}{1.0ex}{%
\normalfont\normalsize\bfseries\SS@subparafont%
}%
}
\makeatother
\makeatletter
\newcommand\hrulefilll{\leavevmode\leaders\hrule\hskip 0pt plus 1filll\kern\z@}
\makeatother
% Headers & footers
\usepackage{fancyhdr}
\pagestyle{fancyplain}
\renewcommand{\footrulewidth}{0.4pt}
%
\fancypagestyle{fancyplain}{
\fancyhf{}
\fancyhead[LE, RO]{\bfseries\thepage}
\fancyhead[LO]{\bfseries\rightmark}
\fancyhead[RE]{\bfseries\leftmark}
\fancyfoot[LO, RE]{\bfseries\scriptsize Generated by Doxygen }
}
%
\fancypagestyle{plain}{
\fancyhf{}
\fancyfoot[LO, RE]{\bfseries\scriptsize Generated by Doxygen }
\renewcommand{\headrulewidth}{0pt}}
%
\pagestyle{fancyplain}
%
\renewcommand{\chaptermark}[1]{%
\markboth{#1}{}%
}
\renewcommand{\sectionmark}[1]{%
\markright{\thesection\ #1}%
}
% Indices & bibliography
\usepackage{natbib}
\usepackage[titles]{tocloft}
\setcounter{tocdepth}{3}
\setcounter{secnumdepth}{5}
\makeindex
\usepackage{newunicodechar}
\newunicodechar{}{${}^{-}$}% Superscript minus
\newunicodechar{²}{${}^{2}$}% Superscript two
\newunicodechar{³}{${}^{3}$}% Superscript three
% Hyperlinks (required, but should be loaded last)
\ifpdf
\usepackage[pdftex,pagebackref=true]{hyperref}
\else
\ifxetex
\usepackage[pagebackref=true]{hyperref}
\else
\usepackage[ps2pdf,pagebackref=true]{hyperref}
\fi
\fi
\hypersetup{%
colorlinks=true,%
linkcolor=blue,%
citecolor=blue,%
unicode%
}
% Custom commands
\newcommand{\clearemptydoublepage}{%
\newpage{\pagestyle{empty}\cleardoublepage}%
}
\usepackage{caption}
\captionsetup{labelsep=space,justification=centering,font={bf},singlelinecheck=off,skip=4pt,position=top}
\usepackage{etoc}
\etocsettocstyle{\doxytocparskip}{\doxynormalparskip}
\renewcommand{\numberline}[1]{#1~}
%===== C O N T E N T S =====
\begin{document}
\raggedbottom
% Titlepage & ToC
\hypersetup{pageanchor=false,
bookmarksnumbered=true,
pdfencoding=unicode
}
\pagenumbering{alph}
\begin{titlepage}
\vspace*{7cm}
\begin{center}%
{\Large Wireless-\/X }\\
\vspace*{1cm}
{\large Generated by Doxygen 1.9.0}\\
\end{center}
\end{titlepage}
\clearemptydoublepage
\pagenumbering{roman}
\tableofcontents
\clearemptydoublepage
\pagenumbering{arabic}
\hypersetup{pageanchor=true}
%--- Begin generated contents ---
\chapter{Main Page}
\label{index}\hypertarget{index}{}\input{index}
\chapter{WIRELESS X}
\label{md_README}
\Hypertarget{md_README}
\input{md_README}
\chapter{Hierarchical Index}
\input{hierarchy}
\chapter{Class Index}
\input{annotated}
\chapter{File Index}
\input{files}
\chapter{Class Documentation}
\input{classcom_1_1example_1_1wireless__x_1_1MainActivity}
\chapter{File Documentation}
\input{MainActivity_8java}
\input{Wireless-X__server_8py}
%--- End generated contents ---
% Index
\backmatter
\newpage
\phantomsection
\clearemptydoublepage
\addcontentsline{toc}{chapter}{\indexname}
\printindex
\end{document}
This source diff could not be displayed because it is too large. You can view the blob instead.
# WIRELESS X
## Git repository link
https://git.cse.iitb.ac.in/rajneeshkatkam/PARA-Site_WirelessX
## Installation Setup
1. Make sure that you are in the Wireless-X source directory
2. Grant the permission to execute install.sh installation script using the following command:
$ sudo chmod a+x install.sh
3. Execute the install.sh script to install the necessary dependencies using the following command:
$ sudo ./install.sh
## Running the application (Strictly follow the below order to run it successfully):
1. Run the Wireless-X server using the following command:
$ python3 Wireless-X_server.py
2. Enter your linux system password (the same password you enter while executing a command as "sudo"). This is required in order to set up the virtual webcam device.
3. Application Installation and Setup on Android Smartphone:
a. Install the Wireless-X apk on Android smartphone and give required permissions.
b. Now, enter the IP address displayed in the terminal (on which the server is running) into the android application.
c. Click on Test Button to test the connection of smartphone with the server. If failed, Recheck if you have entered correct IP address of Laptop/ Desktop (on which the server is running).
d. After successfull connection, you would be able to control mouse, keyboard of laptop and use smartphones camera as webcam for the laptop/Desktop.
e. Now you would be able to use this virtual webcam device on chrome for video conferincing. (Tested on chrome for MS Teams and Google Meet).
f. (Optional) Inorder to test if camera frames are received to the Laptop/ Desktop, use the below command while (Note: camera option should be turned on in the
Wireless-X apk on Android):
$ ffplay /dev/video20
#### *Extra (Inorder to remove v42loopback devices, use below command):
$ sudo modprobe -r v4l2loopback
## Steps for Debugging (If python code doesn't run after above commands):
1. Check if your virtual device is created
$ ls /dev | grep -P '^video\d+$'
OR
$ v4l2-ctl --list-devices # TO List the virtual devices in detail
Output should look somewhat like this:
Wireless-X Camera (platform:v4l2loopback-000):
/dev/video20
Webcam C170: Webcam C170 (usb-0000:00:1a.0-1.2):
/dev/video0
/dev/video1
2. Inorder to test if virtual device is working:
Copy the sample code from https://github.com/jremmons/pyfakewebcam page and save it as python file and run it.
$ python3 demo.py
If everything worked correctly, no error should be displayed and terminal should be blank.
Now, Open another terminal and test if virtual device output is being display by entering below command:
$ ffplay /dev/video20
Note: ffplay
## Working (TODO)
## References
OpenCV Reference:
https://cmsdk.com/java/android-opencv-tcp-video-streaming.html
v4l2loopback References:
https://github.com/jremmons/pyfakewebcam
https://github.com/jremmons/pyfakewebcam/issues/5
https://github.com/umlaeute/v4l2loopback#DKMS
Android Reference:
https://stackoverflow.com/questions/23024831/android-shared-preferences-for-creating-one-time-activity-example
\ No newline at end of file
...@@ -23,7 +23,7 @@ from pynput.mouse import Button, Controller as MouseController ...@@ -23,7 +23,7 @@ from pynput.mouse import Button, Controller as MouseController
## Creates a virtual camera on the laptop/PC ## Creates a virtual camera on the laptop/PC
virtualCamera = subprocess.run(["sudo", "modprobe", "v4l2loopback", "devices=1", "video_nr=20", "card_label='Wireless-X Camera'", "exclusive_caps=1"]) virtualCamera = subprocess.run(["sudo", "modprobe", "v4l2loopback", "devices=1", "video_nr=20", "card_label='Wireless-X Camera'", "exclusive_caps=1"])
print('\n\n----------Wireless-X Server----------\n\n') print('\n----------------Wireless-X Server----------------\n')
## @var width ## @var width
# Stores the width of the screen # Stores the width of the screen
...@@ -99,11 +99,13 @@ def bind_sockets(): ...@@ -99,11 +99,13 @@ def bind_sockets():
#print("Keyboard and Mouse Listening port: "+ str(key_port)) #print("Keyboard and Mouse Listening port: "+ str(key_port))
s.listen(10) s.listen(10)
print("\nWireless Server Up and Running ....\n\n") print("Wireless Server Up and Running........\n")
print("Enter Below IP address in your android app") print("Enter the below IP address in your android app:\n")
subprocess.run(["hostname", "-I"]) ps = subprocess.Popen(('hostname', '-I'), stdout=subprocess.PIPE)
output = subprocess.check_output(('awk', '{print $1}'), stdin=ps.stdout)
print('\nPress Ctrl+C to terminate the server') ps.wait()
print(output.decode("utf-8"))
print('Press Ctrl+C to terminate the server')
except socket.error as msg: except socket.error as msg:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment