Repository navigation
ULT WEAR: Bass Control (ULT mode + Clear Bass), EQ slot fix, product image - #35
Open
abhishekchotaliya wants to merge 2 commits into
Open
abhishekchotaliya wants to merge 2 commits into
abhishekchotaliya wants to merge 2 commits into
Conversation
Adds Sound Connect's "Bass Control" for the WH-ULT900N: the ULT mode the headset's ULT button cycles (Off / ULT 1 / ULT 2) and the Clear Bass slider, in a new card above the Equalizer (macOS window, menu-bar panel, ImGui GUI). Protocol: EQ inquired type 0x03 (PRESET_EQ_AND_ULT_MODE, framing from mos9527/SonyHeadphonesClient's Sound Connect codegen): GET 56 03 -> RET 57 03 <preset> <ult> 06 <clear bass> <400..16k> (+10 bias) SET 58 03 <preset> <ult> <count> <bands> Verified on a ULT WEAR (fw 2.1.0). It also showed that this model's 56/58 00 equalizer slots are shifted by one: the slider labelled 400 drove Clear Bass, the Bass slider did nothing and 16k was unreachable. On the ULT WEAR the equalizer is now read and written through 56/58 03 instead. ULT WEAR only: _isUltWear() (v2 + model name, like _isWh1000Xm6()) gates the only sender of 56 03, every 58 03 write needs an answered 56 03 first, and the shared EQ functions just hand off to the ULT helpers. Other models never see the inquiry and keep the 56/58 00 equalizer unchanged (covered by tests). ULT and Clear Bass writes re-read 56 03 first and send the headset's own preset, ULT mode and bands back unchanged, so they never revert an EQ change made elsewhere. The 2 s poll follows the physical ULT button and Clear Bass changes made in the phone app. Copy diagnostics includes the raw 56 03 exchange. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Adds Sony's official Off White ULT WEAR render (from the sony.co.uk product page's scene7 asset Product-Intro-white_standard_M1, transparent PNG), trimmed to its content and scaled to 285x435 to match the other renders. The headset advertises itself as "Sony ULT WEAR", not by model number, so both GUIs map names containing "ULT WEAR" or "ULT900" to wh-ult900n. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds Sony's Bass Control for the ULT WEAR (WH-ULT900N): the ULT mode the headset's ULT button cycles (Off / ULT 1 / ULT 2) plus the Clear Bass slider, in the same place Sony's app shows them. Adds the ULT WEAR product image too.
Protocol: EQ inquired type
0x03(PRESET_EQ_AND_ULT_MODE, framing from mos9527/SonyHeadphonesClient's Sound Connect codegen):Testing on real hardware also showed that the ULT WEAR's
56/58 00EQ slots are shifted by one: the slider labelled 400 drove Clear Bass, the Bass slider did nothing, and 16k was unreachable. On this model the EQ is now read and written through56/58 03.ULT WEAR only. One gate, same pattern as
_isWh1000Xm6():The 2 s poll follows the physical ULT button and Clear Bass changes made in the phone app. "Copy diagnostics" now includes the raw
56 03exchange.Evidence
57 03 a0 01 06 11 0c 08 0b 0d 0f. Sony's app showed Clear Bass ≈ +6/+7 and 400…16k = +2 −2 +1 +3 +5, which matches the clear-bass-first decode. The old path had shown 400…16k = +7 +2 −2 +1 +3 with Bass 0. After the change: ULT 1/2/Off switch audibly, the ULT button is reflected in the app, Clear Bass changes bass punch, and the product image shows in the header. This was tested with a Command Line Tools build; Xcode itself wasn't used, so CI'sxcodebuildis the first real Xcode build.Client/tests/run-macos.sh, all passing), new cases inHeadphonesProtocolTests.cpp:56 03, never56 0058 03 a0 <ult> 06 <cb> <bands>; ULT / Clear Bass writes re-read first and echo everything else verbatimshouldDisconnect)56 03: never sent56 03/58 03, no ULT/Clear Bass control, custom EQ still58 00 a0 06 <cb> <bands>Merge Danger
Door: two-way
Pure client feature: reverting the PR restores the old behaviour, and no persisted app state changes.
Blast Radius: ULT-only
Other models' EQ, DSEE and multipoint code paths are unchanged: their only shared-code change is a one-line ULT gate that is false for them, and tests cover it. Two things on the ULT WEAR: (1) its Manual EQ sliders now show the correct bands, so they'll read differently from before; (2) the ULT controls depend on the Bluetooth name containing "ULT WEAR" / "ULT900", so a renamed headset falls back to the old EQ path. The XM6 equalizer and the product images already depend on the name in the same way.
🤖 Generated with Claude Code