Projekt

Obecné

Profil

Stáhnout (12.1 KB) Statistiky
| Větev: | Tag: | Revize:
1
<!doctype html>
2
<html lang="en">
3
<head>
4
<meta charset="utf-8">
5
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
6
<meta name="generator" content="pdoc 0.10.0" />
7
<title>usb_detector.usb_reader API documentation</title>
8
<meta name="description" content="" />
9
<link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
10
<link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/typography.min.css" integrity="sha256-7l/o7C8jubJiy74VsKTidCy1yBkRtiUGbVkYBylBqUg=" crossorigin>
11
<link rel="stylesheet preload" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/styles/github.min.css" crossorigin>
12
<style>:root{--highlight-color:#fe9}.flex{display:flex !important}body{line-height:1.5em}#content{padding:20px}#sidebar{padding:30px;overflow:hidden}#sidebar > *:last-child{margin-bottom:2cm}.http-server-breadcrumbs{font-size:130%;margin:0 0 15px 0}#footer{font-size:.75em;padding:5px 30px;border-top:1px solid #ddd;text-align:right}#footer p{margin:0 0 0 1em;display:inline-block}#footer p:last-child{margin-right:30px}h1,h2,h3,h4,h5{font-weight:300}h1{font-size:2.5em;line-height:1.1em}h2{font-size:1.75em;margin:1em 0 .50em 0}h3{font-size:1.4em;margin:25px 0 10px 0}h4{margin:0;font-size:105%}h1:target,h2:target,h3:target,h4:target,h5:target,h6:target{background:var(--highlight-color);padding:.2em 0}a{color:#058;text-decoration:none;transition:color .3s ease-in-out}a:hover{color:#e82}.title code{font-weight:bold}h2[id^="header-"]{margin-top:2em}.ident{color:#900}pre code{background:#f8f8f8;font-size:.8em;line-height:1.4em}code{background:#f2f2f1;padding:1px 4px;overflow-wrap:break-word}h1 code{background:transparent}pre{background:#f8f8f8;border:0;border-top:1px solid #ccc;border-bottom:1px solid #ccc;margin:1em 0;padding:1ex}#http-server-module-list{display:flex;flex-flow:column}#http-server-module-list div{display:flex}#http-server-module-list dt{min-width:10%}#http-server-module-list p{margin-top:0}.toc ul,#index{list-style-type:none;margin:0;padding:0}#index code{background:transparent}#index h3{border-bottom:1px solid #ddd}#index ul{padding:0}#index h4{margin-top:.6em;font-weight:bold}@media (min-width:200ex){#index .two-column{column-count:2}}@media (min-width:300ex){#index .two-column{column-count:3}}dl{margin-bottom:2em}dl dl:last-child{margin-bottom:4em}dd{margin:0 0 1em 3em}#header-classes + dl > dd{margin-bottom:3em}dd dd{margin-left:2em}dd p{margin:10px 0}.name{background:#eee;font-weight:bold;font-size:.85em;padding:5px 10px;display:inline-block;min-width:40%}.name:hover{background:#e0e0e0}dt:target .name{background:var(--highlight-color)}.name > span:first-child{white-space:nowrap}.name.class > span:nth-child(2){margin-left:.4em}.inherited{color:#999;border-left:5px solid #eee;padding-left:1em}.inheritance em{font-style:normal;font-weight:bold}.desc h2{font-weight:400;font-size:1.25em}.desc h3{font-size:1em}.desc dt code{background:inherit}.source summary,.git-link-div{color:#666;text-align:right;font-weight:400;font-size:.8em;text-transform:uppercase}.source summary > *{white-space:nowrap;cursor:pointer}.git-link{color:inherit;margin-left:1em}.source pre{max-height:500px;overflow:auto;margin:0}.source pre code{font-size:12px;overflow:visible}.hlist{list-style:none}.hlist li{display:inline}.hlist li:after{content:',\2002'}.hlist li:last-child:after{content:none}.hlist .hlist{display:inline;padding-left:1em}img{max-width:100%}td{padding:0 .5em}.admonition{padding:.1em .5em;margin-bottom:1em}.admonition-title{font-weight:bold}.admonition.note,.admonition.info,.admonition.important{background:#aef}.admonition.todo,.admonition.versionadded,.admonition.tip,.admonition.hint{background:#dfd}.admonition.warning,.admonition.versionchanged,.admonition.deprecated{background:#fd4}.admonition.error,.admonition.danger,.admonition.caution{background:lightpink}</style>
13
<style media="screen and (min-width: 700px)">@media screen and (min-width:700px){#sidebar{width:30%;height:100vh;overflow:auto;position:sticky;top:0}#content{width:70%;max-width:100ch;padding:3em 4em;border-left:1px solid #ddd}pre code{font-size:1em}.item .name{font-size:1em}main{display:flex;flex-direction:row-reverse;justify-content:flex-end}.toc ul ul,#index ul{padding-left:1.5em}.toc > ul > li{margin-top:.5em}}</style>
14
<style media="print">@media print{#sidebar h1{page-break-before:always}.source{display:none}}@media print{*{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a[href]:after{content:" (" attr(href) ")";font-size:90%}a[href][title]:after{content:none}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h1,h2,h3,h4,h5,h6{page-break-after:avoid}}</style>
15
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/highlight.min.js" integrity="sha256-Uv3H6lx7dJmRfRvH8TH6kJD1TSK1aFcwgx+mdg3epi8=" crossorigin></script>
16
<script>window.addEventListener('DOMContentLoaded', () => hljs.initHighlighting())</script>
17
</head>
18
<body>
19
<main>
20
<article id="content">
21
<header>
22
<h1 class="title">Module <code>usb_detector.usb_reader</code></h1>
23
</header>
24
<section id="section-intro">
25
<details class="source">
26
<summary>
27
<span>Expand source code</span>
28
</summary>
29
<pre><code class="python">import logging
30

    
31
import usb.core
32
import usb.util
33

    
34

    
35
# list of devices from which the application
36
# could not retrieve a serial number
37
_invalid_devices = []
38

    
39

    
40
def read_connected_devices():
41
    &#34;&#34;&#34;Reads and returns all USB devices that are currently connected to the computer.
42

    
43
    It iterates over devices connected to individual buses and for each of
44
    them, it tries to retrieve its vendor id, product id, and serial number.
45
    If the application fails to retrieve the serial number of a device, it
46
    will store it into an in-RAM list to prevent &#34;spam&#34; logs. Once the application
47
    manages to read the serial number, the device will be removed from the list.
48

    
49
    :return: list of all USB devices connected to the PC
50
    &#34;&#34;&#34;
51
    logging.debug(&#34;reading all currently connected devices&#34;)
52

    
53
    # Create an empty list of USB devices.
54
    detected_devices = []
55

    
56
    # Get a list of all buses.
57
    busses = usb.busses()
58

    
59
    for bus in busses:
60
        # Get all devices connected to the current bus.
61
        devices = bus.devices
62
        for dev in devices:
63
            # Create a record of the device.
64
            device = {
65
                &#34;vendor_id&#34;: dev.idVendor,
66
                &#34;product_id&#34;: dev.idProduct
67
            }
68

    
69
            # Try to retrieve the serial number of the device.
70
            serial_number = None
71
            device_info = usb.core.find(idProduct=dev.idProduct)
72
            try:
73
                serial_number = usb.util.get_string(device_info, device_info.iSerialNumber)
74
            except ValueError:
75
                # If you fail, store the device into the in-RAM list (if it is not already there).
76
                if device not in _invalid_devices:
77
                    logging.warning(f&#34;Could not retrieve serial number from device {device}&#34;)
78
                    _invalid_devices.append(device)
79

    
80
            if serial_number is not None:
81
                # If you manage to read the serial number of a USB device
82
                # that was previously stored into the list of &#34;failures&#34;, remove it.
83
                if device in _invalid_devices:
84
                    _invalid_devices.remove(device)
85

    
86
                # Add the serial number into to USB device record.
87
                device[&#34;serial_number&#34;] = serial_number
88

    
89
                # Append the record into the list of the connected USB devices.
90
                detected_devices.append(device)
91

    
92
    # Return the list of currently plugged USB devices.
93
    return detected_devices</code></pre>
94
</details>
95
</section>
96
<section>
97
</section>
98
<section>
99
</section>
100
<section>
101
<h2 class="section-title" id="header-functions">Functions</h2>
102
<dl>
103
<dt id="usb_detector.usb_reader.read_connected_devices"><code class="name flex">
104
<span>def <span class="ident">read_connected_devices</span></span>(<span>)</span>
105
</code></dt>
106
<dd>
107
<div class="desc"><p>Reads and returns all USB devices that are currently connected to the computer.</p>
108
<p>It iterates over devices connected to individual buses and for each of
109
them, it tries to retrieve its vendor id, product id, and serial number.
110
If the application fails to retrieve the serial number of a device, it
111
will store it into an in-RAM list to prevent "spam" logs. Once the application
112
manages to read the serial number, the device will be removed from the list.</p>
113
<p>:return: list of all USB devices connected to the PC</p></div>
114
<details class="source">
115
<summary>
116
<span>Expand source code</span>
117
</summary>
118
<pre><code class="python">def read_connected_devices():
119
    &#34;&#34;&#34;Reads and returns all USB devices that are currently connected to the computer.
120

    
121
    It iterates over devices connected to individual buses and for each of
122
    them, it tries to retrieve its vendor id, product id, and serial number.
123
    If the application fails to retrieve the serial number of a device, it
124
    will store it into an in-RAM list to prevent &#34;spam&#34; logs. Once the application
125
    manages to read the serial number, the device will be removed from the list.
126

    
127
    :return: list of all USB devices connected to the PC
128
    &#34;&#34;&#34;
129
    logging.debug(&#34;reading all currently connected devices&#34;)
130

    
131
    # Create an empty list of USB devices.
132
    detected_devices = []
133

    
134
    # Get a list of all buses.
135
    busses = usb.busses()
136

    
137
    for bus in busses:
138
        # Get all devices connected to the current bus.
139
        devices = bus.devices
140
        for dev in devices:
141
            # Create a record of the device.
142
            device = {
143
                &#34;vendor_id&#34;: dev.idVendor,
144
                &#34;product_id&#34;: dev.idProduct
145
            }
146

    
147
            # Try to retrieve the serial number of the device.
148
            serial_number = None
149
            device_info = usb.core.find(idProduct=dev.idProduct)
150
            try:
151
                serial_number = usb.util.get_string(device_info, device_info.iSerialNumber)
152
            except ValueError:
153
                # If you fail, store the device into the in-RAM list (if it is not already there).
154
                if device not in _invalid_devices:
155
                    logging.warning(f&#34;Could not retrieve serial number from device {device}&#34;)
156
                    _invalid_devices.append(device)
157

    
158
            if serial_number is not None:
159
                # If you manage to read the serial number of a USB device
160
                # that was previously stored into the list of &#34;failures&#34;, remove it.
161
                if device in _invalid_devices:
162
                    _invalid_devices.remove(device)
163

    
164
                # Add the serial number into to USB device record.
165
                device[&#34;serial_number&#34;] = serial_number
166

    
167
                # Append the record into the list of the connected USB devices.
168
                detected_devices.append(device)
169

    
170
    # Return the list of currently plugged USB devices.
171
    return detected_devices</code></pre>
172
</details>
173
</dd>
174
</dl>
175
</section>
176
<section>
177
</section>
178
</article>
179
<nav id="sidebar">
180
<h1>Index</h1>
181
<div class="toc">
182
<ul></ul>
183
</div>
184
<ul id="index">
185
<li><h3>Super-module</h3>
186
<ul>
187
<li><code><a title="usb_detector" href="index.html">usb_detector</a></code></li>
188
</ul>
189
</li>
190
<li><h3><a href="#header-functions">Functions</a></h3>
191
<ul class="">
192
<li><code><a title="usb_detector.usb_reader.read_connected_devices" href="#usb_detector.usb_reader.read_connected_devices">read_connected_devices</a></code></li>
193
</ul>
194
</li>
195
</ul>
196
</nav>
197
</main>
198
<footer id="footer">
199
<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
200
</footer>
201
</body>
202
</html>
(5-5/5)