Driver Interfaces

This is an incomplete unofficial document describing driver interfaces present in OpenVR.

IVRProperties Interface


IVRSettings Interface

Current version: IVRSettings_003

Allows the user to fetch, write (and also remove keys or entire sections) the last overridden value of a specific key from a specific section. The values can be overridden by any *.vrsettings file (which is picked up by either SteamVR, like <steam install path>/configs/steamvr.vrsettings or your driver using the Prop_AdditionalDeviceSettingsPath_String prop) with a matching section & key pair.

Example usage:

You’re writing a driver and you need to have some sort of configuration/persistence. Your needs can be easily satisfied with IVRSettings. First create a file called default.vrsettings and place it in <your driver dir>/resources/settings/, then put your default configuration inside this file, using json syntax and the following scheme:

        "my_very_own_driver_section" : {
                "my_very_usefull_key_float" : 0.5,
                "my_very_usefull_key_int" : 15,
                "my_very_usefull_key_bool" : false,
                "my_very_usefull_key_str" : "blah blah blah text here blah blah blah"

Then in your driver you can access the values for your section & key pairs (and other section & key pairs) by using the IVRSettings interface:

float fVal = vr::VRSettings()->GetFloat("my_very_own_driver_section", "my_very_usefull_key_float");

int32_t iVal = vr::VRSettings()->GetInt32("my_very_own_driver_section", "my_very_usefull_key_int");

bool bVal = vr::VRSettings()->GetBool("my_very_own_driver_section", "my_very_usefull_key_bool");

char buff[255];
memset(buff, 0, sizeof(buff));
std::string sVal(buff, sizeof(buff));

You can also write to section & key pairs, but be aware that if you write to a section & key pair that never existed before, it’ll get create, except in <steam install path>/config/steamvr.vrsettings instead:

vr::VRSettings()->SetFloat("my_very_own_driver_section", "my_very_usefull_key_float", 1.5);
vr::VRSettings()->SetInt32("my_very_own_driver_section", "my_very_usefull_key_int", 420);
vr::VRSettings()->SetBool("my_very_own_driver_section", "my_very_usefull_key_bool", true);
        "new very kewl text mmmmmmmmmmm yes"
vr::VRSettings()->SetInt32("my_very_own_driver_section", "my_key_that_didnt_exist_int", 420);

You can also remove sections or keys in a sections, but be extra careful not to remove a section or key that is used by a different driver.

// this will only remove this specific key from this section
vr::VRSettings()->RemoveKeyInSection("my_very_own_driver_section", "my_key_that_didnt_exist_int");
// this will remove all keys in the section and delete the section itself

Optionally you can also pass a pointer to vr::EVRSettingsError as the last argument to capture the error, for how to process those refer to the vr::EVRSettingsError enum.

VRInput Interface


IVRDriverLog Interface

Current version: IVRDriverLog_001

A pretty straightforward interface allowing you to log something in SteamVR’s log. The logs will appear in the developer web console as well as in <steam install path>/logs/vrserver.txt.

Example usage:

VRDriverLog()->Log("my very cool log");

This is the only method it has and it accepts a null terminated string, we recommend you write your own wrapped around it to allow formatting.

ITrackedDeviceServerDriver Device Interface




IServerTrackedDeviceProvider Driver Interface


IVRWatchdogProvider Driver Interface


IVRCompositorPluginProvider Driver Interface