| # What is this? |
| |
| Rust wrappers around the [Bumble](https://github.com/google/bumble) Python API. |
| |
| Method calls are mapped to the equivalent Python, and return types adapted where |
| relevant. |
| |
| See the CLI in `src/main.rs` or the `examples` directory for how to use the |
| Bumble API. |
| |
| # Usage |
| |
| Set up a virtualenv for Bumble, or otherwise have an isolated Python environment |
| for Bumble and its dependencies. |
| |
| Due to Python being |
| [picky about how its sys path is set up](https://github.com/PyO3/pyo3/issues/1741, |
| it's necessary to explicitly point to the virtualenv's `site-packages`. Use |
| suitable virtualenv paths as appropriate for your OS, as seen here running |
| the `battery_client` example: |
| |
| ``` |
| PYTHONPATH=..:~/.virtualenvs/bumble/lib/python3.10/site-packages/ \ |
| cargo run --example battery_client -- \ |
| --transport android-netsim --target-addr F0:F1:F2:F3:F4:F5 |
| ``` |
| |
| Run the corresponding `battery_server` Python example, and launch an emulator in |
| Android Studio (currently, Canary is required) to run netsim. |
| |
| # CLI |
| |
| Explore the available subcommands: |
| |
| ``` |
| PYTHONPATH=..:[virtualenv site-packages] \ |
| cargo run --features bumble-tools --bin bumble -- --help |
| ``` |
| |
| Notable subcommands: |
| |
| - `firmware realtek download`: download Realtek firmware for various chipsets so that it can be automatically loaded when needed |
| - `usb probe`: show USB devices, highlighting the ones usable for Bluetooth |
| |
| # Development |
| |
| Run the tests: |
| |
| ``` |
| PYTHONPATH=.. cargo test |
| ``` |
| |
| Check lints: |
| |
| ``` |
| cargo clippy --all-targets |
| ``` |
| |
| ## Code gen |
| |
| To have the fastest startup while keeping the build simple, code gen for |
| assigned numbers is done with the `gen_assigned_numbers` tool. It should |
| be re-run whenever the Python assigned numbers are changed. To ensure that the |
| generated code is kept up to date, the Rust data is compared to the Python |
| in tests at `pytests/assigned_numbers.rs`. |
| |
| To regenerate the assigned number tables based on the Python codebase: |
| |
| ``` |
| PYTHONPATH=.. cargo run --bin gen-assigned-numbers --features dev-tools |
| ``` |