It would be nice to pip install bumble without having to first install the libusb system dependency. Expecially on platforms like Windows and Mac, without a default package manager. The libusb_package Python package distributes prebuilt libusb-1.0 shared libraries for each OS and architecture as binary wheels for the pyusb project. Add this package as a dependency for bumble. For the pyusb transport, the libusb_package.find() function is a drop-in replacement for pyusb.core.find(). It searches the libusb_package site-path before system paths and creates a pyusb backend. For the usb transport, use libusb_package.get_library_path() to return a path to the libusb-1.0 library in site-packages. If this path exists, create a ctypes DLL and init the usb1 backend. This only needs to be done once. All future calls to usb1 will use this opened library. If the library path does not exist, do nothing, and usb1 will search default system paths when the usb1.USBContext object is created. This commit pins the libusb_package dependency at 1.0.26.0 to ensure every bumble install uses the exact same version of the libusb library.
Bumble Apps
NOTE:
To run python scripts from this directory when the Bumble package isn't installed in your environment,
put .. in your PYTHONPATH: export PYTHONPATH=..
Apps
show.py
Parse a file with HCI packets and print the details of each packet in a human readable form
link_relay.py
Simple WebSocket relay for virtual RemoteLink instances to communicate with each other through.
hci_bridge.py
This app acts as a simple bridge between two HCI transports, with a host on one side and a controller on the other. All the HCI packets bridged between the two are printed on the console for logging. This bridge also has the ability to short-circuit some HCI packets (respond to them with a fixed response instead of bridging them to the other side), which may be useful when used with a host that send custom HCI commands that the controller may not understand.
Usage
python hci_bridge.py <host-transport-spec> <controller-transport-spec> [command-short-circuit-list]
Examples
UDP to HCI UART
python hci_bridge.py udp:0.0.0.0:9000,127.0.0.1:9001 serial:/dev/tty.usbmodem0006839912171,1000000 0x3f:0x0070,0x3f:0x0074,0x3f:0x0077,0x3f:0x0078
PTY to Link Relay
python hci_bridge.py serial:emulated_uart_pty,1000000 link-relay:ws://127.0.0.1:10723/test
In this example, an emulator that exposes a PTY as an interface to its HCI UART is running as a Bluetooth host, and we are connecting it to a virtual controller attached to a link relay (through which the communication with other virtual controllers will be mediated).
NOTE: this assumes you're running a Link Relay on port 10723.
console.py
A simple text-based-ui interactive Bluetooth device with GATT client capabilities.