Skip to main content

BITalino Bluetooth/serial driver with Python bindings (PyO3, abi3).

Project description

bitalino-rs

Rust driver and Python bindings for BITalino biosignal acquisition devices. This project opens RFCOMM connections to pre-paired devices with a minimal libc-based stack, exposes a safe Rust API, and ships Python wheels for easy use in data pipelines.

Quick Links

  • Docs: tleygue.github.io/bitalino_rs (published via GitHub Pages; sources in docs/)
  • Python package: bitalino_rs (built with maturin, published from tags)
  • Crate: bitalino-rs (Rust library)

Features

  • Connect to BITalino over Bluetooth without root privileges (expects device is pre-paired/trusted).
  • High-level Rust API plus generated Python bindings via PyO3/maturin.
  • Timing-aware reads with sequence numbers, CRC tracking, and batch timestamps.
  • Minimal dependencies; Ubuntu support verified in CI.

Project Layout

  • src/ – Rust library (Bluetooth, driver, Python bindings)
  • bitalino_rs/ – Python package stub for maturin builds
  • docs/ – User/developer docs (mkdocs)
  • .github/workflows/ – CI, release, PyPI publish

Install

Python (from PyPI, when released)

uv pip install bitalino-rs

Python (from source)

Requirements: Rust (stable), Python 3.11+.

# in repo root
uv sync

Rust crate (from source)

cargo build --release

Usage

Rust

use bitalino_rs::{Bitalino, SamplingRate};

fn main() -> Result<(), Box<dyn std::error::Error>> {
		let mut dev = Bitalino::connect("7E:91:2B:C4:AF:08", "1234")?;
		dev.start(SamplingRate::Hz1000 as u16, Some(vec![0, 1, 2]))?;
		let frames = dev.read_frames(100)?;
		println!("read {} frames", frames.len());
		dev.stop()?;
		Ok(())
}

Python

from bitalino_rs import Bitalino

dev = Bitalino.connect("7E:91:2B:C4:AF:08")
dev.start(rate=1000, channels=[0, 1, 2])
batch = dev.read_timed(200)
print(batch.timestamp_us, batch.sequence_gaps)
dev.stop()

Development

  • Rust toolchain: rustup toolchain install stable (CI uses stable with rustfmt/clippy)
  • System deps (Linux): sudo apt-get install -y pkg-config libdbus-1-dev libudev-dev
  • Lint/format: pre-commit run --all-files
  • Commit style: Conventional Commits (checked in CI)
  • Tests: cargo test --all-features --all-targets

Logging

  • Default level: info. Override with BITALINO_LOG=debug (falls back to RUST_LOG if unset).
  • Rust binaries: call bitalino_rs::init_rust_logging() once (idempotent).
  • Python: logging is wired on import; adjust from Python with bitalino_rs.enable_rust_logs("debug") or clear caches with bitalino_rs.reset_log_cache() after reconfiguring Python logging.

License

Apache License 2.0. See LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

bitalino_rs-0.2.1-cp39-abi3-manylinux_2_28_x86_64.whl (441.1 kB view details)

Uploaded CPython 3.9+manylinux: glibc 2.28+ x86-64

File details

Details for the file bitalino_rs-0.2.1-cp39-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for bitalino_rs-0.2.1-cp39-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 70d3de2cf834a877512aef4fe2d1a84861265b7169fa877e86c7220d84507c4b
MD5 32e7eedb1da9c55b33170871415e578f
BLAKE2b-256 6466226ab5a927a95c30c93a6988647e4ce4d6866d82095be44401cd522a0473

See more details on using hashes here.

Provenance

The following attestation bundles were made for bitalino_rs-0.2.1-cp39-abi3-manylinux_2_28_x86_64.whl:

Publisher: release.yml on tleygue/bitalino_rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page