mirror of
https://github.com/google/bumble.git
synced 2026-04-18 00:45:32 +00:00
Following up on the [loose end from the initial PR](https://github.com/google/bumble/pull/207#discussion_r1278015116), we can avoid accessing the Python company id map at runtime by doing code gen ahead of time. Using an example to do the code gen avoids even the small build slowdown from invoking the code gen logic in build.rs, but more importantly, means that it's still a totally boring normal build that won't require any IDE setup, etc, to work for everyone. Since the company ID list changes rarely, and there's a test to ensure it always matches, this seems like a good trade.
56 lines
1.6 KiB
Markdown
56 lines
1.6 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 `examples` directory for usage.
|
|
|
|
# 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.
|
|
|
|
# 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 bumble-dev-tools
|
|
``` |