Monado OpenXR Runtime
Loading...
Searching...
No Matches
xrt_device.h
Go to the documentation of this file.
1// Copyright 2019-2024, Collabora, Ltd.
2// Copyright 2024-2026, NVIDIA CORPORATION.
3// SPDX-License-Identifier: BSL-1.0
4/*!
5 * @file
6 * @brief Header defining an xrt display or controller device.
7 * @author Jakob Bornecrantz <jakob@collabora.com>
8 * @author Moshi Turner <moshiturner@protonmail.com>
9 * @author Korcan Hussein <korcan.hussein@collabora.com>
10 * @ingroup xrt_iface
11 */
12
13#pragma once
14
15#include "xrt/xrt_defines.h"
18#include "xrt/xrt_limits.h"
19
20#ifdef __cplusplus
21extern "C" {
22#endif
23
24struct xrt_tracking;
25
26#define XRT_DEVICE_NAME_LEN 256
27
28
29/*!
30 * A per-lens/display view information.
31 *
32 * @ingroup xrt_iface
33 */
35{
36 /*!
37 * @brief Viewport position on the screen.
38 *
39 * In absolute screen coordinates on an unrotated display, like the
40 * HMD presents it to the OS.
41 *
42 * This field is only used by @ref comp to setup the device rendering.
43 *
44 * If the view is being rotated by xrt_view.rot 90° right in the
45 * distortion shader then `display.w_pixels == viewport.h_pixels` and
46 * `display.h_pixels == viewport.w_pixels`.
47 */
48 struct
49 {
50 uint32_t x_pixels;
51 uint32_t y_pixels;
52 uint32_t w_pixels;
53 uint32_t h_pixels;
55
56 /*!
57 * @brief Physical properties of this display (or the part of a display
58 * that covers this view).
59 *
60 * Not in absolute screen coordinates but like the clients see them i.e.
61 * after rotation is applied by xrt_view::rot.
62 * This field is only used for the clients' swapchain setup.
63 *
64 * The xrt_view::display::w_pixels and xrt_view::display::h_pixels
65 * become the recommended image size for this view, after being scaled
66 * by the debug environment variable `XRT_COMPOSITOR_SCALE_PERCENTAGE`.
67 */
68 struct
69 {
70 uint32_t w_pixels;
71 uint32_t h_pixels;
73
74 /*!
75 * @brief Rotation 2d matrix used to rotate the position of the output
76 * of the distortion shaders onto the screen.
77 *
78 * If the distortion shader is based on a mesh, then this matrix rotates
79 * the vertex positions.
80 */
82};
83
84/*!
85 * @brief Compositor information for a device.
86 */
88{
89 //! The direction scanout on the display occurs.
91 /*!
92 * The amount of time it takes to scanout the display in nanoseconds, from the start of the scanout, to the end
93 * of the scanout.
94 *
95 * @note alignas for 32 bit client support, see @ref ipc-design
96 */
97 XRT_ALIGNAS(8) int64_t scanout_time_ns;
98};
99
100/*!
101 * @brief Compositor mode information for a device.
102 */
104{
105 //! The amount of nanoseconds between frames.
107};
108
109/*!
110 * All of the device components that deals with interfacing to a users head.
111 *
112 * HMD is probably a bad name for the future but for now will have to do.
113 *
114 * @ingroup xrt_iface
115 */
117{
118 /*!
119 * @brief The hmd screen as an unrotated display, like the HMD presents
120 * it to the OS.
121 *
122 * This field is used by @ref comp to setup the extended mode window.
123 */
124 struct
125 {
126 int w_pixels;
127 int h_pixels;
128 //! Nominal frame interval
130 } screens[1];
131
132 /*!
133 * Display information.
134 *
135 * For now hardcoded display to two.
136 */
137 struct xrt_view views[XRT_MAX_VIEWS];
138
139 size_t view_count;
140 /*!
141 * Array of supported blend modes.
142 */
143 enum xrt_blend_mode blend_modes[XRT_MAX_DEVICE_BLEND_MODES];
144 size_t blend_mode_count;
145
146 /*!
147 * Distortion information.
148 */
149 struct
150 {
151 //! Supported distortion models, a bitfield.
153 //! Preferred disortion model, single value.
155
156 struct
157 {
158 //! Data.
159 float *vertices;
160 //! Number of vertices.
161 uint32_t vertex_count;
162 //! Stride of vertices
163 uint32_t stride;
164 //! 1 or 3 for (chromatic aberration).
166
167 //! Indices, for triangle strip.
169 //! Number of indices for the triangle strips (one per view).
170 uint32_t index_counts[XRT_MAX_VIEWS];
171 //! Offsets for the indices (one offset per view).
172 uint32_t index_offsets[XRT_MAX_VIEWS];
173 //! Total number of elements in mesh::indices array.
175 } mesh;
176
177 //! distortion is subject to the field of view
178 struct xrt_fov fov[XRT_MAX_VIEWS];
179 } distortion;
180};
181
182/*!
183 * A single named input, that sits on a @ref xrt_device.
184 *
185 * @ingroup xrt_iface
186 */
188{
189 //! Is this input active.
190 bool active;
191
192 //! alignas for 32 bit client support, see @ref ipc-design
193 XRT_ALIGNAS(8) int64_t timestamp;
194
195 enum xrt_input_name name;
196
197 union xrt_input_value value;
198};
199
200/*!
201 * A single named output, that sits on a @ref xrt_device.
202 *
203 * @ingroup xrt_iface
204 */
206{
207 enum xrt_output_name name;
208};
209
210
211/*!
212 * A binding pair, going @p from a binding point to a @p device input.
213 *
214 * @ingroup xrt_iface
215 */
217{
218 enum xrt_input_name from; //!< From which name.
219 enum xrt_input_name device; //!< To input on the device.
220};
221
222/*!
223 * A binding pair, going @p from a binding point to a @p device output.
224 *
225 * @ingroup xrt_iface
226 */
228{
229 enum xrt_output_name from; //!< From which name.
230 enum xrt_output_name device; //!< To output on the device.
231};
232
233/*!
234 * A binding profile, has lists of binding pairs to goes from device in @p name
235 * to the device it hangs off on.
236 *
237 * @ingroup xrt_iface
238 */
240{
241 //! Device this binding emulates.
243
244 struct xrt_binding_input_pair *inputs;
245 size_t input_count;
246 struct xrt_binding_output_pair *outputs;
247 size_t output_count;
248};
249
250/*!
251 * Higher level features for devices.
252 */
254{
255 XRT_DEVICE_FEATURE_HAND_TRACKING_LEFT = 0,
256 XRT_DEVICE_FEATURE_HAND_TRACKING_RIGHT,
257 XRT_DEVICE_FEATURE_EYE_TRACKING,
258 XRT_DEVICE_FEATURE_FACE_TRACKING,
259 XRT_DEVICE_FEATURE_MAX_ENUM,
260};
261
262/*!
263 * Output limits of a particular device
264 */
266{
267 //! The sample rate of the device's haptic PCM support, 0 if haptic PCM is not supported.
269};
270
271/*!
272 * Static data of supported features of the @ref xrt_device this struct sits on.
273 *
274 * This struct needs to always be a piece of data as it sits inside of the
275 * shared memory area in the IPC layer, so no pointers please.
276 *
277 * @ingroup xrt_iface
278 */
280{
281 bool orientation_tracking;
282 bool position_tracking;
283 bool hand_tracking;
284 bool eye_gaze;
285 bool presence;
286 bool force_feedback;
287 bool ref_space_usage;
288 bool form_factor_check;
289 bool stage;
290 bool face_tracking;
291 bool face_tracking_calibration_state;
292 bool body_tracking;
293 bool body_tracking_calibration;
294 bool body_tracking_fidelity;
295 bool battery_status;
296 bool brightness_control;
297 bool compositor_info;
298
299 bool planes;
300 enum xrt_plane_detection_capability_flags_ext plane_capability_flags;
301};
302
303/*!
304 * @interface xrt_device
305 *
306 * A single HMD or input device.
307 *
308 * @ingroup xrt_iface
309 */
311{
312 //! Enum identifier of the device.
314 enum xrt_device_type device_type;
315
316 //! A string describing the device.
317 char str[XRT_DEVICE_NAME_LEN];
318
319 //! A unique identifier. Persistent across configurations, if possible.
320 char serial[XRT_DEVICE_NAME_LEN];
321
322 //! Null if this device does not interface with the users head.
324
325 //! Always set, pointing to the tracking system for this device.
327
328 //! Number of bindings in xrt_device::binding_profiles
330 // Array of alternative binding profiles.
331 struct xrt_binding_profile *binding_profiles;
332
333 //! Number of inputs.
335 //! Array of input structs.
337
338 //! Number of outputs.
340 //! Array of output structs.
342
343 //! What features/functions/things does this device supports?
344 struct xrt_device_supported supported;
345
346
347 /*
348 *
349 * Functions.
350 *
351 */
352
353 /*!
354 * Update any attached inputs.
355 *
356 * @param[in] xdev The device.
357 */
358 xrt_result_t (*update_inputs)(struct xrt_device *xdev);
359
360 /*!
361 * @brief Get relationship of a tracked device to the tracking origin
362 * space as the base space.
363 *
364 * It is the responsibility of the device driver to do any prediction,
365 * there are helper functions available for this.
366 *
367 * The timestamps are system monotonic timestamps, such as returned by
368 * os_monotonic_get_ns().
369 *
370 * @param[in] xdev The device.
371 * @param[in] name Some devices may have multiple poses on
372 * them, select the one using this field. For
373 * HMDs use @p XRT_INPUT_GENERIC_HEAD_POSE.
374 * For Unbounded Reference Space you can use
375 * @p XRT_INPUT_GENERIC_UNBOUNDED_SPACE_POSE
376 * to get the origin of that space.
377 * @param[in] at_timestamp_ns If the device can predict or has a history
378 * of positions, this is when the caller
379 * wants the pose to be from.
380 * @param[out] out_relation The relation read from the device.
381 *
382 * @see xrt_input_name
383 */
384 xrt_result_t (*get_tracked_pose)(struct xrt_device *xdev,
385 enum xrt_input_name name,
386 int64_t at_timestamp_ns,
387 struct xrt_space_relation *out_relation);
388
389 /*!
390 * @brief Get relationship of hand joints to the tracking origin space as
391 * the base space.
392 *
393 * It is the responsibility of the device driver to either do prediction
394 * or return joints from a previous time and write that time out to
395 * @p out_timestamp_ns.
396 *
397 * The timestamps are system monotonic timestamps, such as returned by
398 * os_monotonic_get_ns().
399 *
400 * @param[in] xdev The device.
401 * @param[in] name Some devices may have multiple poses on
402 * them, select the one using this field. For
403 * hand tracking use @p XRT_INPUT_GENERIC_HAND_TRACKING_DEFAULT_SET.
404 * @param[in] desired_timestamp_ns If the device can predict or has a history
405 * of positions, this is when the caller
406 * wants the pose to be from.
407 * @param[out] out_value The hand joint data read from the device.
408 * @param[out] out_timestamp_ns The timestamp of the data being returned.
409 *
410 * @see xrt_input_name
411 */
412 xrt_result_t (*get_hand_tracking)(struct xrt_device *xdev,
413 enum xrt_input_name name,
414 int64_t desired_timestamp_ns,
415 struct xrt_hand_joint_set *out_value,
416 int64_t *out_timestamp_ns);
417
418 /*!
419 * @brief Get the requested blend shape properties & weights for a face tracker
420 *
421 * @param[in] xdev The device.
422 * @param[in] facial_expression_type The facial expression data type (XR_FB_face_tracking,
423 * XR_HTC_facial_tracking, etc).
424 * @param[in] at_timestamp_ns Timestamp to be optionally used for prediction/history. For OXR extensions
425 * that do not pass a timestamp, the current timestamp is used.
426 * @param[in] out_value Set of requested expression weights & blend shape properties.
427 *
428 * @see xrt_input_name
429 */
430 xrt_result_t (*get_face_tracking)(struct xrt_device *xdev,
431 enum xrt_input_name facial_expression_type,
432 int64_t at_timestamp_ns,
433 struct xrt_facial_expression_set *out_value);
434
435 /*!
436 * @brief Gets the face tracking calibration state
437 *
438 * @param[in] xdev The device.
439 * @param[in] out_face_is_calibrated Is face tracking calibrated?
440 *
441 * @see xrt_input_name
442 */
443 xrt_result_t (*get_face_calibration_state_android)(struct xrt_device *xdev, bool *out_face_is_calibrated);
444
445 /*!
446 * @brief Get the body skeleton in T-pose, used to query the skeleton hierarchy, scale, proportions etc
447 *
448 * @param[in] xdev The device.
449 * @param[in] body_tracking_type The body joint set type (XR_FB_body_tracking,
450 * XR_META_body_tracking_full_body, etc).
451 * @param[in] out_value The body skeleton hierarchy/properties.
452 *
453 * @see xrt_input_name
454 */
455 xrt_result_t (*get_body_skeleton)(struct xrt_device *xdev,
456 enum xrt_input_name body_tracking_type,
457 struct xrt_body_skeleton *out_value);
458
459 /*!
460 * @brief Get the joint locations for a body tracker
461 *
462 * @param[in] xdev The device.
463 * @param[in] body_tracking_type The body joint set type (XR_FB_body_tracking,
464 * XR_META_body_tracking_full_body, etc).
465 * @param[in] desired_timestamp_ns If the device can predict or has a history
466 * of locations, this is when the caller
467 * @param[in] out_value Set of body joint locations & properties.
468 *
469 * @see xrt_input_name
470 */
471 xrt_result_t (*get_body_joints)(struct xrt_device *xdev,
472 enum xrt_input_name body_tracking_type,
473 int64_t desired_timestamp_ns,
474 struct xrt_body_joint_set *out_value);
475
476 /*!
477 * @brief XR_META_body_tracking_calibration - body tracking extension to reset the body tracking calibration
478 *
479 * @param[in] xdev The body tracking device.
480 */
481 xrt_result_t (*reset_body_tracking_calibration_meta)(struct xrt_device *xdev);
482
483 /*!
484 * @brief XR_META_body_tracking_calibration - body tracking extension to suggest a body tracking calibration
485 * override
486 *
487 * @param[in] xdev The body tracking device.
488 * @param[in] new_body_height The suggested new body height to override.
489 */
490 xrt_result_t (*set_body_tracking_calibration_override_meta)(struct xrt_device *xdev, float new_body_height);
491
492 /*!
493 * @brief XR_META_body_tracking_fidelity - body tracking extension for request changing the tracking fidelity
494 *
495 * @param[in] xdev The body tracking device.
496 * @param[in] new_fidelity The new tracking fidelity mode.
497 *
498 * @see xrt_body_tracking_fidelity_meta
499 */
500 xrt_result_t (*set_body_tracking_fidelity_meta)(struct xrt_device *xdev,
501 enum xrt_body_tracking_fidelity_meta new_fidelity);
502
503 /*!
504 * Set a output value.
505 *
506 * @param[in] xdev The device.
507 * @param[in] name The output component name to set.
508 * @param[in] value The value to set the output to.
509 * @see xrt_output_name
510 */
511 xrt_result_t (*set_output)(struct xrt_device *xdev,
512 enum xrt_output_name name,
513 const struct xrt_output_value *value);
514
515 /*!
516 * Gets limits of this devices outputs.
517 *
518 * @param[in] xdev The device.
519 * @param[out] limits The returned limits.
520 */
521 xrt_result_t (*get_output_limits)(struct xrt_device *xdev, struct xrt_output_limits *limits);
522
523 /*!
524 * @brief Get current presence status of the device.
525 *
526 * @param[in] xdev The device.
527 * @param[out] presence The returned presence status.
528 */
529 xrt_result_t (*get_presence)(struct xrt_device *xdev, bool *presence);
530
531 /*!
532 * Begin a plane detection request
533 *
534 * @param[in] xdev The device.
535 * @param[in] begin_info The query specifying what type of planes are requested.
536 * @param[in] plane_detection_id The id for a previous plane detection request to be replaced or 0.
537 * @param[out] out_plane_detection_id The id of the new plane detection request generated by the xdev.
538 * @return generally XRT_SUCCESS, except for internal runtime failures.
539 */
540 xrt_result_t (*begin_plane_detection_ext)(struct xrt_device *xdev,
541 const struct xrt_plane_detector_begin_info_ext *begin_info,
542 uint64_t plane_detection_id,
543 uint64_t *out_plane_detection_id);
544
545 /*!
546 * Destroy internal resources associated with plane_detector_id.
547 *
548 * @param[in] xdev The device.
549 * @param[in] plane_detection_id An id generated by the xdev.
550 * @return generally XRT_SUCCESS, except for internal runtime failures.
551 */
552 xrt_result_t (*destroy_plane_detection_ext)(struct xrt_device *xdev, uint64_t plane_detection_id);
553
554 /*!
555 * Get the state of a plane detection request.
556 *
557 * @param[in] xdev The device.
558 * @param[in] plane_detector_id An id generated by the xdev.
559 * @param[out] out_state The state of the plane detection.
560 * @return generally XRT_SUCCESS, except for internal runtime failures.
561 */
562 xrt_result_t (*get_plane_detection_state_ext)(struct xrt_device *xdev,
563 uint64_t plane_detection_id,
564 enum xrt_plane_detector_state_ext *out_state);
565
566 /*!
567 * Get results of a plane detection request.
568 *
569 * @param[in] xdev The device.
570 * @param[in] plane_detector_id An id generated by the xdev.
571 * @param[out] detections The detected planes, if any.
572 * @return generally XRT_SUCCESS, except for internal runtime failures.
573 */
574 xrt_result_t (*get_plane_detections_ext)(struct xrt_device *xdev,
575 uint64_t plane_detection_id,
576 struct xrt_plane_detections_ext *out_detections);
577
578 /*!
579 * @brief Get the per-view pose in relation to the view space.
580 *
581 * On most devices with coplanar displays and no built-in eye tracking
582 * or IPD sensing, this just calls a helper to process the provided
583 * eye relation, but this may also handle canted displays as well as
584 * eye tracking.
585 *
586 * Incorporates a call to xrt_device::get_tracked_pose or a wrapper for it
587 *
588 * @param[in] xdev The device.
589 * @param[in] default_eye_relation
590 * The interpupillary relation as a 3D position.
591 * Most simple stereo devices would just want to
592 * set `out_pose->position.[x|y|z] = ipd.[x|y|z]
593 * / 2.0f` and adjust for left vs right view.
594 * Not to be confused with IPD that is absolute
595 * distance, this is a full 3D translation
596 * If a device has a more accurate/dynamic way of
597 * knowing the eye relation, it may ignore this
598 * input.
599 * @param[in] at_timestamp_ns This is when the caller wants the poses and FOVs to be from.
600 * @param[in] view_count Number of views.
601 * @param[in] view_type Type of view configuration (mono or stereo).
602 * @param[out] out_head_relation
603 * The head pose in the device tracking space.
604 * Combine with @p out_poses to get the views in
605 * device tracking space.
606 * @param[out] out_fovs An array (of size @p view_count ) to populate
607 * with the device-suggested fields of view.
608 * @param[out] out_poses An array (of size @p view_count ) to populate
609 * with view output poses in head space. When
610 * implementing, be sure to also set orientation:
611 * most likely identity orientation unless you
612 * have canted screens.
613 * (Caution: Even if you have eye tracking, you
614 * won't use eye orientation here!)
615 */
616 xrt_result_t (*get_view_poses)(struct xrt_device *xdev,
617 const struct xrt_vec3 *default_eye_relation,
618 int64_t at_timestamp_ns,
619 enum xrt_view_type view_type,
620 uint32_t view_count,
621 struct xrt_space_relation *out_head_relation,
622 struct xrt_fov *out_fovs,
623 struct xrt_pose *out_poses);
624
625 /**
626 * Compute the distortion at a single point.
627 *
628 * The input is @p u @p v in screen/output space (that is, predistorted), you are to compute and return the u,v
629 * coordinates to sample the render texture. The compositor will step through a range of u,v parameters to build
630 * the lookup (vertex attribute or distortion texture) used to pre-distort the image as required by the device's
631 * optics.
632 *
633 * @param xdev the device
634 * @param view the view index
635 * @param u horizontal texture coordinate
636 * @param v vertical texture coordinate
637 * @param[out] out_result corresponding u,v pairs for all three color channels.
638 */
639 xrt_result_t (*compute_distortion)(
640 struct xrt_device *xdev, uint32_t view, float u, float v, struct xrt_uv_triplet *out_result);
641
642 /*!
643 * Get the visibility mask for this device.
644 *
645 * @param[in] xdev The device.
646 * @param[in] type The type of visibility mask.
647 * @param[in] view_index The index of the view to get the mask for.
648 * @param[out] out_mask Output mask, caller must free.
649 */
650 xrt_result_t (*get_visibility_mask)(struct xrt_device *xdev,
651 enum xrt_visibility_mask_type type,
652 uint32_t view_index,
653 struct xrt_visibility_mask **out_mask);
654
655 /*!
656 * Called by the @ref xrt_space_overseer when a reference space that is
657 * implemented by this device is first used, or when the last usage of
658 * the reference space stops.
659 *
660 * What is provided is both the @ref xrt_reference_space_type that
661 * triggered the usage change and the @ref xrt_input_name (if any) that
662 * is used to drive the space.
663 *
664 * @see xrt_space_overseer_ref_space_inc
665 * @see xrt_space_overseer_ref_space_dec
666 * @see xrt_input_name
667 * @see xrt_reference_space_type
668 */
669 xrt_result_t (*ref_space_usage)(struct xrt_device *xdev,
670 enum xrt_reference_space_type type,
671 enum xrt_input_name name,
672 bool used);
673
674 /*!
675 * @brief Check if given form factor is available or not.
676 *
677 * This should only be used in HMD device, if the device driver supports form factor check.
678 *
679 * @param[in] xdev The device.
680 * @param[in] form_factor Form factor to check.
681 * @param[out] out_available true if given form factor is available; otherwise false.
682 */
683 xrt_result_t (*is_form_factor_available)(struct xrt_device *xdev,
684 enum xrt_form_factor form_factor,
685 bool *out_available);
686
687 /*!
688 * @brief Get battery status information.
689 *
690 * @param[in] xdev The device.
691 * @param[out] out_present Whether battery status information exist for this device.
692 * @param[out] out_charging Whether the device's battery is being charged.
693 * @param[out] out_charge Battery charge as a value between 0 and 1.
694 */
695 xrt_result_t (*get_battery_status)(struct xrt_device *xdev,
696 bool *out_present,
697 bool *out_charging,
698 float *out_charge);
699
700 /*!
701 * @brief Get the current display brightness.
702 *
703 * @param[in] xdev The device.
704 * @param[out] out_brightness Current display brightness. Usually between 0 and 1. Some devices may
705 * exceed 1 if the supported range exceeds 100%
706 */
707 xrt_result_t (*get_brightness)(struct xrt_device *xdev, float *out_brightness);
708
709 /*!
710 * @brief Set the display brightness.
711 *
712 * @param[in] xdev The device.
713 * @param[in] brightness Desired display brightness. Usually between 0 and 1. Some devices may
714 * allow exceeding 1 if the supported range exceeds 100%, but it will be clamped to
715 * the supported range.
716 * @param[in] relative Whether to add \a brightness to the current brightness, instead of overwriting
717 * the current brightness.
718 */
719 xrt_result_t (*set_brightness)(struct xrt_device *xdev, float brightness, bool relative);
720
721 /*!
722 * @brief Gets the compositor info for a device for the given mode.
723 *
724 * This function should never block, and never wait on congested locks.
725 *
726 * @param[in] xdev The device.
727 * @param[in] mode The mode to query with.
728 * @param[out] out_info Populated with the output data.
729 */
730 xrt_result_t (*get_compositor_info)(struct xrt_device *xdev,
731 const struct xrt_device_compositor_mode *mode,
732 struct xrt_device_compositor_info *out_info);
733
734 /*!
735 * Enable the feature for this device.
736 *
737 * @param[in] xdev The device.
738 * @param[in] type The type of device feature.
739 */
740 xrt_result_t (*begin_feature)(struct xrt_device *xdev, enum xrt_device_feature_type type);
741
742 /*!
743 * Disable the feature for this device.
744 *
745 * @param[in] xdev The device.
746 * @param[in] type The type of device feature.
747 */
748 xrt_result_t (*end_feature)(struct xrt_device *xdev, enum xrt_device_feature_type type);
749
750 /*!
751 * Destroy device.
752 */
753 void (*destroy)(struct xrt_device *xdev);
754
755 // Add new functions above destroy.
756};
757
758/*!
759 * Helper function for @ref xrt_device::update_inputs.
760 *
761 * @copydoc xrt_device::update_inputs
762 *
763 * @public @memberof xrt_device
764 */
765XRT_NONNULL_ALL static inline xrt_result_t
767{
768 return xdev->update_inputs(xdev);
769}
770
771/*!
772 * Helper function for @ref xrt_device::get_tracked_pose.
773 *
774 * @copydoc xrt_device::get_tracked_pose
775 *
776 * @public @memberof xrt_device
777 */
778XRT_NONNULL_ALL static inline xrt_result_t
780 enum xrt_input_name name,
781 int64_t at_timestamp_ns,
782 struct xrt_space_relation *out_relation)
783{
784 return xdev->get_tracked_pose(xdev, name, at_timestamp_ns, out_relation);
785}
786
787/*!
788 * Helper function for @ref xrt_device::get_hand_tracking.
789 *
790 * @copydoc xrt_device::get_hand_tracking
791 *
792 * @public @memberof xrt_device
793 */
794XRT_NONNULL_ALL static inline xrt_result_t
796 enum xrt_input_name name,
797 int64_t desired_timestamp_ns,
798 struct xrt_hand_joint_set *out_value,
799 int64_t *out_timestamp_ns)
800{
801 return xdev->get_hand_tracking(xdev, name, desired_timestamp_ns, out_value, out_timestamp_ns);
802}
803
804/*!
805 * Helper function for @ref xrt_device::get_face_tracking.
806 *
807 * @copydoc xrt_device::get_face_tracking
808 *
809 * @public @memberof xrt_device
810 */
811XRT_NONNULL_ALL static inline xrt_result_t
813 enum xrt_input_name facial_expression_type,
814 int64_t at_timestamp_ns,
815 struct xrt_facial_expression_set *out_value)
816{
817 return xdev->get_face_tracking(xdev, facial_expression_type, at_timestamp_ns, out_value);
818}
819
820/*!
821 * Helper function for @ref xrt_device::get_face_calibration_state_android.
822 *
823 * @copydoc xrt_device::get_face_calibration_state_android
824 *
825 * @public @memberof xrt_device
826 */
827XRT_NONNULL_ALL static inline xrt_result_t
828xrt_device_get_face_calibration_state_android(struct xrt_device *xdev, bool *out_face_is_calibrated)
829{
830 return xdev->get_face_calibration_state_android(xdev, out_face_is_calibrated);
831}
832
833/*!
834 * Helper function for @ref xrt_device::get_body_skeleton.
835 *
836 * @copydoc xrt_device::get_body_skeleton
837 *
838 * @public @memberof xrt_device
839 */
840XRT_NONNULL_ALL static inline xrt_result_t
842 enum xrt_input_name body_tracking_type,
843 struct xrt_body_skeleton *out_value)
844{
845 return xdev->get_body_skeleton(xdev, body_tracking_type, out_value);
846}
847
848/*!
849 * Helper function for @ref xrt_device::get_body_joints.
850 *
851 * @copydoc xrt_device::get_body_joints
852 *
853 * @public @memberof xrt_device
854 */
855XRT_NONNULL_ALL static inline xrt_result_t
857 enum xrt_input_name body_tracking_type,
858 int64_t desired_timestamp_ns,
859 struct xrt_body_joint_set *out_value)
860{
861 return xdev->get_body_joints(xdev, body_tracking_type, desired_timestamp_ns, out_value);
862}
863
864/*!
865 * Helper function for @ref xrt_device::reset_body_tracking_calibration_meta.
866 *
867 * @copydoc xrt_device::reset_body_tracking_calibration_meta
868 *
869 * @public @memberof xrt_device
870 */
871XRT_NONNULL_ALL static inline xrt_result_t
879
880/*!
881 * Helper function for @ref xrt_device::set_body_tracking_calibration_override_meta.
882 *
883 * @copydoc xrt_device::set_body_tracking_calibration_override_meta
884 *
885 * @public @memberof xrt_device
886 */
887XRT_NONNULL_ALL static inline xrt_result_t
889{
892 }
893 return xdev->set_body_tracking_calibration_override_meta(xdev, new_body_height);
894}
895
896/*!
897 * Helper function for @ref xrt_device::set_body_tracking_fidelity_meta.
898 *
899 * @copydoc xrt_device::set_body_tracking_fidelity_meta
900 *
901 * @public @memberof xrt_device
902 */
903XRT_NONNULL_ALL static inline xrt_result_t
904xrt_device_set_body_tracking_fidelity_meta(struct xrt_device *xdev, enum xrt_body_tracking_fidelity_meta new_fidelity)
905{
906 if (xdev->set_body_tracking_fidelity_meta == NULL) {
908 }
909 return xdev->set_body_tracking_fidelity_meta(xdev, new_fidelity);
910}
911
912/*!
913 * Helper function for @ref xrt_device::set_output.
914 *
915 * @copydoc xrt_device::set_output
916 *
917 * @public @memberof xrt_device
918 */
919XRT_NONNULL_ALL static inline xrt_result_t
920xrt_device_set_output(struct xrt_device *xdev, enum xrt_output_name name, const struct xrt_output_value *value)
921{
922 xdev->set_output(xdev, name, value);
923 return XRT_SUCCESS;
924}
925
926XRT_NONNULL_ALL static inline xrt_result_t
927xrt_device_get_output_limits(struct xrt_device *xdev, struct xrt_output_limits *limits)
928{
929 if (xdev->get_output_limits) {
930 return xdev->get_output_limits(xdev, limits);
931 } else {
933 }
934}
935
936/*!
937 * Helper function for @ref xrt_device::get_presence.
938 *
939 * @copydoc xrt_device::get_presence
940 *
941 * @public @memberof xrt_device
942 */
943XRT_NONNULL_ALL static inline xrt_result_t
944xrt_device_get_presence(struct xrt_device *xdev, bool *presence)
945{
946 if (xdev->get_presence) {
947 return xdev->get_presence(xdev, presence);
948 } else {
950 }
951}
952
953/*!
954 * Helper function for @ref xrt_device::begin_plane_detection_ext.
955 *
956 * @public @memberof xrt_device
957 */
958XRT_NONNULL_ALL static inline xrt_result_t
960 const struct xrt_plane_detector_begin_info_ext *begin_info,
961 uint64_t plane_detection_id,
962 uint64_t *out_plane_detection_id)
963{
964 return xdev->begin_plane_detection_ext(xdev, begin_info, plane_detection_id, out_plane_detection_id);
965}
966
967/*!
968 * Helper function for @ref xrt_device::destroy_plane_detection_ext.
969 *
970 * @public @memberof xrt_device
971 */
972XRT_NONNULL_ALL static inline xrt_result_t
973xrt_device_destroy_plane_detection_ext(struct xrt_device *xdev, uint64_t plane_detection_id)
974{
975 return xdev->destroy_plane_detection_ext(xdev, plane_detection_id);
976}
977
978/*!
979 * Helper function for @ref xrt_device::get_plane_detections_ext.
980 *
981 * @public @memberof xrt_device
982 */
983XRT_NONNULL_ALL static inline xrt_result_t
985 uint64_t plane_detection_id,
986 enum xrt_plane_detector_state_ext *out_state)
987{
988 return xdev->get_plane_detection_state_ext(xdev, plane_detection_id, out_state);
989}
990
991/*!
992 * Helper function for @ref xrt_device::get_plane_detections_ext.
993 *
994 * @public @memberof xrt_device
995 */
996XRT_NONNULL_ALL static inline xrt_result_t
998 uint64_t plane_detection_id,
999 struct xrt_plane_detections_ext *out_detections)
1000{
1001 return xdev->get_plane_detections_ext(xdev, plane_detection_id, out_detections);
1002}
1003
1004/*!
1005 * Helper function for @ref xrt_device::get_view_poses.
1006 *
1007 * @copydoc xrt_device::get_view_poses
1008 * @public @memberof xrt_device
1009 */
1010XRT_NONNULL_ALL static inline xrt_result_t
1012 const struct xrt_vec3 *default_eye_relation,
1013 int64_t at_timestamp_ns,
1014 enum xrt_view_type view_type,
1015 uint32_t view_count,
1016 struct xrt_space_relation *out_head_relation,
1017 struct xrt_fov *out_fovs,
1018 struct xrt_pose *out_poses)
1019{
1020 return xdev->get_view_poses( //
1021 xdev, //
1022 default_eye_relation, //
1023 at_timestamp_ns, //
1024 view_type, //
1025 view_count, //
1026 out_head_relation, //
1027 out_fovs, //
1028 out_poses); //
1029}
1030
1031/*!
1032 * Helper function for @ref xrt_device::compute_distortion.
1033 *
1034 * @copydoc xrt_device::compute_distortion
1035 *
1036 * @public @memberof xrt_device
1037 */
1038XRT_NONNULL_ALL static inline xrt_result_t
1040 struct xrt_device *xdev, uint32_t view, float u, float v, struct xrt_uv_triplet *out_result)
1041{
1042 return xdev->compute_distortion(xdev, view, u, v, out_result);
1043}
1044
1045/*!
1046 * Helper function for @ref xrt_device::get_visibility_mask.
1047 *
1048 * @copydoc xrt_device::get_visibility_mask
1049 *
1050 * @public @memberof xrt_device
1051 */
1052XRT_NONNULL_ALL static inline xrt_result_t
1054 enum xrt_visibility_mask_type type,
1055 uint32_t view_index,
1056 struct xrt_visibility_mask **out_mask)
1057{
1058 return xdev->get_visibility_mask(xdev, type, view_index, out_mask);
1059}
1060
1061/*!
1062 * Helper function for @ref xrt_device::ref_space_usage.
1063 *
1064 * @copydoc xrt_device::ref_space_usage
1065 *
1066 * @public @memberof xrt_device
1067 */
1068XRT_NONNULL_ALL static inline xrt_result_t
1070 enum xrt_reference_space_type type,
1071 enum xrt_input_name name,
1072 bool used)
1073{
1074 return xdev->ref_space_usage(xdev, type, name, used);
1075}
1076
1077/*!
1078 * Helper function for @ref xrt_device::is_form_factor_available.
1079 *
1080 * @copydoc xrt_device::is_form_factor_available
1081 *
1082 * @public @memberof xrt_device
1083 */
1084XRT_NONNULL_ALL static inline xrt_result_t
1085xrt_device_is_form_factor_available(struct xrt_device *xdev, enum xrt_form_factor form_factor, bool *out_available)
1086{
1087 return xdev->is_form_factor_available(xdev, form_factor, out_available);
1088}
1089
1090/*!
1091 * Helper function for @ref xrt_device::get_battery_status.
1092 *
1093 * @copydoc xrt_device::get_battery_status
1094 *
1095 * @public @memberof xrt_device
1096 */
1097XRT_NONNULL_ALL static inline xrt_result_t
1098xrt_device_get_battery_status(struct xrt_device *xdev, bool *out_present, bool *out_charging, float *out_charge)
1099{
1100 return xdev->get_battery_status(xdev, out_present, out_charging, out_charge);
1101}
1102
1103/*!
1104 * Helper function for @ref xrt_device::get_brightness.
1105 *
1106 * @copydoc xrt_device::get_brightness
1107 * @public @memberof xrt_device
1108 */
1109XRT_NONNULL_ALL static inline xrt_result_t
1110xrt_device_get_brightness(struct xrt_device *xdev, float *out_brightness)
1111{
1112 return xdev->get_brightness(xdev, out_brightness);
1113}
1114
1115/*!
1116 * Helper function for @ref xrt_device::set_brightness.
1117 *
1118 * @copydoc xrt_device::set_brightness
1119 * @public @memberof xrt_device
1120 */
1121XRT_NONNULL_ALL static inline xrt_result_t
1122xrt_device_set_brightness(struct xrt_device *xdev, float brightness, bool relative)
1123{
1124 return xdev->set_brightness(xdev, brightness, relative);
1125}
1126
1127/*!
1128 * Helper function for @ref xrt_device::get_compositor_info.
1129 *
1130 * @copydoc xrt_device::get_compositor_info
1131 *
1132 * @public @memberof xrt_device
1133 */
1134XRT_NONNULL_ALL static inline xrt_result_t
1136 const struct xrt_device_compositor_mode *mode,
1137 struct xrt_device_compositor_info *out_info)
1138{
1139 return xdev->get_compositor_info(xdev, mode, out_info);
1140}
1141
1142/*!
1143 * Helper function for @ref xrt_device::begin_feature.
1144 *
1145 * @copydoc xrt_device::begin_feature
1146 *
1147 * @public @memberof xrt_device
1148 */
1149XRT_NONNULL_ALL static inline xrt_result_t
1151{
1152 return xdev->begin_feature(xdev, type);
1153}
1154
1155/*!
1156 * Helper function for @ref xrt_device::end_feature.
1157 *
1158 * @copydoc xrt_device::end_feature
1159 *
1160 * @public @memberof xrt_device
1161 */
1162XRT_NONNULL_ALL static inline xrt_result_t
1164{
1165 return xdev->end_feature(xdev, type);
1166}
1167
1168/*!
1169 * Helper function for @ref xrt_device::destroy.
1170 *
1171 * Handles nulls, sets your pointer to null.
1172 *
1173 * @public @memberof xrt_device
1174 */
1175XRT_NONNULL_ALL static inline void
1177{
1178 struct xrt_device *xdev = *xdev_ptr;
1179 if (xdev == NULL) {
1180 return;
1181 }
1182
1183 xdev->destroy(xdev);
1184 *xdev_ptr = NULL;
1185}
1186
1187
1188#ifdef __cplusplus
1189} // extern "C"
1190#endif
xrt_plane_detection_capability_flags_ext
Caps for a plane detector, see xrt_device.
Definition xrt_plane_detector.h:30
xrt_visibility_mask_type
Visibility mask, mirror of XrVisibilityMaskKHR.
Definition xrt_defines.h:2467
xrt_blend_mode
Blend mode that the device supports, exact mirror of XrEnvironmentBlendMode.
Definition xrt_defines.h:112
xrt_form_factor
What form factor is this device, mostly maps onto OpenXR's XrFormFactor.
Definition xrt_defines.h:2408
xrt_input_name
Every internal input source known to monado with a baked in type.
Definition xrt_defines.h:930
enum xrt_result xrt_result_t
Result type used across Monado.
xrt_reference_space_type
Type of a OpenXR mapped reference space, maps to the semantic spaces on the xrt_space_overseer struct...
Definition xrt_defines.h:625
xrt_output_name
Name of a output with a baked in type.
Definition xrt_defines.h:1612
xrt_plane_detector_state_ext
State of a plane detector, see xrt_device.
Definition xrt_plane_detector.h:83
xrt_device_type
How an xrt_device can be used.
Definition xrt_defines.h:827
@ XRT_SUCCESS
The operation succeeded.
Definition xrt_results.h:27
@ XRT_ERROR_NOT_IMPLEMENTED
The interface function called is not implemented by its interface.
Definition xrt_results.h:192
A binding pair, going from a binding point to a device input.
Definition xrt_device.h:217
enum xrt_input_name device
To input on the device.
Definition xrt_device.h:219
enum xrt_input_name from
From which name.
Definition xrt_device.h:218
A binding pair, going from a binding point to a device output.
Definition xrt_device.h:228
enum xrt_output_name device
To output on the device.
Definition xrt_device.h:230
enum xrt_output_name from
From which name.
Definition xrt_device.h:229
A binding profile, has lists of binding pairs to goes from device in name to the device it hangs off ...
Definition xrt_device.h:240
enum xrt_device_name name
Device this binding emulates.
Definition xrt_device.h:242
Definition xrt_defines.h:2301
Definition xrt_defines.h:2198
Compositor information for a device.
Definition xrt_device.h:88
XRT_ALIGNAS(8) int64_t scanout_time_ns
The amount of time it takes to scanout the display in nanoseconds, from the start of the scanout,...
enum xrt_scanout_direction scanout_direction
The direction scanout on the display occurs.
Definition xrt_device.h:90
Compositor mode information for a device.
Definition xrt_device.h:104
int64_t frame_interval_ns
The amount of nanoseconds between frames.
Definition xrt_device.h:106
Static data of supported features of the xrt_device this struct sits on.
Definition xrt_device.h:280
A single HMD or input device.
Definition xrt_device.h:311
xrt_result_t(* set_body_tracking_fidelity_meta)(struct xrt_device *xdev, enum xrt_body_tracking_fidelity_meta new_fidelity)
XR_META_body_tracking_fidelity - body tracking extension for request changing the tracking fidelity.
Definition xrt_device.h:500
static XRT_NONNULL_ALL xrt_result_t xrt_device_end_feature(struct xrt_device *xdev, enum xrt_device_feature_type type)
Helper function for xrt_device::end_feature.
Definition xrt_device.h:1163
xrt_result_t(* get_plane_detections_ext)(struct xrt_device *xdev, uint64_t plane_detection_id, struct xrt_plane_detections_ext *out_detections)
Get results of a plane detection request.
Definition xrt_device.h:574
xrt_result_t(* get_body_skeleton)(struct xrt_device *xdev, enum xrt_input_name body_tracking_type, struct xrt_body_skeleton *out_value)
Get the body skeleton in T-pose, used to query the skeleton hierarchy, scale, proportions etc.
Definition xrt_device.h:455
xrt_result_t(* reset_body_tracking_calibration_meta)(struct xrt_device *xdev)
XR_META_body_tracking_calibration - body tracking extension to reset the body tracking calibration.
Definition xrt_device.h:481
static XRT_NONNULL_ALL xrt_result_t xrt_device_get_face_calibration_state_android(struct xrt_device *xdev, bool *out_face_is_calibrated)
Helper function for xrt_device::get_face_calibration_state_android.
Definition xrt_device.h:828
xrt_result_t(* get_body_joints)(struct xrt_device *xdev, enum xrt_input_name body_tracking_type, int64_t desired_timestamp_ns, struct xrt_body_joint_set *out_value)
Get the joint locations for a body tracker.
Definition xrt_device.h:471
xrt_result_t(* begin_plane_detection_ext)(struct xrt_device *xdev, const struct xrt_plane_detector_begin_info_ext *begin_info, uint64_t plane_detection_id, uint64_t *out_plane_detection_id)
Begin a plane detection request.
Definition xrt_device.h:540
xrt_result_t(* ref_space_usage)(struct xrt_device *xdev, enum xrt_reference_space_type type, enum xrt_input_name name, bool used)
Called by the xrt_space_overseer when a reference space that is implemented by this device is first u...
Definition xrt_device.h:669
xrt_result_t(* get_presence)(struct xrt_device *xdev, bool *presence)
Get current presence status of the device.
Definition xrt_device.h:529
xrt_result_t(* set_output)(struct xrt_device *xdev, enum xrt_output_name name, const struct xrt_output_value *value)
Set a output value.
Definition xrt_device.h:511
xrt_result_t(* compute_distortion)(struct xrt_device *xdev, uint32_t view, float u, float v, struct xrt_uv_triplet *out_result)
Compute the distortion at a single point.
Definition xrt_device.h:639
static XRT_NONNULL_ALL xrt_result_t xrt_device_begin_feature(struct xrt_device *xdev, enum xrt_device_feature_type type)
Helper function for xrt_device::begin_feature.
Definition xrt_device.h:1150
static XRT_NONNULL_ALL xrt_result_t xrt_device_get_visibility_mask(struct xrt_device *xdev, enum xrt_visibility_mask_type type, uint32_t view_index, struct xrt_visibility_mask **out_mask)
Helper function for xrt_device::get_visibility_mask.
Definition xrt_device.h:1053
xrt_result_t(* set_body_tracking_calibration_override_meta)(struct xrt_device *xdev, float new_body_height)
XR_META_body_tracking_calibration - body tracking extension to suggest a body tracking calibration ov...
Definition xrt_device.h:490
static XRT_NONNULL_ALL xrt_result_t xrt_device_get_plane_detections_ext(struct xrt_device *xdev, uint64_t plane_detection_id, struct xrt_plane_detections_ext *out_detections)
Helper function for xrt_device::get_plane_detections_ext.
Definition xrt_device.h:997
static XRT_NONNULL_ALL xrt_result_t xrt_device_update_inputs(struct xrt_device *xdev)
Helper function for xrt_device::update_inputs.
Definition xrt_device.h:766
xrt_result_t(* get_output_limits)(struct xrt_device *xdev, struct xrt_output_limits *limits)
Gets limits of this devices outputs.
Definition xrt_device.h:521
static XRT_NONNULL_ALL xrt_result_t xrt_device_get_view_poses(struct xrt_device *xdev, const struct xrt_vec3 *default_eye_relation, int64_t at_timestamp_ns, enum xrt_view_type view_type, uint32_t view_count, struct xrt_space_relation *out_head_relation, struct xrt_fov *out_fovs, struct xrt_pose *out_poses)
Helper function for xrt_device::get_view_poses.
Definition xrt_device.h:1011
static XRT_NONNULL_ALL xrt_result_t xrt_device_destroy_plane_detection_ext(struct xrt_device *xdev, uint64_t plane_detection_id)
Helper function for xrt_device::destroy_plane_detection_ext.
Definition xrt_device.h:973
xrt_result_t(* get_hand_tracking)(struct xrt_device *xdev, enum xrt_input_name name, int64_t desired_timestamp_ns, struct xrt_hand_joint_set *out_value, int64_t *out_timestamp_ns)
Get relationship of hand joints to the tracking origin space as the base space.
Definition xrt_device.h:412
xrt_result_t(* get_visibility_mask)(struct xrt_device *xdev, enum xrt_visibility_mask_type type, uint32_t view_index, struct xrt_visibility_mask **out_mask)
Get the visibility mask for this device.
Definition xrt_device.h:650
static XRT_NONNULL_ALL xrt_result_t xrt_device_set_brightness(struct xrt_device *xdev, float brightness, bool relative)
Helper function for xrt_device::set_brightness.
Definition xrt_device.h:1122
struct xrt_hmd_parts * hmd
Null if this device does not interface with the users head.
Definition xrt_device.h:323
xrt_result_t(* get_face_tracking)(struct xrt_device *xdev, enum xrt_input_name facial_expression_type, int64_t at_timestamp_ns, struct xrt_facial_expression_set *out_value)
Get the requested blend shape properties & weights for a face tracker.
Definition xrt_device.h:430
xrt_result_t(* destroy_plane_detection_ext)(struct xrt_device *xdev, uint64_t plane_detection_id)
Destroy internal resources associated with plane_detector_id.
Definition xrt_device.h:552
static XRT_NONNULL_ALL xrt_result_t xrt_device_set_body_tracking_calibration_override_meta(struct xrt_device *xdev, float new_body_height)
Helper function for xrt_device::set_body_tracking_calibration_override_meta.
Definition xrt_device.h:888
static XRT_NONNULL_ALL xrt_result_t xrt_device_get_brightness(struct xrt_device *xdev, float *out_brightness)
Helper function for xrt_device::get_brightness.
Definition xrt_device.h:1110
struct xrt_output * outputs
Array of output structs.
Definition xrt_device.h:341
xrt_result_t(* begin_feature)(struct xrt_device *xdev, enum xrt_device_feature_type type)
Enable the feature for this device.
Definition xrt_device.h:740
static XRT_NONNULL_ALL xrt_result_t xrt_device_get_presence(struct xrt_device *xdev, bool *presence)
Helper function for xrt_device::get_presence.
Definition xrt_device.h:944
size_t output_count
Number of outputs.
Definition xrt_device.h:339
static XRT_NONNULL_ALL xrt_result_t xrt_device_get_hand_tracking(struct xrt_device *xdev, enum xrt_input_name name, int64_t desired_timestamp_ns, struct xrt_hand_joint_set *out_value, int64_t *out_timestamp_ns)
Helper function for xrt_device::get_hand_tracking.
Definition xrt_device.h:795
static XRT_NONNULL_ALL xrt_result_t xrt_device_get_face_tracking(struct xrt_device *xdev, enum xrt_input_name facial_expression_type, int64_t at_timestamp_ns, struct xrt_facial_expression_set *out_value)
Helper function for xrt_device::get_face_tracking.
Definition xrt_device.h:812
xrt_result_t(* set_brightness)(struct xrt_device *xdev, float brightness, bool relative)
Set the display brightness.
Definition xrt_device.h:719
struct xrt_input * inputs
Array of input structs.
Definition xrt_device.h:336
static XRT_NONNULL_ALL xrt_result_t xrt_device_get_body_skeleton(struct xrt_device *xdev, enum xrt_input_name body_tracking_type, struct xrt_body_skeleton *out_value)
Helper function for xrt_device::get_body_skeleton.
Definition xrt_device.h:841
size_t input_count
Number of inputs.
Definition xrt_device.h:334
xrt_result_t(* get_battery_status)(struct xrt_device *xdev, bool *out_present, bool *out_charging, float *out_charge)
Get battery status information.
Definition xrt_device.h:695
static XRT_NONNULL_ALL xrt_result_t xrt_device_reset_body_tracking_calibration_meta(struct xrt_device *xdev)
Helper function for xrt_device::reset_body_tracking_calibration_meta.
Definition xrt_device.h:872
void(* destroy)(struct xrt_device *xdev)
Destroy device.
Definition xrt_device.h:753
static XRT_NONNULL_ALL xrt_result_t xrt_device_set_body_tracking_fidelity_meta(struct xrt_device *xdev, enum xrt_body_tracking_fidelity_meta new_fidelity)
Helper function for xrt_device::set_body_tracking_fidelity_meta.
Definition xrt_device.h:904
xrt_result_t(* get_brightness)(struct xrt_device *xdev, float *out_brightness)
Get the current display brightness.
Definition xrt_device.h:707
xrt_result_t(* get_compositor_info)(struct xrt_device *xdev, const struct xrt_device_compositor_mode *mode, struct xrt_device_compositor_info *out_info)
Gets the compositor info for a device for the given mode.
Definition xrt_device.h:730
static XRT_NONNULL_ALL xrt_result_t xrt_device_ref_space_usage(struct xrt_device *xdev, enum xrt_reference_space_type type, enum xrt_input_name name, bool used)
Helper function for xrt_device::ref_space_usage.
Definition xrt_device.h:1069
xrt_result_t(* get_plane_detection_state_ext)(struct xrt_device *xdev, uint64_t plane_detection_id, enum xrt_plane_detector_state_ext *out_state)
Get the state of a plane detection request.
Definition xrt_device.h:562
xrt_result_t(* update_inputs)(struct xrt_device *xdev)
Update any attached inputs.
Definition xrt_device.h:358
xrt_result_t(* get_view_poses)(struct xrt_device *xdev, const struct xrt_vec3 *default_eye_relation, int64_t at_timestamp_ns, enum xrt_view_type view_type, uint32_t view_count, struct xrt_space_relation *out_head_relation, struct xrt_fov *out_fovs, struct xrt_pose *out_poses)
Get the per-view pose in relation to the view space.
Definition xrt_device.h:616
static XRT_NONNULL_ALL xrt_result_t xrt_device_is_form_factor_available(struct xrt_device *xdev, enum xrt_form_factor form_factor, bool *out_available)
Helper function for xrt_device::is_form_factor_available.
Definition xrt_device.h:1085
static XRT_NONNULL_ALL xrt_result_t xrt_device_begin_plane_detection_ext(struct xrt_device *xdev, const struct xrt_plane_detector_begin_info_ext *begin_info, uint64_t plane_detection_id, uint64_t *out_plane_detection_id)
Helper function for xrt_device::begin_plane_detection_ext.
Definition xrt_device.h:959
xrt_result_t(* get_face_calibration_state_android)(struct xrt_device *xdev, bool *out_face_is_calibrated)
Gets the face tracking calibration state.
Definition xrt_device.h:443
static XRT_NONNULL_ALL xrt_result_t xrt_device_get_tracked_pose(struct xrt_device *xdev, enum xrt_input_name name, int64_t at_timestamp_ns, struct xrt_space_relation *out_relation)
Helper function for xrt_device::get_tracked_pose.
Definition xrt_device.h:779
struct xrt_tracking_origin * tracking_origin
Always set, pointing to the tracking system for this device.
Definition xrt_device.h:326
static XRT_NONNULL_ALL xrt_result_t xrt_device_set_output(struct xrt_device *xdev, enum xrt_output_name name, const struct xrt_output_value *value)
Helper function for xrt_device::set_output.
Definition xrt_device.h:920
xrt_result_t(* end_feature)(struct xrt_device *xdev, enum xrt_device_feature_type type)
Disable the feature for this device.
Definition xrt_device.h:748
size_t binding_profile_count
Number of bindings in xrt_device::binding_profiles.
Definition xrt_device.h:329
static XRT_NONNULL_ALL void xrt_device_destroy(struct xrt_device **xdev_ptr)
Helper function for xrt_device::destroy.
Definition xrt_device.h:1176
static XRT_NONNULL_ALL xrt_result_t xrt_device_get_compositor_info(struct xrt_device *xdev, const struct xrt_device_compositor_mode *mode, struct xrt_device_compositor_info *out_info)
Helper function for xrt_device::get_compositor_info.
Definition xrt_device.h:1135
static XRT_NONNULL_ALL xrt_result_t xrt_device_compute_distortion(struct xrt_device *xdev, uint32_t view, float u, float v, struct xrt_uv_triplet *out_result)
Helper function for xrt_device::compute_distortion.
Definition xrt_device.h:1039
enum xrt_device_name name
Enum identifier of the device.
Definition xrt_device.h:313
static XRT_NONNULL_ALL xrt_result_t xrt_device_get_battery_status(struct xrt_device *xdev, bool *out_present, bool *out_charging, float *out_charge)
Helper function for xrt_device::get_battery_status.
Definition xrt_device.h:1098
static XRT_NONNULL_ALL xrt_result_t xrt_device_get_plane_detection_state_ext(struct xrt_device *xdev, uint64_t plane_detection_id, enum xrt_plane_detector_state_ext *out_state)
Helper function for xrt_device::get_plane_detections_ext.
Definition xrt_device.h:984
static XRT_NONNULL_ALL xrt_result_t xrt_device_get_body_joints(struct xrt_device *xdev, enum xrt_input_name body_tracking_type, int64_t desired_timestamp_ns, struct xrt_body_joint_set *out_value)
Helper function for xrt_device::get_body_joints.
Definition xrt_device.h:856
xrt_result_t(* get_tracked_pose)(struct xrt_device *xdev, enum xrt_input_name name, int64_t at_timestamp_ns, struct xrt_space_relation *out_relation)
Get relationship of a tracked device to the tracking origin space as the base space.
Definition xrt_device.h:384
xrt_result_t(* is_form_factor_available)(struct xrt_device *xdev, enum xrt_form_factor form_factor, bool *out_available)
Check if given form factor is available or not.
Definition xrt_device.h:683
Definition xrt_defines.h:1967
Describes a projection matrix fov.
Definition xrt_defines.h:512
Joint set type used for hand tracking.
Definition xrt_defines.h:1521
All of the device components that deals with interfacing to a users head.
Definition xrt_device.h:117
float * vertices
Data.
Definition xrt_device.h:159
uint32_t vertex_count
Number of vertices.
Definition xrt_device.h:161
uint64_t nominal_frame_interval_ns
Nominal frame interval.
Definition xrt_device.h:129
uint32_t stride
Stride of vertices.
Definition xrt_device.h:163
int * indices
Indices, for triangle strip.
Definition xrt_device.h:168
enum xrt_distortion_model models
Supported distortion models, a bitfield.
Definition xrt_device.h:152
uint32_t index_count_total
Total number of elements in mesh::indices array.
Definition xrt_device.h:174
uint32_t uv_channels_count
1 or 3 for (chromatic aberration).
Definition xrt_device.h:165
enum xrt_distortion_model preferred
Preferred disortion model, single value.
Definition xrt_device.h:154
A single named input, that sits on a xrt_device.
Definition xrt_device.h:188
XRT_ALIGNAS(8) int64_t timestamp
alignas for 32 bit client support, see IPC Design and Implementation
bool active
Is this input active.
Definition xrt_device.h:190
A tightly packed 2x2 matrix of floats.
Definition xrt_defines.h:539
Output limits of a particular device.
Definition xrt_device.h:266
float haptic_pcm_sample_rate
The sample rate of the device's haptic PCM support, 0 if haptic PCM is not supported.
Definition xrt_device.h:268
A union of all output types.
Definition xrt_defines.h:2386
A single named output, that sits on a xrt_device.
Definition xrt_device.h:206
Each plane has n polygons; ultimately plane metadata from xrt_plane_detections_ext::locations and xrt...
Definition xrt_plane_detector.h:172
A query for a plane.
Definition xrt_plane_detector.h:97
A pose composed of a position and orientation.
Definition xrt_defines.h:492
A relation with two spaces, includes velocity and acceleration.
Definition xrt_defines.h:683
A tracking system or device origin.
Definition xrt_tracking.h:75
Represents a uv triplet for distortion, basically just three xrt_vec2.
Definition xrt_defines.h:279
A 3 element vector with single floats.
Definition xrt_defines.h:289
A per-lens/display view information.
Definition xrt_device.h:35
struct xrt_matrix_2x2 rot
Rotation 2d matrix used to rotate the position of the output of the distortion shaders onto the scree...
Definition xrt_device.h:81
struct xrt_view::@252 display
Physical properties of this display (or the part of a display that covers this view).
struct xrt_view::@251 viewport
Viewport position on the screen.
Visibility mask helper, the indices and vertices are tightly packed after this struct.
Definition xrt_visibility_mask.h:26
A union of all input types.
Definition xrt_defines.h:1537
Common defines and enums for XRT.
xrt_distortion_model
Which distortion model does the device expose, used both as a bitfield and value.
Definition xrt_defines.h:167
xrt_device_name
A enum that is used to name devices so that the state trackers can reason about the devices easier.
Definition xrt_defines.h:737
xrt_scanout_direction
Screen scanout direction.
Definition xrt_defines.h:179
xrt_view_type
View type to be rendered to by the compositor.
Definition xrt_defines.h:2417
xrt_device_feature_type
Higher level features for devices.
Definition xrt_device.h:254
Header for limits of the XRT interfaces.
Header defining planes detector enum and structs.
Header defining visibility mask helper struct.