---
phase: 12-steamvr-ipd-slider-ui
plan: 02
status: complete
started: "2026-03-28T11:30:00.000Z"
completed: "2026-03-28T12:15:00.000Z"
---

## Summary

Added SteamVR settings tab IPD slider via companion resourceOnly driver (BeyondProximityUI). Track B native slider (IpdUIRange properties, component-based probing) was attempted but does not produce a visible slider — SteamVR only shows native IPD for HMDs with physical IPD motor/sensor. Track A settings tab works reliably.

## Key Findings

- **Track B (native slider)**: Properties accepted (err=0) but no slider appears. Lighthouse config `ipd.enable` field also tested — no effect without firmware IPD motor support.
- **Track A (settings tab)**: Works via resourceOnly companion driver. Requires `show_without_hmd: true` and plain string title (not localization ref). Driver must be registered separately from the main DLL driver because SteamVR only scans settings for resourceOnly drivers or drivers that own devices.
- **IPD sync**: ApplyIpd writes to VRSettings so slider reflects current IPD regardless of source (VREvent, pipe command, or slider itself).

## Tasks

| # | Task | Status | Commit |
|---|------|--------|--------|
| 1 | Create Track A settings resources and add settings polling | Complete | fe916ef |
| 2 | Deploy and verify IPD slider in SteamVR | Complete (human verified) | 2995390 |

## Deviations

- Required companion resourceOnly driver (BeyondProximityUI) — settingsschema in the main driver directory is ignored by SteamVR because the driver has "no suitable devices"
- Title changed from localization ref `#{BeyondProximity}Settings_Title` to plain string "Bigscreen Beyond"
- Added `show_without_hmd: true` to schema (discovered from Shiftall driver reference)

## Key Files

### Created
- driver/BeyondProximityUI/driver.vrdrivermanifest
- driver/BeyondProximityUI/resources/settings/settingsschema.vrsettings
- driver/BeyondProximityUI/resources/localization/localization.json
- driver/BeyondProximity/resources/settings/settingsschema.vrsettings
- driver/BeyondProximity/resources/settings/default.vrsettings
- driver/BeyondProximity/resources/localization/localization.json

### Modified
- src/driver/device_provider.h (m_fLastSettingsIpd member)
- src/driver/device_provider.cpp (settings polling in RunFrame, ApplyIpd VRSettings sync)
- scripts/deploy_driver.ps1 (resources copy, companion UI driver deploy)

## Self-Check: PASSED
- [x] Settings tab visible in SteamVR as "Bigscreen Beyond"
- [x] Slider changes IPD in real time
- [x] IPD value syncs on startup (not zero)
- [x] Pipe command coexists with slider
- [x] Build succeeds
