Monado contract with application (openXR api) and devices:

image.png

Complete list of device-side inputs

Input What it contains Static or streamed
Camera frames Pixel data, format, timestamp, sequence number, per camera (including eye cameras) Streamed
IMU samples Acceleration and angular velocity, with timestamps Streamed
Camera intrinsics Focal lengths, principal point, lens distortion model and coefficients, resolution Static (calibration file)
Camera extrinsics Each camera's fixed transform relative to the IMU or headset origin; camera-to-IMU time offset Static (calibration file)
IMU calibration Noise densities, bias random walk, optionally scale and axis misalignment Static (calibration file)
Display description Per-eye resolution, refresh rate, field of view, distortion model Static (calibration file)
Head-to-eye transforms Fixed transforms from the tracking origin to each eye's view, plus IPD Static, or per-user
Display timing Vblank and present timestamps Streamed
Eye-tracking calibration Per-user mapping from eye images to gaze Static, per user
Data Interface Device nodes / location Notes
Camera frames V4L2 streaming I/O /dev/videoN Buffers by mmap, or exported as dma-buf for GPU import. Each buffer carries a timestamp and sequence number.
Camera pipeline setup Media controller + V4L2 sub-devices /dev/mediaN, /dev/v4l-subdevN Links and per-pad formats. Likely done once by a setup script rather than by the runtime.
Camera controls (exposure, gain, frame rate) V4L2 controls on sensor sub-devices /dev/v4l-subdevN For cameras behind the FPGA, the control path is open. It may pass through the FPGA driver instead.
Per-frame hardware metadata (e.g., FPGA timestamps) V4L2 metadata capture node, or data embedded in the image /dev/videoN (metadata type) Depends on the hardware lead's design. Needs to be specified.
IMU samples IIO buffered capture /dev/iio:deviceN for samples; /sys/bus/iio/devices/… for scale, rate, channel enables, timestamp clock If the IMU ends up behind the FPGA, this becomes whatever that link exposes.
Display output and timing DRM/KMS: atomic commits, page-flip and vblank events /dev/dri/cardN Usually reached through Vulkan's display extensions (VK_KHR_display, VK_EXT_acquire_drm_display) rather than raw ioctls.
GPU compute and rendering Vulkan (Turnip) on the DRM render node /dev/dri/renderD128 Imports camera dma-bufs for the GPU SLAM front end.
DSP/NPU offload (tentative) FastRPC via the Hexagon runtime libraries /dev/fastrpc-* Depends on the toolchain question.
Eye-tracking IR illuminators Unknown: GPIO, LED class, or FPGA — Only if not fully handled by the FPGA strobe.
Buttons, proximity sensor (if present) evdev /dev/input/eventN Optional.
Calibration and display description Files Monado config directory (JSON) Covers intrinsics, extrinsics, IMU noise, distortion, and head-to-eye transforms.
Time base clock_gettime(CLOCK_MONOTONIC) — Every timestamp above must be in, or convertible to, this clock.