Skip to content

Add SolarXR WebSockets driver

rcelyte requested to merge rcelyte/monado:solarxr-drv into main

This driver makes tracking data from SlimeVR available through XR_FB_body_tracking, XR_META_body_tracking_full_body (code commented out pending !2206), and optionally XR_MNDX_xdev_space. This MR omits builder hookups for bookkeeping's sake, however the driver should work with pretty much every builder.

Loading with XR_MNDX_xdev_space support:

const uint32_t count = solarxr_device_create_xdevs(head, &xsysd->xdevs[xsysd->xdev_count], ARRAY_SIZE(xsysd->xdevs) - xsysd->xdev_count);
if(count != 0)
	xsysd->static_roles.body = xsysd->xdevs[xsysd->xdev_count];
xsysd->xdev_count += count;

Loading without XR_MNDX_xdev_space support:

xsysd->static_roles.body = solarxr_device_create(head);
if(xsysd->static_roles.body != NULL)
	xsysd->xdevs[xsysd->xdev_count++] = xsysd->static_roles.body;

I've included a copy of the SolarXR schema with syntax fixes for FlatCC (i.e. removing (deprecated) attributes), but in the long term it would be preferable to reference upstream directly.

Side note: make sure to test with https://github.com/SlimeVR/SlimeVR-Server/tree/main compiled from source, as it includes a bugfix needed to get head position feedback working.

Edited by rcelyte

Merge request reports