From d6c4644b235d2c0a966d7a63e357a4f9fbb554ab Mon Sep 17 00:00:00 2001 From: Gilles Boccon-Gibod Date: Thu, 6 Oct 2022 10:40:28 -0700 Subject: [PATCH] reorder the order of printing --- apps/usb_probe.py | 65 +++++++++++++++++++++++------------------ bumble/transport/usb.py | 6 +++- 2 files changed, 41 insertions(+), 30 deletions(-) diff --git a/apps/usb_probe.py b/apps/usb_probe.py index a973c22d..ff577373 100644 --- a/apps/usb_probe.py +++ b/apps/usb_probe.py @@ -169,6 +169,21 @@ def main(verbose): device_protocol ) + try: + device_serial_number = device.getSerialNumber() + except usb1.USBError: + device_serial_number = None + + try: + device_manufacturer = device.getManufacturer() + except usb1.USBError: + device_manufacturer = None + + try: + device_product = device.getProduct() + except usb1.USBError: + device_product = None + device_is_bluetooth_hci = is_bluetooth_hci(device) if device_is_bluetooth_hci: bluetooth_device_count += 1 @@ -185,43 +200,35 @@ def main(verbose): if device_is_bluetooth_hci: bumble_transport_names.append(f'usb:{bluetooth_device_count - 1}') + if device_id not in devices: + bumble_transport_names.append(basic_transport_name) + else: + bumble_transport_names.append(f'{basic_transport_name}#{len(devices[device_id])}') + if device_serial_number is not None: + if device_id not in devices or device_serial_number not in devices[device_id]: + bumble_transport_names.append(f'{basic_transport_name}/{device_serial_number}') + + # Print the results print(color(f'ID {device.getVendorID():04X}:{device.getProductID():04X}', fg=fg_color, bg=bg_color)) + if bumble_transport_names: + print(color(' Bumble Transport Names:', 'blue'), ' or '.join(color(x, 'cyan' if device_is_bluetooth_hci else 'red') for x in bumble_transport_names)) print(color(' Bus/Device: ', 'green'), f'{device.getBusNumber():03}/{device.getDeviceAddress():03}') print(color(' Class: ', 'green'), device_class_string) print(color(' Subclass/Protocol: ', 'green'), device_subclass_string) + if device_serial_number is not None: + print(color(' Serial: ', 'green'), device_serial_number) + if device_manufacturer is not None: + print(color(' Manufacturer: ', 'green'), device_manufacturer) + if device_product is not None: + print(color(' Product: ', 'green'), device_product) - try: - serial_number_collision = False - if device_id in devices: - for device_serial in devices[device_id]: - if device_serial == device.getSerialNumber(): - serial_number_collision = True + if verbose: + show_device_details(device) - if device_id not in devices: - bumble_transport_names.append(basic_transport_name) - else: - bumble_transport_names.append(f'{basic_transport_name}#{len(devices[device_id])}') + print() - if device.getSerialNumber() and not serial_number_collision: - bumble_transport_names.append(f'{basic_transport_name}/{device.getSerialNumber()}') - - if bumble_transport_names: - print(color(' Bumble Transport Names:', 'blue'), ' or '.join(color(x, 'cyan' if device_is_bluetooth_hci else 'red') for x in bumble_transport_names)) - if device.getSerialNumber(): - print(color(' Serial: ', 'green'), device.getSerialNumber()) - print(color(' Manufacturer: ', 'green'), device.getManufacturer()) - print(color(' Product: ', 'green'), device.getProduct()) - - if verbose: - show_device_details(device) - - print() - - devices.setdefault(device_id, []).append(device.getSerialNumber()) - - except usb1.USBError as e: - print(color(f' {e}', 'red')) + devices.setdefault(device_id, []).append(device_serial_number) # ----------------------------------------------------------------------------- diff --git a/bumble/transport/usb.py b/bumble/transport/usb.py index 519bf551..91b22b61 100644 --- a/bumble/transport/usb.py +++ b/bumble/transport/usb.py @@ -310,10 +310,14 @@ async def open_usb_transport(spec): device_index = int(device_index_str) for device in context.getDeviceIterator(skip_on_error=True): + try: + device_serial_number = device.getSerialNumber() + except usb1.USBError: + device_serial_number = None if ( device.getVendorID() == int(vendor_id, 16) and device.getProductID() == int(product_id, 16) and - (serial_number is None or device.getSerialNumber() == serial_number) + (serial_number is None or serial_number == device_serial_number) ): if device_index == 0: found = device