Please Select Your Location
Australia
Österreich
België
Canada
Canada - Français
中国
Česká republika
Denmark
Deutschland
France
HongKong
Iceland
Ireland
Italia
日本
Korea
Latvija
Lietuva
Lëtzebuerg
Malta
المملكة العربية السعودية (Arabic)
Nederland
New Zealand
Norge
Polska
Portugal
Russia
Russia
Saudi Arabia
Southeast Asia
España
Suisse
Suomi
Sverige
台灣
Ukraine
United Kingdom
United States
Please Select Your Location
België
Česká republika
Denmark
Iceland
Ireland
Italia
Latvija
Lietuva
Lëtzebuerg
Malta
Nederland
Norge
Polska
Portugal
España
Suisse
Suomi
Sverige

Marker-Based Location Sharing APIs (PC VR)

LBSS provides several application programming interfaces (APIs) to assist in Marker-Based Location Sharing.
Note:

These APIs can only be used with PC VR applications. For APIs designed for use with compatible AIO applications developed with the VIVE Wave VR SDK, see Marker-Based Location Sharing APIs (AIO).

Configure marker ID and dictionary

This API configures the marker ID and dictionary for one or two ArUco markers. When configuring two markers, the API defines both the primary and secondary markers so location sharing starts only after users scan the second marker.

The marker ID is defined using integers, and the marker size is defined in meters using a decimal. For example, the size value for a marker with an area of 280 millimeters squared would be 0.280.

One ArUco marker

In this sample, the marker ID is 66, and the marker size is 0.280.
string polling_value;
        string key = "‍PLAYER00InitMA"‍;
        key += "‍{\"‍marker1\"‍: {\"‍id\"‍: 66,\"‍behavior\"‍: 3,\"‍size\"‍: 0.280}}"‍;
        uint RETURN_SIZE = 256;
        IntPtr value = Marshal.AllocHGlobal(new IntPtr(RETURN_SIZE));
        Interop.WVR_GetParameters(WVR_DeviceType.WVR_DeviceType_HMD, Marshal.StringToHGlobalAnsi(key), value, RETURN_SIZE);
        polling_value = Marshal.PtrToStringAnsi(value);
        Marshal.FreeCoTaskMem(value);
        if(string.Compare(polling_value, "‍InitErr"‍) == 0) // initialization failed, should check config string
        {
            // write your error handling code here
        }

Two ArUco markers

In this sample, the marker IDs are 66 and 88 and both marker sizes are 0.280.
string polling_value;
        string key = "‍PLAYER00InitMA"‍;
        key += "‍{\"‍marker1\"‍: {\"‍id\"‍: 66,\"‍behavior\"‍: 3,\"‍size\"‍: 0.280,\"‍isMainMarker\"‍: true,\"‍pairMarkerID\"‍: 88},\"‍marker2\"‍: {\"‍id\"‍: 88,\"‍behavior\"‍: 3,\"‍size\"‍: 0.280,\"‍isMainMarker\"‍: false,\"‍pairMarkerID\"‍: 66}}"‍;
        uint RETURN_SIZE = 256;
        IntPtr value = Marshal.AllocHGlobal(new IntPtr(RETURN_SIZE));
        Interop.WVR_GetParameters(WVR_DeviceType.WVR_DeviceType_HMD, Marshal.StringToHGlobalAnsi(key), value, RETURN_SIZE);
        polling_value = Marshal.PtrToStringAnsi(value);
        Marshal.FreeCoTaskMem(value);
        if(string.Compare(polling_value, "‍InitErr"‍) == 0) // initialization failed, should check config string
        {
            // write your error handling code here
        }

Send requests

This API is the helper function for sending requests.

enum DeviceType
{
    HMD = 0,
    Controller_Left,
    Controller_Right
}

private string SendRequestMessage(DeviceType deviceType, string inString)
{
    string addprefix = inString.Insert(0, "‍GetParameters "‍); // must have space after GetParameters
    uint RETURN_SIZE = 256;
    StringBuilder value = new StringBuilder("‍"‍, Convert.ToInt32(RETURN_SIZE));
    OpenVR.Debug.DriverDebugRequest((uint)deviceType, addprefix, value, RETURN_SIZE);

   return value.ToString();
}
private string SetParameters(DeviceType deviceType, string inString)
{
    string addprefix = inString.Insert(0, "‍SetParameters "‍); // must have space after SetParameters
    uint RETURN_SIZE = 256;
    StringBuilder value = new StringBuilder("‍"‍, Convert.ToInt32(RETURN_SIZE));
    OpenVR.Debug.DriverDebugRequest((uint)deviceType, addprefix, value, RETURN_SIZE);    

   return value.ToString();
}

Send marker settings

This API prompts the PC to send the marker settings from a JSON file to the headset.

string key = "‍PLAYER00InitMA"‍;
// default path: C:\Users\{USERNAME}\Data\markers_list.json
string filePath = Environment.ExpandEnvironmentVariables(@"‍%USERPROFILE%\Data\markers_list.json"‍); 
string setting = File.ReadAllText(filePath);
setting = setting.Replace("‍\n"‍, "‍"‍).Replace("‍ "‍, "‍"‍); // setting string must remove space
key += setting;
string result = SendRequestMessage(DeviceType.HMD, key);
if (string.Compare(result, "‍InitMAErr"‍) == 0)
{
   // write your error handling code here
}

Scan marker

This API prompts the headset's tracking engine to detect an ArUco marker and process the data.

string key = "‍ClearRecenterXform"‍;
SetParameters(DeviceType.HMD, key);
SetParameters(DeviceType.Controller_Right, key);
SetParameters(DeviceType.Controller_Left, key);

string key = "‍PLAYER00StartScan"‍;
SendRequestMessage(DeviceType.HMD, key);

Stop scan

This API stops the scanning process.

string key = "‍PLAYER00StopScan"‍;
SendRequestMessage(DeviceType.HMD, key);

Check scan status (optional)

This API checks the status of the latest scan at regular intervals.

Note: To avoid affecting system performance, do not set the checking frequency to more than two times per second.
string key = "‍PLAYER00CheckMA"‍;
string result = SendRequestMessage(DeviceType.HMD, key);
if (string.Compare(result, "‍CTdone"‍) == 0)
{
   // handling with all marker scanned
}
else if  (string.Compare(result, "‍CTpass"‍) == 0)
{
   // handling with the 1st marker scanned if you are using 2 markers. Remove it when using 1 marker.
}
Submit
Thank you! Your feedback helps others to see the most helpful information.