Commit 35d028fe authored by Aditya Pradhan's avatar Aditya Pradhan

Documentation Updated

parent d136e6e5
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
People come from different economical background and buying a wireless mouse, or keyboard or web-cam may not be easy for everyone. Even if they can manage to buy one, it is not efficient to do so when they have already invested on a smartphone. One thing, that is very common now-a-days across all section of society is having a smartphone, either a basic or a high-end one doesn’t matter. The required hardware to emulate a wireless keyboard, mouse or external web-cam is already present in a smartphone, and we just need to tailor it to make it usable for a common end-user. People come from different economical background and buying a wireless mouse, or keyboard or web-cam may not be easy for everyone. Even if they can manage to buy one, it is not efficient to do so when they have already invested on a smartphone. One thing, that is very common now-a-days across all section of society is having a smartphone, either a basic or a high-end one doesn’t matter. The required hardware to emulate a wireless keyboard, mouse or external web-cam is already present in a smartphone, and we just need to tailor it to make it usable for a common end-user.
## Working ## Working
The Wireless-X app has two components: a python server running on laptop/PC and a client running on the android app. The user acts as a client where he/she sends the mouse and keyboard actions to be performed. If the user has turned on the camera, the camera frames are also sent to the python server. There are two sockets, one socket manages the mouse and keyboard actions, then the python program uses autopy and pynput libraries to translate these requests into the actual actions. The other socket is responsible for handling the camera frames, the python program uses the pyfakewebcam library to set up a camera virtual device on the laptop/PC and uses the OpenCV library to decode the camera frames coming from the client-side. The Wireless-X app has two components: a python server running on laptop/PC and a client running on the android app. The user acts as a client where he/she sends the mouse and keyboard actions to be performed. If the user has turned on the camera, the camera frames are also sent to the python server. There are two sockets, one socket manages the mouse and keyboard actions, then the python program uses autopy and pynput libraries to translate these requests into the actual actions. The other socket is responsible for handling the camera frames, the python program uses the v4l2loopback to set up a camera virtual device on the laptop/PC and the pyfakewebcam library to use that virtual device in order to transmit camera frames. The OpenCV library is used by both android app and python server to encode and decode the camera frames respectively.
## Installation Setup ## Installation Setup
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=9"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.0"/> <meta name="generator" content="Doxygen 1.9.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/> <meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Wireless-X: WIRELESS X</title> <title>Wireless-X: WIRELESS-X</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/> <link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script> <script type="text/javascript" src="dynsections.js"></script>
...@@ -63,47 +63,68 @@ $(function() { ...@@ -63,47 +63,68 @@ $(function() {
</div><!-- top --> </div><!-- top -->
<div class="PageDoc"><div class="header"> <div class="PageDoc"><div class="header">
<div class="headertitle"> <div class="headertitle">
<div class="title">WIRELESS X </div> </div> <div class="title">WIRELESS-X </div> </div>
</div><!--header--> </div><!--header-->
<div class="contents"> <div class="contents">
<div class="textblock"><h1><a class="anchor" id="autotoc_md1"></a> <div class="textblock"><h1><a class="anchor" id="autotoc_md1"></a>
All in one android app that wirelessly controls keyboard, mouse of Laptop/Desktop and also acts as a Webcam device.</h1>
<h1><a class="anchor" id="autotoc_md2"></a>
Git repository link</h1> 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> <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> <h1><a class="anchor" id="autotoc_md3"></a>
Team Members</h1>
<ol type="1">
<li>Aditya Pradhan (Roll number: 203059006)</li>
<li>Ajinkya Jumbad (Roll number: 203050032)</li>
<li>Prashant Ravi (Roll number: 203050082)</li>
<li>Rajneesh Katkam (Roll number: 203050086)</li>
</ol>
<h1><a class="anchor" id="autotoc_md4"></a>
Contributions</h1>
<ol type="1">
<li>Aditya Pradhan worked on python server and keyboard layout</li>
<li>Ajinkya Jumbad worked on mouse layout and the networking part of client-side</li>
<li>Prashant Ravi worked on python server and the networking part of client-side</li>
<li>Rajneesh Katkam worked on camera layout and the networking part of client-side</li>
</ol>
<h1><a class="anchor" id="autotoc_md5"></a>
Introduction</h1>
<p>The total package of Wireless-X consist of an android app being backed by a Python server. Using this app, we have tried to eliminate the need to buy a wireless mouse, wireless keyboard and a dedicated web-cam. Instead, using this app, user can use his/her android phone’s screen as his mouse, a custom build keyboard layout as his wireless keyboard and his/her smartphone’s camera as web-cam. A Python server running on target laptop will capture these commands and emulate the effects on laptop.</p>
<h1><a class="anchor" id="autotoc_md6"></a>
Motivation</h1>
<p>People come from different economical background and buying a wireless mouse, or keyboard or web-cam may not be easy for everyone. Even if they can manage to buy one, it is not efficient to do so when they have already invested on a smartphone. One thing, that is very common now-a-days across all section of society is having a smartphone, either a basic or a high-end one doesn’t matter. The required hardware to emulate a wireless keyboard, mouse or external web-cam is already present in a smartphone, and we just need to tailor it to make it usable for a common end-user.</p>
<h1><a class="anchor" id="autotoc_md7"></a>
Working</h1>
<p>The Wireless-X app has two components: a python server running on laptop/PC and a client running on the android app. The user acts as a client where he/she sends the mouse and keyboard actions to be performed. If the user has turned on the camera, the camera frames are also sent to the python server. There are two sockets, one socket manages the mouse and keyboard actions, then the python program uses autopy and pynput libraries to translate these requests into the actual actions. The other socket is responsible for handling the camera frames, the python program uses the pyfakewebcam library to set up a camera virtual device on the laptop/PC and uses the OpenCV library to decode the camera frames coming from the client-side.</p>
<h1><a class="anchor" id="autotoc_md8"></a>
Installation Setup</h1> Installation Setup</h1>
<pre class="fragment">1. Make sure that you are in the Wireless-X source directory <pre class="fragment">1. Make sure that you are in the WirelessX_Source_Code/WirelessX-Python-Server directory (where install.sh file is present)
2. Grant the permission to execute install.sh installation script using the following command: 2. Grant the permission to execute install.sh installation script using the following command:
$ sudo chmod a+x install.sh $ sudo chmod a+x install.sh
3. Execute the install.sh script to install the necessary dependencies using the following command: 3. Execute the install.sh script to install the necessary dependencies using the following command:
$ sudo ./install.sh $ sudo ./install.sh
</pre> <h1><a class="anchor" id="autotoc_md3"></a> </pre> <h1><a class="anchor" id="autotoc_md9"></a>
Running the application (Strictly follow the below order to run it successfully):</h1> 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: <p>NOTE: Before proceeding make sure that the Laptop/Desktop and the android phone are connected to same WiFi/Hotspot.</p>
$ python3 Wireless-X_server.py <ol type="1">
<li>Navigate to the WirelessX_Source_Code/WirelessX-Python-Server directory and run the Wireless-X server using the following command: $ python3 <a class="el" href="Wireless-X__server_8py.html" title="This includes the code for the server-side of Wireless-X.">Wireless-X_server.py</a></li>
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. <li>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. <br />
</li>
3. Application Installation and Setup on Android Smartphone: <li><p class="startli">Application Installation and Setup on Android Smartphone:</p>
<p class="startli">a. Install the Wireless-X apk (you can copy the apk from the folder WirelessX_Source to your smartphone) on Android smartphone and give required permissions.</p>
a. Install the Wireless-X apk on Android smartphone and give required permissions. <p class="startli">b. Now, enter the IP address displayed in the terminal (on which the server is running) into the android application.</p>
<p class="startli">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).</p>
b. Now, enter the IP address displayed in the terminal (on which the server is running) into the android application. <p class="startli">d. After successful connection, you would be able to control mouse, keyboard of laptop and use smartphones camera as webcam for the laptop/Desktop.</p>
<p class="startli">e. Now you would be able to use this virtual webcam device on Google Chrome for video conferencing. (Tested on Google Chrome for Microsoft Teams and Google Meet).</p>
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). <p class="startli">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</p>
</li>
d. After successfull connection, you would be able to control mouse, keyboard of laptop and use smartphones camera as webcam for the laptop/Desktop. </ol>
<h2><a class="anchor" id="autotoc_md10"></a>
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). *Extra (Inorder to remove v42loopback devices, use below command):</h2>
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 class="fragment"> $ sudo modprobe -r v4l2loopback
</pre><h1><a class="anchor" id="autotoc_md5"></a> </pre><h1><a class="anchor" id="autotoc_md11"></a>
Steps for Debugging (If python code doesn't run after above commands):</h1> Steps for Debugging (If python code doesn't run after above commands):</h1>
<pre class="fragment">1. Check if your virtual device is created <pre class="fragment">1. Check if your virtual device is created
...@@ -120,7 +141,6 @@ Steps for Debugging (If python code doesn't run after above commands):</h1> ...@@ -120,7 +141,6 @@ Steps for Debugging (If python code doesn't run after above commands):</h1>
/dev/video0 /dev/video0
/dev/video1 /dev/video1
2. Inorder to test if virtual device is working: 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. Copy the sample code from https://github.com/jremmons/pyfakewebcam page and save it as python file and run it.
...@@ -132,9 +152,7 @@ Steps for Debugging (If python code doesn't run after above commands):</h1> ...@@ -132,9 +152,7 @@ Steps for Debugging (If python code doesn't run after above commands):</h1>
$ ffplay /dev/video20 $ ffplay /dev/video20
Note: ffplay Note: ffplay
</pre><h1><a class="anchor" id="autotoc_md6"></a> </pre> <h1><a class="anchor" id="autotoc_md12"></a>
Working (TODO)</h1>
<h1><a class="anchor" id="autotoc_md7"></a>
References</h1> References</h1>
<p>OpenCV Reference: </p><pre class="fragment">https://cmsdk.com/java/android-opencv-tcp-video-streaming.html <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 </pre><p>v4l2loopback References: </p><pre class="fragment">https://github.com/jremmons/pyfakewebcam
......
...@@ -68,7 +68,7 @@ $(function() { ...@@ -68,7 +68,7 @@ $(function() {
<div class="contents"> <div class="contents">
<div class="textblock">Here is a list of all related documentation pages:</div><div class="directory"> <div class="textblock">Here is a list of all related documentation pages:</div><div class="directory">
<table 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> <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> </table>
</div><!-- directory --> </div><!-- directory -->
</div><!-- contents --> </div><!-- contents -->
......
var searchData= var searchData=
[ [
['wireless_20x_40',['WIRELESS X',['../md_README.html',1,'']]], ['wireless_2dx_40',['WIRELESS-X',['../md_README.html',1,'']]],
['width_41',['width',['../Wireless-X__server_8py.html#af68defefb623d24f4e1976c3a061bf98',1,'Wireless-X_server']]], ['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,'']]] ['wireless_2dx_5fserver_2epy_42',['Wireless-X_server.py',['../Wireless-X__server_8py.html',1,'']]]
]; ];
var searchData= var searchData=
[ [
['wireless_20x_85',['WIRELESS X',['../md_README.html',1,'']]] ['wireless_2dx_85',['WIRELESS-X',['../md_README.html',1,'']]]
]; ];
\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)
\hypertarget{md_README_autotoc_md1}{}\doxysection{All in one android app that wirelessly controls keyboard, mouse of Laptop/\+Desktop and also acts as a Webcam device.}\label{md_README_autotoc_md1}
\hypertarget{md_README_autotoc_md2}{}\doxysection{Git repository link}\label{md_README_autotoc_md2}
\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_md3}{}\doxysection{Team Members}\label{md_README_autotoc_md3}
\begin{DoxyEnumerate}
\item Aditya Pradhan (Roll number\+: 203059006)
\item Ajinkya Jumbad (Roll number\+: 203050032)
\item Prashant Ravi (Roll number\+: 203050082)
\item Rajneesh Katkam (Roll number\+: 203050086)
\end{DoxyEnumerate}\hypertarget{md_README_autotoc_md4}{}\doxysection{Contributions}\label{md_README_autotoc_md4}
\begin{DoxyEnumerate}
\item Aditya Pradhan worked on python server and keyboard layout
\item Ajinkya Jumbad worked on mouse layout and the networking part of client-\/side
\item Prashant Ravi worked on python server and the networking part of client-\/side
\item Rajneesh Katkam worked on camera layout and the networking part of client-\/side
\end{DoxyEnumerate}\hypertarget{md_README_autotoc_md5}{}\doxysection{Introduction}\label{md_README_autotoc_md5}
The total package of Wireless-\/X consist of an android app being backed by a Python server. Using this app, we have tried to eliminate the need to buy a wireless mouse, wireless keyboard and a dedicated web-\/cam. Instead, using this app, user can use his/her android phone’s screen as his mouse, a custom build keyboard layout as his wireless keyboard and his/her smartphone’s camera as web-\/cam. A Python server running on target laptop will capture these commands and emulate the effects on laptop.\hypertarget{md_README_autotoc_md6}{}\doxysection{Motivation}\label{md_README_autotoc_md6}
People come from different economical background and buying a wireless mouse, or keyboard or web-\/cam may not be easy for everyone. Even if they can manage to buy one, it is not efficient to do so when they have already invested on a smartphone. One thing, that is very common now-\/a-\/days across all section of society is having a smartphone, either a basic or a high-\/end one doesn’t matter. The required hardware to emulate a wireless keyboard, mouse or external web-\/cam is already present in a smartphone, and we just need to tailor it to make it usable for a common end-\/user.\hypertarget{md_README_autotoc_md7}{}\doxysection{Working}\label{md_README_autotoc_md7}
The Wireless-\/X app has two components\+: a python server running on laptop/\+PC and a client running on the android app. The user acts as a client where he/she sends the mouse and keyboard actions to be performed. If the user has turned on the camera, the camera frames are also sent to the python server. There are two sockets, one socket manages the mouse and keyboard actions, then the python program uses autopy and pynput libraries to translate these requests into the actual actions. The other socket is responsible for handling the camera frames, the python program uses the pyfakewebcam library to set up a camera virtual device on the laptop/\+PC and uses the Open\+CV library to decode the camera frames coming from the client-\/side.\hypertarget{md_README_autotoc_md8}{}\doxysection{Installation Setup}\label{md_README_autotoc_md8}
\begin{DoxyVerb}1. Make sure that you are in the WirelessX_Source_Code/WirelessX-Python-Server directory (where install.sh file is present)
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_md9}{}\doxysection{Running the application (\+Strictly follow the below order to run it successfully)}\label{md_README_autotoc_md9}
NOTE\+: Before proceeding make sure that the Laptop/\+Desktop and the android phone are connected to same Wi\+Fi/\+Hotspot.
\begin{DoxyEnumerate}
\item Navigate to the Wireless\+X\+\_\+\+Source\+\_\+\+Code/\+Wireless\+X-\/\+Python-\/\+Server directory and run the Wireless-\/X server using the following command\+: \$ python3 \mbox{\hyperlink{Wireless-X__server_8py}{Wireless-\/\+X\+\_\+server.\+py}}
\item Enter your linux system password (the same password you enter while executing a command as \char`\"{}sudo\char`\"{}). This is required in order to set up the virtual webcam device. ~\newline
\item Application Installation and Setup on Android Smartphone\+:
a. Install the Wireless-\/X apk (you can copy the apk from the folder Wireless\+X\+\_\+\+Source to your smartphone) 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 successful 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 Google Chrome for video conferencing. (Tested on Google Chrome for Microsoft 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{DoxyEnumerate}\hypertarget{md_README_autotoc_md10}{}\doxysubsection{$\ast$\+Extra (\+Inorder to remove v42loopback devices, use below command)\+:}\label{md_README_autotoc_md10}
\begin{DoxyVerb} $ sudo modprobe -r v4l2loopback
\end{DoxyVerb}
\hypertarget{md_README_autotoc_md11}{}\doxysection{Steps for Debugging (\+If python code doesn\textquotesingle{}t run after above commands)\+:}\label{md_README_autotoc_md11}
\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_md12}{}\doxysection{References}\label{md_README_autotoc_md12}
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
...@@ -173,7 +173,7 @@ ...@@ -173,7 +173,7 @@
%--- Begin generated contents --- %--- Begin generated contents ---
\chapter{Main Page} \chapter{Main Page}
\label{index}\hypertarget{index}{}\input{index} \label{index}\hypertarget{index}{}\input{index}
\chapter{WIRELESS X} \chapter{WIRELESS-\/X}
\label{md_README} \label{md_README}
\Hypertarget{md_README} \Hypertarget{md_README}
\input{md_README} \input{md_README}
......
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