forked from auracaster/bumble_mirror
72 lines
2.0 KiB
Markdown
72 lines
2.0 KiB
Markdown
# 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
|
|
```
|