1 |
0b96f10c
|
Pultak
|
import logging
|
2 |
|
|
|
3 |
62efcbc4
|
silhavyj
|
import usb.core
|
4 |
|
|
import usb.util
|
5 |
|
|
|
6 |
|
|
|
7 |
272e6b50
|
silhavyj
|
_invalid_devices = []
|
8 |
|
|
|
9 |
|
|
|
10 |
62efcbc4
|
silhavyj
|
def read_connected_devices():
|
11 |
272e6b50
|
silhavyj
|
logging.debug("reading all currently connected devices")
|
12 |
62efcbc4
|
silhavyj
|
detected_devices = []
|
13 |
|
|
|
14 |
|
|
busses = usb.busses()
|
15 |
|
|
|
16 |
|
|
for bus in busses:
|
17 |
|
|
devices = bus.devices
|
18 |
|
|
for dev in devices:
|
19 |
272e6b50
|
silhavyj
|
device = {
|
20 |
|
|
"vendor_id": dev.idVendor,
|
21 |
|
|
"product_id": dev.idProduct
|
22 |
|
|
}
|
23 |
0f94f9b0
|
Pultak
|
serial_number = None
|
24 |
|
|
device_info = usb.core.find(idProduct=dev.idProduct)
|
25 |
5c67f214
|
Pultak
|
try:
|
26 |
0f94f9b0
|
Pultak
|
serial_number = usb.util.get_string(device_info, device_info.iSerialNumber)
|
27 |
731a638d
|
silhavyj
|
except ValueError:
|
28 |
272e6b50
|
silhavyj
|
if device not in _invalid_devices:
|
29 |
|
|
logging.warning(f"Could not retrieve serial number from device {device}")
|
30 |
|
|
_invalid_devices.append(device)
|
31 |
0f94f9b0
|
Pultak
|
|
32 |
|
|
if serial_number is not None:
|
33 |
272e6b50
|
silhavyj
|
if device in _invalid_devices:
|
34 |
|
|
_invalid_devices.remove(device)
|
35 |
|
|
|
36 |
|
|
device["serial_number"] = serial_number
|
37 |
|
|
detected_devices.append(device)
|
38 |
62efcbc4
|
silhavyj
|
|
39 |
|
|
return detected_devices
|