Skip to content

Releases: aaronsb/bosectl

v0.1.1 — Device Catalog & Binaries

07 Apr 13:15
c98106c

Choose a tag to compare

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 statusbosectl status / bmapctl status now shows device model as first line
  • Fixed product ID mappings — removed incorrect 0x400C (SoundLink AE II), added 0x4017 (QC35 original)
  • Architecture documentationdocs/architecture.md with 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 SHA256SUMS

Install

chmod +x bmapctl-rust-linux-x86_64
sudo cp bmapctl-rust-linux-x86_64 /usr/local/bin/bmapctl
bmapctl status

Python 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

07 Apr 12:45
c933a3c

Choose a tag to compare

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 install ready, includes bosectl CLI
  • Rust (bmap) — type-safe with Transport trait 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 ANC

What'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++