Commit Graph
123 Commits
Author SHA1 Message Date
matzmanandClaude Opus 5.5 317db6831d Use the OpenVR SDK's bin/linuxarm64 library on aarch64
On the Steam Frame, VR_Init failed with "Installation path could not be
located": the SDK's lib/linuxarm64/libopenvr_api.so (2.15.6) reads the VR
path registry from the fixed path /data/work/openvrpaths.vrpath instead
of ~/.config/openvr. The SDK's bin/linuxarm64 library of the same version
uses ~/.config/openvr; the vrdashboard template ships it and was verified
on the Frame. It is added as a new file (third-party/openvr had no
bin/linuxarm64, and "bin" is gitignored, hence force-added), and aarch64
builds link against and ship it. x86_64 and Windows are unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 23:13:47 +02:00
matzmanandClaude Opus 5.5 537539ab5e Run the manifest commands without a display
The first deploy to the Steam Frame aborted in install.sh: OVRAS creates
its QApplication before it handles --force-install-manifest, and Qt's
default platform plugin (xcb) aborts when there is no display, as over
SSH. Registering and unregistering draw nothing, so the generated
install.sh and uninstall.sh now run them with QT_QPA_PLATFORM=offscreen.
The normal start keeps DISPLAY=:0, as rendering needs a real context.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 23:08:10 +02:00
Matthias JanetschekandClaude Opus 5.5 7c5a9a7a1e Handover documentation for continuing on another computer
- docs/steamframe/README.md: entry point with status, branches/remotes, setup,
  commands, Steam Frame facts, open points.
- CLAUDE.md: working rules and code conventions (fork-only).
- docs/steamframe/OVRAS-FEATURES.md: OVRAS's features, how they are
  implemented, issues found while reading.
- PROGRESS.md: status and wrap-up.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 14:57:20 +02:00
Matthias JanetschekandClaude Opus 5.5 3ed686dec5 Read the version from build_scripts/compile_version_string.txt
The CMake build had the version hard-coded as 5.7.4, while the qmake build
read it from compile_version_string.txt (5.8.17-release). The stale number
also made the version check report an update. As in the qmake build, the
full string becomes APPLICATION_VERSION and its numeric part the project
version.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 14:41:12 +02:00
Matthias JanetschekandClaude Opus 5.5 bde675f1b8 Steam Frame build, packaging and deployment scripts; render test
- build_scripts/steamframe/: Debian trixie (Qt 6.8) containers for the
  aarch64 cross build, native build and tests; toolchain; scripts to build,
  test (Vulkan validation layers), package (system Qt, ~3 MB) and deploy over
  SSH. Adapted from the vrdashboard template.
- test/render/: render test for the OpenGL and Vulkan backends, driven like
  OverlayController (option OVRAS_BUILD_TESTS).
- RPATH only $ORIGIN, without the build machine's link directories.
- Ignore dist/.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 13:50:57 +02:00
Matthias JanetschekandClaude Opus 5.5 b22c35ae29 Manifest for Linux; connect as Background app where Utility is refused
- manifest.vrmanifest: binary_path_linux and binary_path_linux_arm. The
  Steam Frame's SteamVR reads only binary_path_linux_arm.
- handleManifests(): connect as Utility app first (works without a running
  SteamVR, e.g. from the Windows installer); if SteamVR refuses Utility apps,
  as on the Steam Frame, connect as Background app. Fail right away on other
  errors instead of going through initializeOpenVR()'s retry loop.
- main(): check --graphics-api before connecting to OpenVR, so a wrong value
  fails right away.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 13:42:16 +02:00
Matthias JanetschekandClaude Opus 5.5 4826686a4d Render through public Qt API: OpenGL and Vulkan backends, --graphics-api
Replace the QRhi rendering in OverlayController (private Qt API) with the
render backends of the vrdashboard template (src/render/), which use public
Qt API only (QQuickRenderTarget::fromOpenGLTexture / fromVulkanImage). The
binary then runs on another Qt 6 patch release, e.g. the Steam Frame's system
Qt.

The Vulkan backend also does what SteamVR requires and the QRhi path lacked:
the required instance/device extensions and the HMD's GPU (via
openvr_init::renderInterop()), VK_FORMAT_R8G8B8A8_UNORM, and the transition to
TRANSFER_SRC_OPTIMAL after each frame.

- New option --graphics-api opengl|vulkan (default opengl, no fallback).
- Shutdown() calls VR_Shutdown before the render target and Qt's device go
  (crash on the Steam Frame with Vulkan otherwise); it runs only once.
- Mouse y is flipped on every platform: SteamVR reports it in GL convention.
- Render delay 5 -> 16 ms (about 60 fps).
- GuiPrivate is no longer needed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 13:41:13 +02:00
Matthias JanetschekandClaude Opus 5.5 423ea57db7 Add a Steam Frame build option; no chaperone commit at start; timer-based tick
- CMake option OVRAS_STEAM_FRAME. It is evaluated only in
  src/utils/platform_capabilities.h, which turns it into named capability
  constants and platform defaults.
- Where the chaperone can't be committed (Steam Frame: it shifts the play
  area), MoveCenterTabController no longer commits the working copy at start-up
  or when applying reset data, and doesn't create the init autosave profile.
  Skips are logged once.
- In "vsync disabled" mode the pump timer now runs directly at the custom tick
  rate instead of firing every 1 ms and counting. The Frame defaults to this
  mode at 11 ms (~90 Hz).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 13:35:46 +02:00
Matthias JanetschekandClaude Opus 5.5 266a2f9ce9 Fix the Linux build of the qt6 branch, compile QML to bytecode only
- Remove Core5Compat (unused, not part of the Steam Frame's system Qt).
- Request GuiPrivate explicitly (required since Qt 6.10 for QRhi); temporary
  until rendering moves to public API.
- Compile QML to bytecode only: C++ generated from QML uses private Qt API
  that only matches the exact Qt version it was built with.
- Pick the OpenVR library per architecture (linux64, linuxarm64, win64) for
  linking and for the copy next to the binary; RPATH $ORIGIN.
- Link libXtst, needed by input_sender_X11.cpp.
- Include d3d11.h and handle QRhi::D3D11 only on Windows.
- Replace leftover easylogging LOG(INFO) calls with qInfo().

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 13:29:53 +02:00
Matthias JanetschekandClaude Opus 5.5 aac3edf7e3 Steam Frame port: requirements and design of iteration 1
Internal fork based on upstream's qt6 branch (2d4db7e). Goal: OVRAS runs
natively on the Steam Frame (SteamOS, aarch64) with a minimal change set
against qt6 and only public Qt API.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 13:29:53 +02:00
ykeara ec865f5127 5.8.6 (#661)
* add delay if interface not found

* adjust initialization behavior

* pushed for debugging reasons for concerned parties

* comment out simple recenter

* remove old style motion, some minor optimizations

* optimize default case check

* optimized default condition

* change manifest install behavior to trigger on desktop mode as well

* add desktop mode binding launch

* add tracker overlay option to utils

* commit to check status

* attempt to fix native LH issues with chaperone when exiting

* add desktop mode toggle and some cleanup

* remove adjust chaperone

* remove clang format from ci, increment version, cleanup

* update circle ci

* fix conversion warning

* add F13-19 to keyboard parser

* add additional logging around failure to initialize

* add unsaved changes

* update version 5.8.1

* fix some collisions in enum declaration

* add controller powers on steamvr, and no HMD to steamvr tab, increment version

* slightly alter drag movement, fix qml issue

* code cleanup

* fix logspam/attempt to delete non existant overlays

* increment version 5.8.3

* add zero-offset to true as potential edge case fix

* remove dead code in qml

* fix both brightness sliders to be uniform .05 minimum via set, and .2 minimum via slider

* attempt to fix recenter, and fix floor

* further space drag/recenter improvements

* get rid of old code

* increment version 5.8.6

* remove old commented code settings page

* update documentation

* re-add mistakenly removed line
2024-02-27 18:03:22 -06:00
ykearaandJames R 65b5aace06 5.6.2 (#612)
* add nlhomann json header

* add get scene app fn

* add get current binding and related logic

* add save binding file to settings folder

* apply binding fn added fixed uid bug

* add button logic to QML, add enable Bind Setting

* add finding logic for all custom bind

* fix minor qml issues

* fix get controllername bug, fix bug with save bind

* fix regex issue

* change webrequest for selectconfig

* change to properly urlify path to send

* fix race condition web requests

* change steamvr tab qml formatting

* change color scheme

* change colors of icons to text color

* change bind qml better for better ux

* add possible workaround for space drag issues

* add deact color to pushbutton

* increment version

* adjust button size in movecenter

* move nlhomann json

* fix PKGBUILD to include missing dependency (#606) (#613)

It turns out qt5-websockets needs to be included for a successful build.

Co-authored-by: James R <71466513+ColdIce1605@users.noreply.github.com>

* fix warning

* improved logging messages around perapp bindings

* improve getsceneappID logging

* add HMD based controller Finding

* improve logging controller name

* change logging around initial chaperone calibration

* increment version

* improve logging/error handling around sceneappid failures

* added fallback for getting scene app by pid

* update version string

* update documentation

Co-authored-by: James R <71466513+ColdIce1605@users.noreply.github.com>
2022-07-28 16:44:22 -05:00
ykeara a97a04efbc 5.5.0 Pairing, Universe Restriction Removal, space drag multiplier (#595)
* add Select Dongle Pairing, fix clipping on long SN names (quest)

* remove test log, add ws log, add pair protection non steamvr

* add missing install commands for new qt modules

* remove bad package

* add auto apply chaperone option, remove old seated/uncal/openxr fixes in favor of always on

* adjust battery overlay for tundras

* fix tundra tracker bat indicator positioning, remove offset page restrictions from non-standing universe, make pairing more responsive and display brief instructions

* add Drag Multiplier

* update documentation

* change version to release

* update readme

* fix format issues readme

* update readme with setting description

* change uid to prevent collision

* changed rounding for grav fling to 2 decimals to be consistand with other values on drag page
2022-04-12 18:07:25 -05:00
ykearaandTheMrGong eea713429d 5.4.0 Raw Restriction Setting, Apply Offsets (#577)
* Crash Recovery Defaults to Off, add option to use space drag w/ uncalibrated playspace

* increment version 5.3.3

* Feat/apply offsets binding (#576)

* add apply offsets steamvr input

* add new binding to Readme

Co-authored-by: TheMrGong <gongora656@gmail.com>

* increment version 5.4.0

* added LH Console Interface class, WIP TX/RX list via lh console

* switch over to property based dongle information

* add ovr system wrapper

* add use of parameter to avoid warning as error

* openXR fix, and Change Display State of Chaperone Disabled

* update text

* format files

* clang 9.0.0 format

* add documentation update

* remove windows header include

* remove filesystem header

* fix uncal motion switching issue

Co-authored-by: TheMrGong <gongora656@gmail.com>
2022-02-23 16:06:03 -06:00
Vasily Utkin 522ba46ac6 Add qt5-quickcontrols package to required for Arch 2021-12-30 16:41:53 +01:00
ykeara 565d25ea15 No Render Fix, Color/Brightness Sort Order, readme adjustment (#550)
* Adjust Brightness/Color Overlay Sort Orders for better app complienc

* No Overlay Render Attempt fix

* change readme update version string
2021-02-26 17:34:44 -06:00
Vasily Utkin 5a7fe687d8 Remove warnings-as-errors by default
Compiling C++ on various different platforms with as many out of tree
dependencies as we have is volatile at best.
In order to prevent a third party warning from ruining the build for
people who don't care about third party warnings, we remove
warnings-as-errors by default.
They are still enabled by default on CI.
2021-01-01 23:28:19 +01:00
ykeara 3e584b0809 530 release (#517)
* update version strings for 5.3.0

* updated documentation
2020-09-10 16:14:43 -05:00
ykeara 4fb026958e custom keybinds multiple keypress fix. [add backslash to Parser] (#513)
* fixed input sending bug not properly releasing keys

* updated to ovr 1.12.5

* added disable oculus api button experimental

* small refactor and fix float and bool bugs

* added nokeyup events to modifier keys when read in, and adjusted  token send to have proper logic

* fixed literal held issue

* added backslash

* fixed sender token parser

* updated version string to dev whoops

* added backslash to documentation for keyboard input
2020-09-03 11:08:37 -05:00
Chelsea Jaggiandykeara 6d1953070a Add an optional pop-up notification when auto-turn is toggled (#496)
* Implement (most of) pop-up notification when autoturn is enabled

* Add neato fading: doesn't appear to impact performance

* formatting

* added macro and UI for notification of auto-turn

* changed notification default to true for auto-turn

* added common issue for trackers

* added warning for custom keys

* minor documentation markdown format fixes

* fix qml syntax error in atgb

* gasd

Co-authored-by: ykeara <ykeara1@gmail.com>
2020-08-11 20:03:35 -05:00
ykeara 15f5534f69 Added F10-F12 For Custom KeyBinds (#507)
* added F10-F12 keys

* updated version strings to 5.2.2

* updated spec to reflect new keys
2020-08-11 20:02:34 -05:00
ykeara 88a1c002c4 Keyboard And Documentation update (#469)
* changed action names

* updated settings for new action key

* updated keyboard input guide

* updated readme top

* updated appveyor link

* fixed qml issue and some formatting

* updated screenshots

* updated documentation portion of readme

* fix qml issues
2020-06-06 14:18:21 -05:00
Vasily 4757756d32 Refactor alarm system and replace notification method
The old OpenVR overlays did not function for unknown reasons, and it was
not possible to get them to work.

With this a white overlay with ALARM ACTIVATED will be shown for 3 seconds.
It's not pretty, but it effectively communicates that an alarm has been
activated.

This fixes
https://github.com/OpenVR-Advanced-Settings/OpenVR-AdvancedSettings/issues/417
2020-06-05 20:52:13 +02:00
username223 31f92df4b1 Change Linux build docs
libpulse-dev does not exist on Manjaro.
2020-04-15 20:00:11 +02:00
username223 a1cae11256 Update docs for building on Ubuntu 2020-04-13 12:54:30 +02:00
ykeara f26d6d6e80 Documentation (#401)
* updated documentation/screenshots, let seated-recenter show in all modes, fixed default value of brigthness

* fixed formatting

* changed PTT to System

* added comma to documentation
2020-04-11 14:00:47 -05:00
Vasily bb30a7c041 Add framework for implementing Linux AudioManager
Source outputs must all be moved to new default source.
Reference topic
https://askubuntu.com/a/72076

* Adds microphone controls on Linux via PulseAudio (PA) for several
points in
https://github.com/OpenVR-Advanced-Settings/OpenVR-AdvancedSettings/issues/43.

It can not be overstated how unsuited the public AudioManager API is for
using the PA API.

It can also not be overstated how undocumented and horrible the PA API
is. The PA way of doing audio is very unlike the Windows way of doing
audio, which the AudioManager is heavily influenced by.

Since I don't have a Linux machine I have not been able to personally
test this. https://github.com/feilen/ has graciously helped with
testing.

PulseAudio is very undocumented and not very widely used for what we
need outside of official utilities. As such there's most likely a better
way of doing things than I've done.
Additional information can be found at
https://github.com/username223/pulseaudio-device-changing.

The "complex" PA API is asynchronous. Since our current AudioManager is
running synchronously and would not work asynchronously (functions are
expected to return valid data on function return) it is necessary to
massage the PA API until it runs synchronously.

This is done with a general workflow of

1. Register a callback function (`pa_context_get_source_info_list()`,
        for example).
2. Run the PA loop through `customPulseLoop()`. This will trigger
any registered callbacks. Sometimes a `void*` is passed through the
callback that can be used for custom data. `successCallback()` uses
this to set the success variable.
3. Run the callback function and do required work.
4. Return to original function, do work or return values.

It is not possible to run a `customPulseLoop()` inside of an already
running loop (inside a callback), as this will lead to a PA assert
error on runtime.
2020-04-08 22:44:12 +02:00
Vasily 016e5ebc4a Add switch for enabling debug symbols and logs
Enabling the switch on release builds will optimize the binaries as
normal, but will still include debug symbols. This is advantageous for
bugs that do not show up in debug builds without optimizations.
2020-01-15 14:01:47 +01:00
Vasily 5498424889 Add libudev0-shim to Manjaro TL;DR
OVRAS will runtime error without libudev.so.0, this package provides
that file.
2020-01-15 14:01:47 +01:00
Vasily ac4b01273e Add basic PKGBUILD for building on Arch/Manjaro
PKGBUILD format is described on the Arch wiki
https://wiki.archlinux.org/index.php/Creating_packages

Arch User Repository is described here
https://wiki.archlinux.org/index.php/Arch_User_Repository

The AUR package can be found here
https://aur.archlinux.org/packages/ovras/
2020-01-15 14:01:47 +01:00
Vasily e71bc7b1b3 Add settings object API
Documentation is in `docs/specs/Settings-Object-API.md`.
2020-01-08 21:18:45 +01:00
Vasily bda3cc0aa2 Update docs for building for Manjaro 2020-01-07 23:31:48 +01:00
Vasily 70d5675119 Update Linux build docs with required SteamVR libraries
https://github.com/ValveSoftware/openvr/issues/549#issuecomment-570911998

Program would not run without `libSDL2-2.0.so.0` and `libvulkan.so.1`
adding the below packages solved the issue on both 1804 and 1910.
2020-01-07 23:31:48 +01:00
Vasily a21c42ef3d Update Linux build docs for 1604 and 1804 2020-01-07 23:31:48 +01:00
Vasily f315b8c182 Add qtchooser to Ubuntu 1904 TLDR 2020-01-07 23:31:48 +01:00
Vasily 7340a7468e Update TOC in building for linux 2020-01-07 23:31:48 +01:00
Vasily 01972546af Update Linux build docs with Git 2020-01-07 23:31:48 +01:00
Vasily 6cdb461af3 Update Qt version in Linux build docs to 5.12.6 2020-01-07 23:31:48 +01:00
Vasily 1465c4a8bd Convert getSettingsController() to global static object
After looking at the assembly output it became apparent that the Windows
compiler did not compile out the `getSettingsController()` function
call.

This led to an unnecessary function call in order to get the
SettingsController. Turning it into a static object in the compilation
unit scope removes this function call and turns getSettings call into a
single instruction (not counting zeroing the register for comparison and
the jump instruction afterwards).

----

Adding the following code to the `main` function:
```cpp
f ( settings::getSetting( settings::BoolSetting::UTILITY_vrcDebug ) )
{
        LOG( INFO ) << "Enabled";
}
else
{
        LOG( INFO ) << "Disabled";
}
```

Leads to this with the `getSettingsController` function:
```assembly
[...]
    47            if ( settings::getSetting( settings::BoolSetting::UTILITY_vrcDebug ) )
0x7ff6c96819a0  <+ 1024>         call AdvancedSettings!settings::getSettingsController (00007ff6`c96cd280)
0x7ff6c96819a5  <+ 1029>         xorps   xmm0,xmm0
0x7ff6c96819a8  <+ 1032>         cmp     byte ptr [rax+5FCh],0
0x7ff6c96819af  <+ 1039>         je AdvancedSettings!main+0x4fd (00007ff6`c9681a9d)
    49                LOG( INFO ) << "Enabled";
0x7ff6c96819b5  <+ 1045>         mov     qword ptr
[rsp+288h],r15
0x7ff6c96819bd  <+ 1053>         mov     qword ptr
[rsp+290h],rsi
[...]
```

And this without the function:
```assembly
[...]
    47            if ( settings::getSetting( settings::BoolSetting::UTILITY_vrcDebug ) )
0x7ff7d97a19bb  <+ 1019>         xorps   xmm0,xmm0
0x7ff7d97a19be  <+ 1022>         cmp     byte ptr [AdvancedSettings!settings::settingController+0x5fc (00007ff7`d9854d4c)],0
0x7ff7d97a19c5  <+ 1029>         je AdvancedSettings!main+0x4f3 (00007ff7`d97a1ab3)
    49                LOG( INFO ) << "Enabled";
0x7ff7d97a19cb  <+ 1035>         mov     qword ptr
[rsp+288h],r15
0x7ff7d97a19d3  <+ 1043>         mov     qword ptr
[rsp+290h],rsi
[...]
```

Notice the missing `call AdvancedSettings![...]` without the function
and that the settings call literally cannot be made any faster.
2019-12-10 08:28:41 +01:00
Vasily c1690056cc Add settings API and specification
The details of the API are in the `/docs/specsSettings-API.md` file.

The enums do not list all available settings, more are to be added as
the settings API replaces inline QSettings calls.
2019-12-03 08:26:10 +01:00
ykeara 2bddedf372 4.0.0 release (desktop overlay adjustment removal, bindings tab/button change, documentation update) (#315)
* removed desktop overlay tab moved width to steamvrtab

* added binding page launch button

* changed binding page button location

* removed binding page and associated resources

* clarified functionality via text update to desktop width box

* updated version string

* changed string to release

* updated photos

* updated ivrscreenshot

* updated documentation

* removed old qml references

* added missing actions to documentation

* hid audio profiles
2019-11-10 10:31:43 -06:00
username223 b148a3d6de Update controller binding port in docs (#312)
This was changed by Valve in a recent patch on live SteamVR.
2019-11-08 10:38:28 -06:00
Kung-vr 218c153a6c Update Docs for bindings page and ini file, fix QML log spam 2019-10-27 16:54:42 +09:00
Kung-vr 17e038bf1d Rework seated-universe motion 2019-10-16 15:47:05 +09:00
Kung-vr 2e6dd3b8fe Add chaperone autoprofiles, crash recovery, and space fix revert 2019-10-13 03:56:57 +09:00
Kung-vr 6dc7bc6837 Add offset profiles
Addresses #149
2019-10-02 15:25:03 +09:00
Vasily 2a935895e9 Update Linux build docs for Arch/Ubuntu, add logging calls to Qmake
The page was not made with Arch in mind.

The currently required were tested on Manjaro, more packages may be
explicitly required due to the bare-bones nature of Arch.

Adds simple logging calls makes debugging easier.

The initial build script was basically ported over directly from
Windows. It was written because I at the time didn't understand
compiling on Linux, and the existing standards, very well.

Moving as many build components into a program specifically made for
building C++ makes everything much easier.

The old build script is still used on CI where control flow can only be
changed using environment variables.

`bear` and `clang-format` are only used on the CI, there's no reason to
include them here.
2019-08-23 15:12:58 +02:00
Vasily 8d5a9656db Remove unnecessary line from building on linux docs
Linux builds have an rpath in the executable directory, meaning this is
no longer necessary.
2019-08-07 12:53:20 +02:00
Vasily 730e633d07 Add naive make install for Linux
This enables a `sudo make install` that copies the build directory to
the PREFIX directory (/opt/OpenVR-AdvancedSettings/AdvancedSettings by
default).

The entire directory is being copied because Qt is incredibly weird
about how the INSTALLS variable works. From testing it appears that only
files that exist before the build process has started (even the
file_copy process) will be eligible for installation.

If the /OpenVR-AdvancedSettings/ directory is excluded, Qt will attempt
to remove the /opt/ folder on `make uninstall`, this is obviously not
desirable.
2019-08-07 12:53:20 +02:00
username223 f65ee06861 Update linux input guide config location
The logs are stored in `~/.local/share/AdvancedSettings-Team/OpenVRAdvancedSettings/`, but the config file is stored in `~/.config/AdvancedSettings-Team/`.
2019-07-27 19:50:53 +02:00