mirror of
https://github.com/google/bumble.git
synced 2026-04-18 00:45:32 +00:00
usb: Add usb path moniker
Add a new moniker for usb and pyusb driver allowing to select the usb device using its bus id and port path like `usb:3-3.4.1`.
This commit is contained in:
committed by
David Duarte
parent
a2caf1deb2
commit
16d5cf6770
@@ -216,6 +216,15 @@ async def open_pyusb_transport(spec: str) -> Transport:
|
|||||||
if ':' in spec:
|
if ':' in spec:
|
||||||
vendor_id, product_id = spec.split(':')
|
vendor_id, product_id = spec.split(':')
|
||||||
device = usb_find(idVendor=int(vendor_id, 16), idProduct=int(product_id, 16))
|
device = usb_find(idVendor=int(vendor_id, 16), idProduct=int(product_id, 16))
|
||||||
|
elif '-' in spec:
|
||||||
|
|
||||||
|
def device_path(device):
|
||||||
|
if device.port_numbers:
|
||||||
|
return f'{device.bus}-{".".join(map(str, device.port_numbers))}'
|
||||||
|
else:
|
||||||
|
return str(device.bus)
|
||||||
|
|
||||||
|
device = usb_find(custom_match=lambda device: device_path(device) == spec)
|
||||||
else:
|
else:
|
||||||
device_index = int(spec)
|
device_index = int(spec)
|
||||||
devices = list(
|
devices = list(
|
||||||
|
|||||||
@@ -396,6 +396,16 @@ async def open_usb_transport(spec: str) -> Transport:
|
|||||||
break
|
break
|
||||||
device_index -= 1
|
device_index -= 1
|
||||||
device.close()
|
device.close()
|
||||||
|
elif '-' in spec:
|
||||||
|
|
||||||
|
def device_path(device):
|
||||||
|
return f'{device.getBusNumber()}-{".".join(map(str, device.getPortNumberList()))}'
|
||||||
|
|
||||||
|
for device in context.getDeviceIterator(skip_on_error=True):
|
||||||
|
if device_path(device) == spec:
|
||||||
|
found = device
|
||||||
|
break
|
||||||
|
device.close()
|
||||||
else:
|
else:
|
||||||
# Look for a compatible device by index
|
# Look for a compatible device by index
|
||||||
def device_is_bluetooth_hci(device):
|
def device_is_bluetooth_hci(device):
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ The moniker for a USB transport is either:
|
|||||||
* `usb:<vendor>:<product>`
|
* `usb:<vendor>:<product>`
|
||||||
* `usb:<vendor>:<product>/<serial-number>`
|
* `usb:<vendor>:<product>/<serial-number>`
|
||||||
* `usb:<vendor>:<product>#<index>`
|
* `usb:<vendor>:<product>#<index>`
|
||||||
|
* `usb:<bus>-<port_numbers>`
|
||||||
|
|
||||||
with `<index>` as a 0-based index (0 being the first one) to select amongst all the matching devices when there are more than one.
|
with `<index>` as a 0-based index (0 being the first one) to select amongst all the matching devices when there are more than one.
|
||||||
In the `usb:<index>` form, matching devices are the ones supporting Bluetooth HCI, as declared by their Class, Subclass and Protocol.
|
In the `usb:<index>` form, matching devices are the ones supporting Bluetooth HCI, as declared by their Class, Subclass and Protocol.
|
||||||
@@ -17,6 +18,8 @@ In the `usb:<vendor>:<product>#<index>` form, matching devices are the ones with
|
|||||||
|
|
||||||
`<vendor>` and `<product>` are a vendor ID and product ID in hexadecimal.
|
`<vendor>` and `<product>` are a vendor ID and product ID in hexadecimal.
|
||||||
|
|
||||||
|
with `<port_numbers>` as a list of all port numbers from root separated with dots `.`
|
||||||
|
|
||||||
In addition, if the moniker ends with the symbol "!", the device will be used in "forced" mode:
|
In addition, if the moniker ends with the symbol "!", the device will be used in "forced" mode:
|
||||||
the first USB interface of the device will be used, regardless of the interface class/subclass.
|
the first USB interface of the device will be used, regardless of the interface class/subclass.
|
||||||
This may be useful for some devices that use a custom class/subclass but may nonetheless work as-is.
|
This may be useful for some devices that use a custom class/subclass but may nonetheless work as-is.
|
||||||
@@ -37,6 +40,9 @@ This may be useful for some devices that use a custom class/subclass but may non
|
|||||||
`usb:0B05:17CB!`
|
`usb:0B05:17CB!`
|
||||||
The BT USB dongle vendor=0B05 and product=17CB, in "forced" mode.
|
The BT USB dongle vendor=0B05 and product=17CB, in "forced" mode.
|
||||||
|
|
||||||
|
`usb:3-3.4.1`
|
||||||
|
The BT USB dongle on bus 3 on port path 3, 4, 1.
|
||||||
|
|
||||||
|
|
||||||
## Alternative
|
## Alternative
|
||||||
The library includes two different implementations of the USB transport, implemented using different python bindings for `libusb`.
|
The library includes two different implementations of the USB transport, implemented using different python bindings for `libusb`.
|
||||||
|
|||||||
Reference in New Issue
Block a user