Skip to content

v0.3.3 — Bluetooth keepalive + stall self-heal

Choose a tag to compare

@countlessbats countlessbats released this 08 Jul 06:32

Bluetooth "haptics go dead" fix

Completes the wireless fix started in v0.3.2. That release stopped the
rapid reconnect loop, but some Bluetooth DualSense setups still lost
haptics after a while: the startup chime worked, then everything went
silent — test chime included — with a clean-looking log. Cause: some BT
audio stacks idle the link when the stream is digitally silent for long
enough, and never resume rendering.

What changed — three layers:

  • Keepalive — the bridge now mixes an imperceptible pilot tone
    (100 Hz at −56 dBFS) into the haptic channels so the stream is never
    digitally silent and the Bluetooth link never idles. Disable with
    --no-keepalive if you ever need to.
  • Stall detection that can't misfire — the watchdog now monitors the
    device's hardware render clock, which always advances while audio is
    playing (even silence). If it freezes for ~3 seconds the endpoint has
    genuinely stopped consuming audio, and the bridge reopens the session
    (render clock frozen in the log).
  • Gentle recovery — if an endpoint keeps re-stalling, reopen attempts
    back off (2s → 30s) instead of hammering it every few seconds, and
    reset once a session stays healthy for a minute.

Also fixed: a stall during the startup chime could previously hang the
bridge's audio engine.

Log check: a healthy 0.3.3 session shows
Output: timer-driven, 100 ms latency, keepalive on and no
Reopening audio session lines. An occasional render clock frozen
reopen is the self-heal working.

Reminder for wireless users: if the tray dot is gray / no chime, DSX
isn't running or its BT Audio/Haptics toggle is off — Windows only
exposes the controller's audio endpoint while that's active.

Install: unzip over your Silksong folder, or replace both
BepInEx/plugins/SilksongPS5Haptics/SilksongPS5Haptics.dll and
BepInEx/plugins/SilksongPS5Haptics/HapticsBridge/HapticsBridge.exe.