Releases: aaronsb/bosectl
Releases · aaronsb/bosectl
v0.1.1 — Device Catalog & Binaries
Changes since v0.1.0
- Device catalog module — authoritative registry of all known BMAP-capable Bose devices (14 devices) with
lookup_device(),usb_ids(),modalias()APIs across all three libraries - Model name in status —
bosectl status/bmapctl statusnow shows device model as first line - Fixed product ID mappings — removed incorrect 0x400C (SoundLink AE II), added 0x4017 (QC35 original)
- Architecture documentation —
docs/architecture.mdwith Mermaid diagrams covering all layers - Discovery uses catalog — single source of truth for PID → config mapping; adding a new device is one catalog entry
Binaries
Pre-built Linux x86_64 binaries for the CLI tools:
| File | Description |
|---|---|
bmapctl-rust-linux-x86_64 |
Rust CLI (513 KB, statically linked) |
bmapctl-cpp-linux-x86_64 |
C++ CLI (244 KB, requires libbluetooth) |
SHA256SUMS |
SHA-256 checksums for verification |
Verify
sha256sum -c SHA256SUMSInstall
chmod +x bmapctl-rust-linux-x86_64
sudo cp bmapctl-rust-linux-x86_64 /usr/local/bin/bmapctl
bmapctl statusPython library (pybmap) is not packaged as a binary — use PYTHONPATH=python python -m pybmap.cli or install via pip when published.
v0.1.0 — First Release
bmap v0.1.0
Control Bose Bluetooth headphones from Linux — no app, no cloud, no account.
Libraries in Python, Rust, and C++ implementing the BMAP (Bose Media Application Protocol) over Bluetooth RFCOMM.
Supported Devices
| Device | Noise Control | EQ | Spatial | Profiles | Buttons |
|---|---|---|---|---|---|
| QC Ultra Headphones 2 | CNC 0-10 slider | 3-band | room/head | 7 custom slots | Shortcut remap |
| QuietComfort 35 / 35 II | ANR off/high/wind/low | — | — | — | Action remap (VPA/ANC) |
Features
- Auto-detection — discovers paired Bose devices via Bluetooth SDP, identifies model from Modalias
- Full settings control — noise cancellation, EQ, sidetone, multipoint, voice prompts, device name
- Custom audio profiles — create, modify, delete, and switch between profiles (QC Ultra 2)
- Button remapping — remap programmable buttons to ANC, VPA, play/pause, etc.
- Mode switching — instant switch between Quiet, Aware, Immersion, Cinema modes
- No authentication required — uses SETGET/START operators which bypass Bose's cloud ECDH auth
Libraries
All three libraries share the same architecture (docs/architecture.md):
- Python (
pybmap) —pip installready, includesbosectlCLI - Rust (
bmap) — type-safe withTransporttrait for testing - C++ (
bmap) — mostly header-only, CMake build
Quick Start
import pybmap
with pybmap.connect() as dev:
print(dev.battery()) # 80
print(dev.name()) # "Fargo"
dev.set_anr("high") # QC35: full noise cancellation
dev.set_buttons(0x10, 4, 2) # Remap Action button to ANCWhat's New Since Development Started
- Smart device discovery with auto-detection
- QC35 support (RFCOMM channel 8, init packet, ANR modes)
- Button remapping via SETGET [1.9] — verified on live hardware
- QC35 block 3 NC investigation (documented, binary toggle only)
- Error code 15 (InvalidTransition) support
- Architecture documentation with Mermaid diagrams
- Full test suites: 100 Python, 53 Rust, 43 C++