Nothing's in my cart
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. } |
Was this helpful?
Yes
No
Thank you! Your feedback helps others to see the most helpful information.