Skip to content

Switch 2 Pro Bluetooth receiver setup experiments

Historical record. This preserves the source, tests and limitations recorded at the time; it is not current setup guidance. See the documentation index.

Physical Bluetooth headphone playback remains unconfirmed and silent in the measurements below. Command acknowledgements, accepted GATT writes and passing software tests are not playback evidence. This ledger continues the preceding delivery experiments.

Authorization and exact runtime

The user approved the portable workflow and further setup/reverse-engineering work. One app-only reload occurred at 23:51 local on September 7. The exact old DS4Windows PID 32636 and DLL A9A373... were backed up to the Desktop lab's tools/b94-before-receiver-bridge before replacement. The old process received CloseMainWindow and was stopped only after the bounded exit wait. No installed Program Files copy, driver, Bluetooth bond, adapter identity or audio level was changed. Original VIIPER PID 30276 remained running.

  • Portable DS4Windows PID 34488, app DLL file version 5.0.4.95.
  • DLL SHA-256 6B1333921B85420086C9AB461751C00E2BEE8A253F30F00F3B7B41BE6B040375.
  • Apphost retained 0C1E2349C549B03EE51D9399EEBB802E0686C9F329FE1D8812095F09630EFBD4.
  • VIIPER retained 7B6B00CF3AC205549AF80692E45BD7785D3B8BC558A92D4FF5A1A61060592B78.
  • External b95 lab-client executable 4E14D373EB84F42D11F6CB5265080B092A743165552BD0E265A24634F0CDE301.
  • Runtime folder remains the existing Desktop lab's runtime/DS4Windows-current-2026-09-07-b93-bt-audio-lab; folder and apphost labels are historical, not the loaded DLL's identity.
  • The hash-pinned portable launcher was updated and VerifyOnly passed.

The user pressed A after the reload. At 23:52:50 the real Pro accepted the strict documented 0C/02 -> 0C/04, both mask 2F000000, and resumed controller input. All following experiments used the same generation 2 and same connection.

Reusable, constrained receiver-plan capability

ReceiverPlanProtocol: 1 adds finite setup plans to the existing local pipe; new setup order/parameters no longer require rebuilding DS4Windows. The existing input lease and command owner remain authoritative. No second GATT owner or arbitrary target UUID is exposed.

The closed vocabulary is documented 0C/02, 0C/04, 17/02, 18/01 and 18/03. Normal plans accept exact observed bytes only. Explicit experimental opt-in permits a bounded subset of unproven 17/02 parameter alternatives and 18/03 values; this is not a declaration of valid routing semantics. All commands, payload budgets, generation and actual audio MTU are checked before radio writes. Requests are copied before execution. Replies require exact headers, lengths, subcommand and applicable echo; failures fence the command lane without replay.

The command owner stays reserved through optional headphone packets and headset notification compensation. Cancelled waits retain actual Windows writes until completion. Restoration now attempts common05 after headset-disable completes or faults, without overlapping the writes. Shared server/client result validation rejects missing cleanup, nested audio failures and partial packet counts; a failed receiver plan invalidates prior audio-setup admission. Every receiver trial, including command-only plans, requires explicit Realtek Line In measurement.

Release x64 verification of this source: 4,114 passed, zero failed, 11 opt-in skips, including all 148 allocation-related tests. Final focused set: 145 passed. TRX: b95-receiver-final-full.trx and b95-receiver-final-focused.trx. The final full run built file version 5.0.4.95; the deployed app DLL hash matches that tested build. Client publish passed with the two pre-existing shared rumble-code nullability warnings only.

Physical sequence and outcomes

Only the user-confirmed Pro AUX-out to Realtek Line In is captured, float/stereo 48 kHz, unchanged unmuted scalar 1. Samples remain bounded in RAM and are discarded. Each trial uses at least 16,800 real baseline frames plus at least 96,000 real post-response frames. All eight captures below were valid, with zero clipping, overflow, nonfinite samples or dropped frames. No test frequency emerged above the baseline/background floor; post-submission peaks remained below 0.001.

The source is 500 ms of quiet 440 Hz left / 660 Hz right, peak 0.005, 10 ms fades, and 100 ms trailing silence. Raw 5 ms stereo Opus at 80 kbps has 120 packets of 50 bytes; raw 20 ms stereo at the same bitrate has 30 packets of 200 bytes. Frame format and numerical setup interpretations remain hypotheses.

Local time Intervention Result
23:53:52 Normal reports; 18/01, exact 17/02, raw 5 ms stereo Both ACKs; 120 sends; quiet negative
23:54:42 Add observed 18/03=07, query; identical payload, no repeated 17 Exact echo; state query unchanged; quiet negative
23:55:01 Enable headset notifications, query; identical payload 120 sends; both restores successful; quiet negative
23:55:24 Headset notify before exact 17/02, 18/03=07, query All ACKs; both restores successful; quiet negative
23:57:52 Keep 17 value 240 and 18 value 07; switch payload to raw 20 ms stereo 30 sends; quiet negative
23:58:14 Change only proposed frame field from 240 to 960 (C003 little-endian) ACK; identical 20 ms payload; quiet negative
23:58:38 Exact 17 value 240; experimental 18/03=05; raw 5 ms stereo Exact 05 echo; query unchanged; quiet negative
00:00:03 Explicit documented 17 and 18/03=07; adjacent-report 33-zero-byte + length envelope around same 5 ms source 120 sends; quiet negative

These are sequential interventions, not independent fresh-state baselines. 18/03 persistence and inverse are unknown; 00 was not used as invented cleanup. The final trial explicitly used observed 07 rather than assuming a reset. The 05 test was motivated by the documented input states for headphones (05/0D) versus a headset (07/0F); applying that distinction to command 18 is an inference, not established semantics.

Every 18/01 reply was 1801010110780000000040F000006000. Exact 17/02 ACK was 1701010210780000; 18/03 echoed 07 or 05 as sent. Unchanged query bytes do not prove unchanged routing.

The new feature initialization has a separate verified effect: headset reports now contain motion lengths 30/40/4, instead of the previously observed MotionLength=0. Headset notifications temporarily replace common05 input in this lab mode. All restores succeeded and reports advanced afterward; the largest accumulated report gap was 765.2614 ms during a deliberate headset window. At 00:00:06 the same Pro had 28,889 reports and current report age 3.3277 ms. This is not production input/audio coexistence: ControlsForwarded=false.

The motion-length-4 reports are rejected by the current controls-only diagnostic parser, exactly explaining e.g. 14 missing controls decodes out of 127 otherwise valid headers. This length is consistent with the variant in independent donor research: pinned switch2mac capture analysis. The donor interprets it as a no-new-record marker; our length-only observations do not independently verify its payload, counters or flag semantics. A narrowly scoped future parser correction can admit 4 while leaving the packed motion opaque. It is not necessary to reload this probe or evidence of playback.

Local raw numeric evidence remains in the Desktop lab's tools/b95-receiver-*.jsonl; reviewed JSON plans are in tools/b95-receiver-plans-g2. No microphone payload, raw ETL/HCI, pairing key, or PCM recording was persisted.

Remaining acceptance gates

Actual identifiable stereo output, repeatable start/stop, no clipping and continuous ordinary input/motion alongside audio remain open. The new trials did not isolate the remaining codec/envelope/setup requirement. Previous format negatives were measured before the new Pro feature startup and 18/03 intervention, so they cannot conclusively eliminate those formats in this newly established state. No gain increase, arbitrary command sweep or additional app restart followed these negative results.

Two additional host-traced, current-setup trials

The input idle prefix F8 FF FE describes a standard Opus fullband mono 20 ms packet, not 5 ms stereo; see RFC 6716 section 3.1. The existing generator test checks that its mono 20 ms / 20 kbps source has a 50-byte packet with TOC F8, retains a quiet decoded 440 Hz signal and ends in silence. This motivates two candidates but does not prove that the controller's headphone output shares its input codec or envelope.

With the same active generation, 17/02 returned to its documented 2/240 bytes, 18/03 explicitly at 07, and temporary headset notifications:

Local time Payload Exact host payload matches Host output span Line In
00:04:39 Mono 20 ms / 20 kbps Opus, raw 50 bytes 30/30 580.6489 ms Valid quiet negative; peak 0.00084618
00:05:12 Identical source with 33-zero-byte + length prefix, 84 bytes 30/30 580.4294 ms Valid quiet negative; peak 0.00083387

Both traces bound only controller link 512 through its exact 18/01 request on command attribute 20. No ETW loss, mismatched payload, or pending reassembly was reported. Both complete host-delivery flags were true; these are host HCI observations, not proof of radio reception, codec acceptance or DAC playback. Both headset/common05 restores succeeded. The capture tail contained 96,000 and 96,480 actual frames respectively, with zero clipping or invalid capture reasons. The two trace sessions stopped normally; no raw trace or PCM file was recorded.

Evidence: Desktop lab tools b95-trace-mono20-raw-20260908-000439-893.jsonl and b95-trace-mono20-prolen-20260908-000512-747.jsonl. The first audio-plan fingerprint is 38C4258D08120B528FB8F2C949353F6F00C2EB005A6A6D81BDA8233BAFCD6262; the second is 8258C41BD7DE5CA417CC5BE17B14D2E4D01DE99CFA6C6E246210E9AF0D9F087E.

At 00:07:36, the same app and Pro generation remained connected: 58,786 reports, 11.5949 ms current report age, unchanged historical 765.2614 ms maximum from the deliberate lab headset windows. VIIPER remained untouched. The source checkpoint for the reusable receiver bridge is a34df03; there was no further app rebuild or reload during the ten hardware trials.

The remaining discriminator is a working controller-origin/output protocol reference or a measurement that identifies the missing receiver/codec/envelope requirement. Ten valid negative trials under corrected feature startup do not establish impossibility, and they do not justify calling this production audio.

New reference-capture option, not executed

Authenticated GitHub code search of the exact headphone UUID found four files in three repositories; the headset UUID found sixteen files in eight repositories. The exact spaced 17/02 request and payload produced no hits. No working physical Pro Bluetooth headphone decoder emerged. A newly found ESP32 controller emulator offers a plausible alternative capture endpoint, not a ready audio solution.

Its source implements Nintendo's address/key exchange and NimBLE security-store integration. A successful emulator endpoint could therefore observe decrypted console-origin application packets without a passive Bluetooth sniffer. This requires a separate compatible development board and the user's Switch 2 console; it cannot run on this Windows PC alone. The author reports C61 fully tested, C6 basic-tested and patched S3 basic-tested, using ESP-IDF 5.5.2+ (tested 5.5.3). Those are upstream claims, not our verified hardware results; see its hardware requirements.

As shipped it reports no headset, produces no dedicated headset notifications, rejects headphone handle 002c writes, and returns an empty 18/03 reply instead of the documented echo. 17/02 receives a generic empty success ACK. A capture prototype would need documented headset prerequisites plus bounded headphone/ 17/18 request logging and USB/UART export. Existing key-debug logging must be disabled; pairing keys, unrelated traffic and voice payloads must be excluded. Instrumenting its current write callback alone is not enough to establish that the console will start or sustain audio.

No emulator board is known to be available, and no matching connected Espressif/ common USB-serial development-board device was found in the limited read-only inventory. No emulator was built/flashed, console pairing changed, hardware purchased, or current controller connection handed off. Hardware availability is the next user-dependent input for this reference-capture path.