Revize 272e6b50
Přidáno uživatelem Jakub Šilhavý před více než 2 roky(ů)
client/usb_detector/usb_reader.py | ||
---|---|---|
4 | 4 |
import usb.util |
5 | 5 |
|
6 | 6 |
|
7 |
_invalid_devices = [] |
|
8 |
|
|
9 |
|
|
7 | 10 |
def read_connected_devices(): |
8 |
logging.debug(f'reading all currently connected devices')
|
|
11 |
logging.debug("reading all currently connected devices")
|
|
9 | 12 |
detected_devices = [] |
10 | 13 |
|
11 | 14 |
busses = usb.busses() |
... | ... | |
13 | 16 |
for bus in busses: |
14 | 17 |
devices = bus.devices |
15 | 18 |
for dev in devices: |
19 |
device = { |
|
20 |
"vendor_id": dev.idVendor, |
|
21 |
"product_id": dev.idProduct |
|
22 |
} |
|
16 | 23 |
serial_number = None |
17 | 24 |
device_info = usb.core.find(idProduct=dev.idProduct) |
18 | 25 |
try: |
19 | 26 |
serial_number = usb.util.get_string(device_info, device_info.iSerialNumber) |
20 | 27 |
except: |
21 |
# Failed to retrieve information from device
|
|
22 |
logging.info(f"device idVendor:{dev.idVendor} idProduct:{dev.idProduct} has invalid format")
|
|
23 |
pass
|
|
28 |
if device not in _invalid_devices:
|
|
29 |
logging.warning(f"Could not retrieve serial number from device {device}")
|
|
30 |
_invalid_devices.append(device)
|
|
24 | 31 |
|
25 | 32 |
if serial_number is not None: |
26 |
detected_devices.append({
|
|
27 |
"vendor_id": dev.idVendor,
|
|
28 |
"product_id": dev.idProduct, |
|
29 |
"serial_number": serial_number
|
|
30 |
})
|
|
33 |
if device in _invalid_devices:
|
|
34 |
_invalid_devices.remove(device)
|
|
35 |
|
|
36 |
device["serial_number"] = serial_number
|
|
37 |
detected_devices.append(device)
|
|
31 | 38 |
|
32 | 39 |
return detected_devices |
Také k dispozici: Unified diff
re #9419 Made sure that the error message gets printed out only one per device