Skip to content

Add EQ support for QuietComfort Headphones (prince) - #36

Open
hieupm2096 wants to merge 1 commit into
aaronsb:mainfrom
hieupm2096:prince-eq
Open

hieupm2096 wants to merge 1 commit into
aaronsb:mainfrom
hieupm2096:prince-eq

Conversation

@hieupm2096

Copy link
Copy Markdown

Summary

  • The QuietComfort Headphones (prince, 0x4075) expose the same 3-band EQ register [1.7] as qc45/qc_ultra2/qc_earbuds, but the prince device config never declared eq, so bosectl/bmapctl reported EQ as unsupported on real hardware.
  • Adds the eq address to the Python, Rust, and C++ device configs, and marks EQ as verified in the docs.

Changes

  • python/pybmap/devices/qc_prince.py, rust/src/devices.rs, cpp/src/devices.h: declare EQ at Addr(1, 7) (parse_eq / build_eq_band).
  • Tests: new python/tests/test_qc_prince.py config suite, a Rust config assertion, and a C++ prince_has_eq test.
  • Docs: README device table and the docs/architecture.md quirks table now list 3-band EQ for prince; docs/quietcomfort-headphones-prince.md gains an EQ section and drops EQ from the unverified list.

Verification

Verified against real hardware: Bose QuietComfort Headphones, firmware 1.0.6-80+f5f219b.

  • [1.7] GET returns 4-byte groups [min, max, current, band_id], signed -10..+10 (read returned Bass +6 / Mid +5 / Treble +6).
  • [1.7] SETGET with [value, band_id] writes one band per packet; a write round-tripped through a subsequent read.
  • make test: Python 194 passed / 18 skipped, Rust 75 passed, C++ 64 passed.

Device Impact

  • QC Ultra 2
  • QC35
  • New device: QuietComfort Headphones (prince) — EQ
  • Other devices unaffected

Checklist

  • Python, Rust, and C++ implementations stay in sync
  • Tests pass (make test)
  • Protocol notes updated in NOTES.md (if applicable) — docs/quietcomfort-headphones-prince.md updated instead; NOTES.md [1.7] EQ section is device-agnostic
  • Architecture docs updated (if applicable)

The QuietComfort Headphones expose the same 3-band equalizer register
[1.7] as qc45/qc_ultra2/qc_earbuds, but the prince device config never
declared the feature, so bosectl/bmapctl reported EQ as unsupported.

Verified against firmware 1.0.6-80+f5f219b:
- GET [1.7] returns 4-byte groups [min, max, current, band_id], range -10..+10
- SETGET [1.7] with [value, band_id] writes one band per packet
- a write round-tripped through a subsequent read

Adds the eq address in the Python, Rust, and C++ device configs, a Python
config test, a Rust config assertion, and a C++ has_feature test. Updates
the README device table and the prince/architecture docs to list EQ as
verified instead of unverified.
@hieupm2096
hieupm2096 requested a review from aaronsb as a code owner September 12, 2026 10:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant