Monado OpenXR Runtime
Loading...
Searching...
No Matches
xrt_defines.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 Common defines and enums for XRT.
7 * @author Jakob Bornecrantz <jakob@collabora.com>
8 * @author Moshi Turner <moshiturner@protonmail.com>
9 * @author Nis Madsen <nima_zero_one@protonmail.com>
10 * @author Korcan Hussein <korcan.hussein@collabora.com>
11 * @ingroup xrt_iface
12 */
13
14#pragma once
15
16#include "xrt/xrt_compiler.h"
17#include "xrt/xrt_results.h"
18
19#include <assert.h>
20#include <stdio.h>
21
22#ifdef __cplusplus
23extern "C" {
24#endif
25
26/*!
27 * Internal define for VK_UUID_SIZE and XR_UUID_SIZE_EXT.
28 *
29 * @ingroup xrt_iface
30 */
31#define XRT_UUID_SIZE 16
32
33/*!
34 * To transport UUIDs between different APIs.
35 *
36 * @ingroup xrt_iface
37 */
39{
40 uint8_t data[XRT_UUID_SIZE];
41};
42
43/*!
44 * Typedef for @ref xrt_uuid.
45 *
46 * @ingroup xrt_iface
47 */
48typedef struct xrt_uuid xrt_uuid_t;
49
50/*!
51 * Internal define for VK_LUID_SIZE.
52 *
53 * @ingroup xrt_iface
54 */
55#define XRT_LUID_SIZE 8
56
57/*!
58 * To transport LUIDs between different APIs.
59 *
60 * @ingroup xrt_iface
61 */
63{
64 uint8_t data[XRT_LUID_SIZE];
65};
66
67/*!
68 * Typedef for @ref xrt_luid.
69 *
70 * @ingroup xrt_iface
71 */
72typedef struct xrt_luid xrt_luid_t;
73
74/*!
75 * A limited unique id, it is only unique for the process it is in, so must not be
76 * used or synchronized across process boundaries. A value of zero is invalid
77 * and means it has not be properly initialised.
78 *
79 * @ingroup xrt_iface
80 */
82{
83 uint64_t data;
84};
85
86/*!
87 * Typedef for @ref xrt_limited_unique_id.
88 *
89 * @ingroup xrt_iface
90 */
92
93/*!
94 * A base class for reference counted objects.
95 *
96 * @ingroup xrt_iface
97 */
99{
100 xrt_atomic_s32_t count;
101};
102
103/*!
104 * Blend mode that the device supports, exact mirror of XrEnvironmentBlendMode.
105 *
106 * This is not a bitmask because we want to be able to express a preference order
107 * that may vary by device, etc.
108 *
109 * @ingroup xrt_iface
110 */
112{
113 XRT_BLEND_MODE_OPAQUE = 1,
114 XRT_BLEND_MODE_ADDITIVE = 2,
115 XRT_BLEND_MODE_ALPHA_BLEND = 3,
116 XRT_BLEND_MODE_MAX_ENUM,
117};
118
119#define XRT_MAX_DEVICE_BLEND_MODES 3
120
121/*!
122 * Special flags for creating passthrough.
123 */
125{
126 //! Start the passthrough on creation
128 //! Our compositor just ignores this bit.
130};
131
132/*!
133 * Specify additional state change behavior.
134 */
136{
137 //! Passthrough system requires reinitialization.
139 //! Non-recoverable error has occurred.
141 //! A recoverable error has occurred.
143 //! The runtime has recovered from a previous error and is functioning normally.
145};
146
147/*!
148 * Specify the kind of passthrough behavior the layer provides.
149 */
151{
152 //! Fullscreen layer
154 //! Projected layer.
156 //! Provided by XR_FB_passthrough_keyboard_hands
158 //! Provided by XR_FB_passthrough_keyboard_hands
160};
161
162/*!
163 * Which distortion model does the device expose,
164 * used both as a bitfield and value.
165 */
167{
168 // clang-format off
169 XRT_DISTORTION_MODEL_NONE = 1u << 0u,
170 XRT_DISTORTION_MODEL_COMPUTE = 1u << 1u,
171 XRT_DISTORTION_MODEL_MESHUV = 1u << 2u,
172 // clang-format on
173};
174
175/*!
176 * The type of panel refresh the device has.
177 */
179{
180 //! entire panel refreshes simultaneously
182 //! panel refreshes progressively along scanout direction, e.g. OLED panels
184};
185
186/*!
187 * Screen scanout direction
188 */
190{
191 // clang-format off
192 XRT_SCANOUT_DIRECTION_NONE = 0,
193 XRT_SCANOUT_DIRECTION_TOP_TO_BOTTOM,
194 XRT_SCANOUT_DIRECTION_BOTTOM_TO_TOP,
195 XRT_SCANOUT_DIRECTION_LEFT_TO_RIGHT,
196 XRT_SCANOUT_DIRECTION_RIGHT_TO_LEFT,
197 // clang-format on
198};
199
200/*!
201 * Common formats, use `u_format_*` functions to reason about them.
202 */
204{
205 XRT_FORMAT_R8G8B8X8,
206 XRT_FORMAT_R8G8B8A8,
207 XRT_FORMAT_R8G8B8,
208 XRT_FORMAT_R8G8,
209 XRT_FORMAT_R8,
210
211 XRT_FORMAT_BAYER_GR8,
212
213 XRT_FORMAT_L8, // Luminence, R = L, G = L, B = L.
214
215 XRT_FORMAT_BITMAP_8X1, // One bit format tiled in 8x1 blocks.
216 XRT_FORMAT_BITMAP_8X8, // One bit format tiled in 8X8 blocks.
217
218 XRT_FORMAT_YUV888,
219 XRT_FORMAT_YUYV422,
220 XRT_FORMAT_UYVY422,
221
222 XRT_FORMAT_MJPEG,
223
224 XRT_FORMAT_BC4,
225};
226
227/*!
228 * What type of stereo format a frame has.
229 *
230 * @ingroup xrt_iface
231 */
233{
234 XRT_STEREO_FORMAT_NONE,
235 XRT_STEREO_FORMAT_SBS, //!< Side by side.
236 XRT_STEREO_FORMAT_INTERLEAVED, //!< Interleaved pixels.
237 XRT_STEREO_FORMAT_OAU, //!< Over & Under.
238};
239
240/*!
241 * A quaternion with single floats.
242 *
243 * @ingroup xrt_iface math
244 */
246{
247 float x;
248 float y;
249 float z;
250 float w;
251};
252
253/*!
254 * Identity value for @ref xrt_quat
255 *
256 * @ingroup xrt_iface math
257 * @relates xrt_quat
258 */
259// clang-format off
260#define XRT_QUAT_IDENTITY {0.f, 0.f, 0.f, 1.f}
261// clang-format on
262
263/*!
264 * A 1 element vector with single floats.
265 *
266 * @ingroup xrt_iface math
267 */
269{
270 float x;
271};
272
273/*!
274 * A 2 element vector with single floats.
275 *
276 * @ingroup xrt_iface math
277 */
279{
280 float x;
281 float y;
282};
283
284/*!
285 * All-zero value for @ref xrt_vec2
286 *
287 * @ingroup xrt_iface math
288 * @relates xrt_vec2
289 */
290// clang-format off
291#define XRT_VEC2_ZERO {0.f, 0.f}
292// clang-format on
293
294/*!
295 * Represents a uv triplet for distortion, basically just three xrt_vec2.
296 *
297 * @ingroup xrt_iface_math
298 */
300{
301 struct xrt_vec2 r, g, b;
302};
303
304/*!
305 * A 3 element vector with single floats.
306 *
307 * @ingroup xrt_iface math
308 */
310{
311 float x;
312 float y;
313 float z;
314};
315
316/*!
317 * A 3 element vector with single doubles.
318 *
319 * @ingroup xrt_iface math
320 */
322{
323 double x;
324 double y;
325 double z;
326};
327
328/*!
329 * All-zero value for @ref xrt_vec3
330 *
331 * @ingroup xrt_iface math
332 * @relates xrt_vec3
333 */
334// clang-format off
335#define XRT_VEC3_ZERO {0.f, 0.f, 0.f}
336// clang-format on
337/*!
338 * All-one value for @ref xrt_vec3
339 *
340 * @ingroup xrt_iface math
341 * @relates xrt_vec3
342 */
343// clang-format off
344#define XRT_VEC3_ONE {1.f, 1.f, 1.f}
345// clang-format on
346/*!
347 * Value for @ref xrt_vec3 with 1 in the @p x coordinate.
348 *
349 * @ingroup xrt_iface math
350 * @relates xrt_vec3
351 */
352// clang-format off
353#define XRT_VEC3_UNIT_X {1.f, 0.f, 0.f}
354// clang-format on
355/*!
356 * Value for @ref xrt_vec3 with 1 in the @p y coordinate.
357 *
358 * @ingroup xrt_iface math
359 * @relates xrt_vec3
360 */
361// clang-format off
362#define XRT_VEC3_UNIT_Y {0.f, 1.f, 0.f}
363// clang-format on
364/*!
365 * Value for @ref xrt_vec3 with 1 in the @p z coordinate.
366 *
367 * @ingroup xrt_iface math
368 * @relates xrt_vec3
369 */
370// clang-format off
371#define XRT_VEC3_UNIT_Z {0.f, 0.f, 1.f}
372// clang-format on
373
374/*!
375 * A 3 element vector with 32 bit integers.
376 *
377 * @ingroup xrt_iface math
378 */
380{
381 int32_t x;
382 int32_t y;
383 int32_t z;
384};
385
386/*!
387 * A 2 element vector with 32 bit integers.
388 *
389 * @ingroup xrt_iface math
390 */
392{
393 int32_t x;
394 int32_t y;
395};
396
397/*!
398 * A 3 element colour with 8 bits per channel.
399 *
400 * @ingroup xrt_iface math
401 */
403{
404 uint8_t r;
405 uint8_t g;
406 uint8_t b;
407};
408
409/*!
410 * A 4 element colour with 8 bits per channel.
411 *
412 * @ingroup xrt_iface math
413 */
415{
416 uint8_t r;
417 uint8_t g;
418 uint8_t b;
419 uint8_t a;
420};
421
422/*!
423 * A 3 element colour with floating point channels.
424 *
425 * @ingroup xrt_iface math
426 */
428{
429 float r;
430 float g;
431 float b;
432};
433
434/*!
435 * A 3 element HSV colour with floating point channels.
436 * All values are in [0, 1] range, with hue wrapping at 1.
437 *
438 * @ingroup xrt_iface math
439 */
441{
442 float h;
443 float s;
444 float v;
445};
446
447/*!
448 * A 4 element colour with floating point channels.
449 *
450 * @ingroup xrt_iface math
451 */
453{
454 float r;
455 float g;
456 float b;
457 float a;
458};
459
460/*!
461 * Image size.
462 *
463 * @ingroup xrt_iface math
464 */
466{
467 int w;
468 int h;
469};
470
471/*!
472 * Image offset.
473 *
474 * @ingroup xrt_iface math
475 */
477{
478 int w, h;
479};
480
481/*!
482 * Image rectangle.
483 *
484 * @ingroup xrt_iface math
485 */
487{
488 struct xrt_offset offset;
489 struct xrt_size extent;
490};
491
492/*!
493 * Image rectangle
494 *
495 * @todo Unify xrt_rect and xrt_rect_f32 field names
496 *
497 * @ingroup xrt_iface math
498 */
500{
501 float x, y, w, h;
502};
503
504/*!
505 * Normalized image rectangle, coordinates and size in 0 .. 1 range.
506 *
507 * @ingroup xrt_iface math
508 */
510{
511 float x, y, w, h;
512};
513
514/*!
515 * A pose composed of a position and orientation.
516 *
517 * @see xrt_quat
518 * @see xrt_vec3
519 * @ingroup xrt_iface math
520 */
522{
523 struct xrt_quat orientation;
524 struct xrt_vec3 position;
525};
526/*!
527 * Identity value for @ref xrt_pose
528 *
529 * @ingroup xrt_iface math
530 * @relates xrt_pose
531 */
532// clang-format off
533#define XRT_POSE_IDENTITY {XRT_QUAT_IDENTITY, XRT_VEC3_ZERO}
534// clang-format on
535
536/*!
537 * Describes a projection matrix fov.
538 *
539 * @ingroup xrt_iface math
540 */
542{
543 float angle_left;
544 float angle_right;
545 float angle_up;
546 float angle_down;
547};
548
549/*!
550 * The number of values in @ref xrt_matrix_2x2
551 *
552 * @ingroup xrt_iface math
553 */
554#define XRT_MATRIX_2X2_ELEMENTS 4
555
556/*!
557 * The number of 2d vectors in @ref xrt_matrix_2x2
558 *
559 * @ingroup xrt_iface math
560 */
561#define XRT_MATRIX_2X2_VECS 2
562
563/*!
564 * A tightly packed 2x2 matrix of floats.
565 *
566 * @ingroup xrt_iface math
567 */
569{
570 union {
572 struct xrt_vec2 vecs[XRT_MATRIX_2X2_VECS];
573 };
574};
575
576/*!
577 * The number of values in @ref xrt_matrix_3x3
578 *
579 * @ingroup xrt_iface math
580 */
581#define XRT_MATRIX_3X3_ELEMENTS 9
582
583/*!
584 * A tightly packed 3x3 matrix of floats.
585 *
586 * @ingroup xrt_iface math
587 */
589{
591};
592
593/*!
594 * A tightly packed 3x3 matrix of doubles.
595 *
596 * @ingroup xrt_iface math
597 */
599{
600 double v[XRT_MATRIX_3X3_ELEMENTS];
601};
602
603/*!
604 * The number of values in a 4x4 matrix like @ref xrt_matrix_4x4 and @ref xrt_matrix_4x4_f64
605 *
606 * @ingroup xrt_iface math
607 */
608#define XRT_MATRIX_4X4_ELEMENTS 16
609
610/*!
611 * A tightly packed 4x4 matrix of floats.
612 *
613 * @ingroup xrt_iface math
614 */
616{
618};
619
620/*!
621 * A tightly packed 4x4 matrix of double.
622 *
623 * @ingroup xrt_iface math
624 */
626{
627 double v[XRT_MATRIX_4X4_ELEMENTS];
628};
629
630/*!
631 * A range of API versions supported.
632 *
633 * @ingroup xrt_iface math
634 */
636{
637 uint32_t min_major;
638 uint32_t min_minor;
639 uint32_t min_patch;
640
641 uint32_t max_major;
642 uint32_t max_minor;
643 uint32_t max_patch;
644};
645
646/*!
647 * Type of a OpenXR mapped reference space, maps to the semantic spaces on the
648 * @ref xrt_space_overseer struct. This is used to refer to indirectly for
649 * instance when letting the overseer know that an application is using a
650 * particular reference space.
651 *
652 * @ingroup xrt_iface
653 */
655{
656 XRT_SPACE_REFERENCE_TYPE_VIEW,
657 XRT_SPACE_REFERENCE_TYPE_LOCAL,
658 XRT_SPACE_REFERENCE_TYPE_LOCAL_FLOOR,
659 XRT_SPACE_REFERENCE_TYPE_STAGE,
660 XRT_SPACE_REFERENCE_TYPE_UNBOUNDED,
661};
662
663/*!
664 * The number of enumerations in @ref xrt_reference_space_type.
665 *
666 * @ingroup xrt_iface
667 */
668#define XRT_SPACE_REFERENCE_TYPE_COUNT (XRT_SPACE_REFERENCE_TYPE_UNBOUNDED + 1)
669
670/*!
671 * An invalid @ref xrt_reference_space_type, since it's invalid it's not listed
672 * in the enum.
673 *
674 * @ingroup xrt_iface
675 */
676#define XRT_SPACE_REFERENCE_TYPE_INVALID ((enum xrt_reference_space_type)(-1))
677
678/*!
679 * Flags of which components of a @ref xrt_space_relation is valid.
680 *
681 * @see xrt_space_relation
682 * @ingroup xrt_iface math
683 */
685{
686 // clang-format off
687 XRT_SPACE_RELATION_ORIENTATION_VALID_BIT = (1u << 0u),
688 XRT_SPACE_RELATION_POSITION_VALID_BIT = (1u << 1u),
689 XRT_SPACE_RELATION_LINEAR_VELOCITY_VALID_BIT = (1u << 2u),
690 XRT_SPACE_RELATION_ANGULAR_VELOCITY_VALID_BIT = (1u << 3u),
691 XRT_SPACE_RELATION_ORIENTATION_TRACKED_BIT = (1u << 4u),
692 XRT_SPACE_RELATION_POSITION_TRACKED_BIT = (1u << 5u),
693 // clang-format on
694 XRT_SPACE_RELATION_BITMASK_ALL = (uint32_t)XRT_SPACE_RELATION_ORIENTATION_VALID_BIT | //
695 (uint32_t)XRT_SPACE_RELATION_POSITION_VALID_BIT | //
696 (uint32_t)XRT_SPACE_RELATION_LINEAR_VELOCITY_VALID_BIT | //
697 (uint32_t)XRT_SPACE_RELATION_ANGULAR_VELOCITY_VALID_BIT | //
698 (uint32_t)XRT_SPACE_RELATION_ORIENTATION_TRACKED_BIT | //
699 (uint32_t)XRT_SPACE_RELATION_POSITION_TRACKED_BIT,
700 XRT_SPACE_RELATION_BITMASK_NONE = 0,
701};
702
703/*!
704 * A relation with two spaces, includes velocity and acceleration.
705 *
706 * @see xrt_quat
707 * @see xrt_vec3
708 * @see xrt_pose
709 * @see xrt_space_relation_flags
710 * @ingroup xrt_iface math
711 */
713{
714 enum xrt_space_relation_flags relation_flags;
715 struct xrt_pose pose;
716 struct xrt_vec3 linear_velocity;
717 struct xrt_vec3 angular_velocity;
718};
719
720/*!
721 * A zero/identity value for @ref xrt_space_relation
722 *
723 * @note Despite this initializing all members (to zero or identity), this sets the xrt_space_relation::relation_flags
724 * to XRT_SPACE_RELATION_BITMASK_NONE - so this is safe to assign before an error return, etc.
725 *
726 * @ingroup xrt_iface math
727 * @relates xrt_space_relation
728 */
729// clang-format off
730#define XRT_SPACE_RELATION_ZERO {XRT_SPACE_RELATION_BITMASK_NONE, XRT_POSE_IDENTITY, XRT_VEC3_ZERO, XRT_VEC3_ZERO}
731// clang-format on
732
733/*!
734 * The maximum number of steps that can be in a relation chain.
735 *
736 * @see xrt_relation_chain::steps
737 * @relates xrt_relation_chain
738 * @ingroup xrt_iface math
739 */
740#define XRT_RELATION_CHAIN_CAPACITY 8
741
742/*!
743 * A chain of space relations and their associated validity flags.
744 * Functions for manipulating this are available in `math/m_space.h`.
745 *
746 * @see xrt_space_relation
747 * @ingroup xrt_iface math
748 */
750{
752 uint32_t step_count;
753};
754
755
756/*
757 *
758 * Input related enums and structs.
759 *
760 */
761
762/*!
763 * A enum that is used to name devices so that the
764 * state trackers can reason about the devices easier.
765 */
767{
768 XRT_DEVICE_INVALID,
769
770 XRT_DEVICE_GENERIC_HMD,
771
772 // Vive stuff.
773 XRT_DEVICE_VIVE_PRO,
774 XRT_DEVICE_VIVE_PRO2,
775 XRT_DEVICE_VIVE_WAND,
776 XRT_DEVICE_VIVE_TRACKER, // Generic, only used for bindings.
777 XRT_DEVICE_VIVE_TRACKER_GEN1,
778 XRT_DEVICE_VIVE_TRACKER_GEN2,
779 XRT_DEVICE_VIVE_TRACKER_GEN3,
780 XRT_DEVICE_VIVE_TRACKER_TUNDRA,
781
782 // "Controllers" somewhat sorted as listed in spec.
783 XRT_DEVICE_SIMPLE_CONTROLLER,
784 XRT_DEVICE_DAYDREAM,
785 XRT_DEVICE_WMR_CONTROLLER,
786 XRT_DEVICE_XBOX_CONTROLLER,
787 XRT_DEVICE_GO_CONTROLLER,
788 XRT_DEVICE_TOUCH_CONTROLLER,
789 XRT_DEVICE_INDEX_CONTROLLER,
790
791 XRT_DEVICE_HP_REVERB_G2_CONTROLLER,
792 XRT_DEVICE_SAMSUNG_ODYSSEY_CONTROLLER,
793 XRT_DEVICE_LOGITECH_MX_INK_CONTROLLER,
794 XRT_DEVICE_ML2_CONTROLLER,
795 XRT_DEVICE_OPPO_MR_CONTROLLER,
796
797 XRT_DEVICE_HAND_INTERACTION,
798
799 XRT_DEVICE_EYE_GAZE_INTERACTION,
800
801 XRT_DEVICE_PSMV,
802 XRT_DEVICE_PSSENSE,
803 XRT_DEVICE_HYDRA,
804 XRT_DEVICE_RIFT_REMOTE,
805 XRT_DEVICE_BLUBUR_S1,
806 XRT_DEVICE_PSVR2,
807 XRT_DEVICE_FLIPVR,
808 XRT_DEVICE_CONTACTGLOVE2,
809 XRT_DEVICE_CONTACTGLOVE2_WITH_MAGNETRA2,
810
811 // Other misc stuff.
812 XRT_DEVICE_HAND_TRACKER,
813 XRT_DEVICE_REALSENSE,
814 XRT_DEVICE_DEPTHAI,
815
816 //! XR_EXT_hand_interaction
818
819 //! XR_ANDROID_face_tracking
821
822 //! XR_HTC_facial_tracking
824
825 //! XR_FB_body_tracking
827
828 //! XR_FB_face_tracking2
830
831 // added in OpenXR 1.1
832 XRT_DEVICE_PICO_NEO3_CONTROLLER,
833 XRT_DEVICE_PICO4_CONTROLLER,
834 XRT_DEVICE_PICO_G3_CONTROLLER,
835
836 XRT_DEVICE_VIVE_COSMOS_CONTROLLER,
837 XRT_DEVICE_VIVE_FOCUS3_CONTROLLER,
838
839 XRT_DEVICE_TOUCH_PRO_CONTROLLER,
840 XRT_DEVICE_TOUCH_PLUS_CONTROLLER,
841 XRT_DEVICE_TOUCH_CONTROLLER_RIFT_CV1,
842 XRT_DEVICE_TOUCH_CONTROLLER_QUEST_1_RIFT_S,
843 XRT_DEVICE_TOUCH_CONTROLLER_QUEST_2,
844
845 // XR_KHR_generic_controller
846 XRT_DEVICE_GENERIC_CONTROLLER,
847
848 // Hand based controller emulation.
849 XRT_DEVICE_HAND_CTRL_EMU,
850};
851
852/*!
853 * How an xrt_device can be used.
854 *
855 * @ingroup xrt_iface
856 */
858{
859 XRT_DEVICE_TYPE_UNKNOWN = 0,
860 XRT_DEVICE_TYPE_HMD,
861 XRT_DEVICE_TYPE_RIGHT_HAND_CONTROLLER,
862 XRT_DEVICE_TYPE_LEFT_HAND_CONTROLLER,
863 XRT_DEVICE_TYPE_ANY_HAND_CONTROLLER,
864 XRT_DEVICE_TYPE_GAMEPAD,
865 XRT_DEVICE_TYPE_GENERIC_TRACKER,
866 XRT_DEVICE_TYPE_HAND_TRACKER,
867 XRT_DEVICE_TYPE_EYE_TRACKER,
868 XRT_DEVICE_TYPE_FACE_TRACKER,
869 XRT_DEVICE_TYPE_BODY_TRACKER,
870};
871
872/*!
873 * Base type of this inputs.
874 *
875 * @ingroup xrt_iface
876 */
878{
879 // clang-format off
880 //! Float input in [0, 1]
882 //! Float input in [-1, 1]
884 //! Vec2 input, components in [-1, 1]
886 //! Vec3 input, components in [-1, 1]
888 //! Boolean (digital, binary) input
890 //! A tracked pose
892 //! A tracked hand
894 //! A tracked face
896 //! A tracked body
898 // clang-format on
899};
900
901/*!
902 * The number of bits reserved for the input type in @ref xrt_input_name
903 *
904 * @see xrt_input_name
905 * @ingroup xrt_iface
906 */
907#define XRT_INPUT_TYPE_BITWIDTH 8u
908
909/*!
910 * The mask associated with @ref XRT_INPUT_TYPE_BITWIDTH
911 *
912 * @see xrt_input_name
913 * @ingroup xrt_iface
914 */
915
916#define XRT_INPUT_TYPE_BITMASK 0xffu
917
918/*!
919 * @brief Create an enum value for xrt_input_name that packs an ID and input
920 * type.
921 *
922 * @param id an integer
923 * @param type The suffix of an xrt_input_type value name: `XRT_INPUT_TYPE_` is
924 * prepended automatically.
925 *
926 * @see xrt_input_name
927 * @ingroup xrt_iface
928 */
929#define XRT_INPUT_NAME(id, type) ((UINT32_C(id) << XRT_INPUT_TYPE_BITWIDTH) | (uint32_t)XRT_INPUT_TYPE_##type)
930
931/*!
932 * @brief Extract the xrt_input_type from an xrt_input_name.
933 *
934 * @param name An xrt_input_name value
935 *
936 * @relates xrt_input_name
937 * @returns @ref xrt_input_type
938 * @ingroup xrt_iface
939 */
940#define XRT_GET_INPUT_TYPE(name) ((enum xrt_input_type)(name & XRT_INPUT_TYPE_BITMASK))
941
942/*!
943 * @brief Extract the xrt_input_name id from an xrt_input_name.
944 *
945 * @param name An xrt_input_name value
946 *
947 * @relates xrt_input_name
948 * @returns @ref xrt_input_type
949 * @ingroup xrt_iface
950 */
951#define XRT_GET_INPUT_ID(name) ((uint32_t)(name >> XRT_INPUT_TYPE_BITWIDTH))
952
953/*!
954 * Every internal input source known to monado with a baked in type.
955 * Values are maintained in XRT_INPUT_LIST.
956 *
957 * @see xrt_input_type
958 * @ingroup xrt_iface
959 */
961{
962 // clang-format off
963 //! Not a real input. Sentinel for "no input", distinct from any XRT_INPUT_NAME value.
965 //! Standard pose used for rendering
967 XRT_INPUT_GENERIC_HEAD_DETECT = XRT_INPUT_NAME(0x0001, BOOLEAN),
968 XRT_INPUT_HT_UNOBSTRUCTED_LEFT = XRT_INPUT_NAME(0x0002, HAND_TRACKING),
969 XRT_INPUT_HT_UNOBSTRUCTED_RIGHT = XRT_INPUT_NAME(0x0003, HAND_TRACKING),
970 XRT_INPUT_HT_CONFORMING_LEFT = XRT_INPUT_NAME(0x0004, HAND_TRACKING),
971 XRT_INPUT_HT_CONFORMING_RIGHT = XRT_INPUT_NAME(0x0005, HAND_TRACKING),
972 XRT_INPUT_GENERIC_TRACKER_POSE = XRT_INPUT_NAME(0x0006, POSE),
973 //! XR_EXT_palm_pose
975
976 //! XR_EXT_eye_gaze_interaction
978 // Standard non-view reference spaces
979 XRT_INPUT_GENERIC_LOCAL_SPACE_POSE = XRT_INPUT_NAME(0x0009, POSE),
980 XRT_INPUT_GENERIC_LOCAL_FLOOR_SPACE_POSE = XRT_INPUT_NAME(0x000A, POSE),
981 XRT_INPUT_GENERIC_STAGE_SPACE_POSE = XRT_INPUT_NAME(0x000B, POSE),
982 XRT_INPUT_GENERIC_UNBOUNDED_SPACE_POSE = XRT_INPUT_NAME(0x000C, POSE),
983
984 XRT_INPUT_SIMPLE_SELECT_CLICK = XRT_INPUT_NAME(0x0010, BOOLEAN),
985 XRT_INPUT_SIMPLE_MENU_CLICK = XRT_INPUT_NAME(0x0011, BOOLEAN),
986 XRT_INPUT_SIMPLE_GRIP_POSE = XRT_INPUT_NAME(0x0012, POSE),
987 XRT_INPUT_SIMPLE_AIM_POSE = XRT_INPUT_NAME(0x0013, POSE),
988
989 // XR_KHR_generic_controller
990 XRT_INPUT_GENERIC_PRIMARY_CLICK = XRT_INPUT_NAME(0x0014, BOOLEAN),
991 XRT_INPUT_GENERIC_SECONDARY_CLICK = XRT_INPUT_NAME(0x0015, BOOLEAN),
992 XRT_INPUT_GENERIC_THUMBSTICK_CLICK = XRT_INPUT_NAME(0x0016, BOOLEAN),
993 XRT_INPUT_GENERIC_THUMBSTICK = XRT_INPUT_NAME(0x0017, VEC2_MINUS_ONE_TO_ONE),
994 XRT_INPUT_GENERIC_SQUEEZE_VALUE = XRT_INPUT_NAME(0x0018, VEC1_ZERO_TO_ONE),
995 XRT_INPUT_GENERIC_TRIGGER_VALUE = XRT_INPUT_NAME(0x0019, VEC1_ZERO_TO_ONE),
996 XRT_INPUT_GENERIC_GRIP_POSE = XRT_INPUT_NAME(0x001A, POSE),
997 XRT_INPUT_GENERIC_GRIP_SURFACE_POSE = XRT_INPUT_NAME(0x001B, POSE),
998 XRT_INPUT_GENERIC_AIM_POSE = XRT_INPUT_NAME(0x001C, POSE),
999
1000 XRT_INPUT_PSMV_PS_CLICK = XRT_INPUT_NAME(0x0020, BOOLEAN),
1001 XRT_INPUT_PSMV_MOVE_CLICK = XRT_INPUT_NAME(0x0021, BOOLEAN),
1002 XRT_INPUT_PSMV_START_CLICK = XRT_INPUT_NAME(0x0022, BOOLEAN),
1003 XRT_INPUT_PSMV_SELECT_CLICK = XRT_INPUT_NAME(0x0023, BOOLEAN),
1004 XRT_INPUT_PSMV_SQUARE_CLICK = XRT_INPUT_NAME(0x0024, BOOLEAN),
1005 XRT_INPUT_PSMV_CROSS_CLICK = XRT_INPUT_NAME(0x0025, BOOLEAN),
1006 XRT_INPUT_PSMV_CIRCLE_CLICK = XRT_INPUT_NAME(0x0026, BOOLEAN),
1007 XRT_INPUT_PSMV_TRIANGLE_CLICK = XRT_INPUT_NAME(0x0027, BOOLEAN),
1008 XRT_INPUT_PSMV_TRIGGER_VALUE = XRT_INPUT_NAME(0x0028, VEC1_ZERO_TO_ONE),
1009 XRT_INPUT_PSMV_GRIP_POSE = XRT_INPUT_NAME(0x0029, POSE),
1010 XRT_INPUT_PSMV_AIM_POSE = XRT_INPUT_NAME(0x002A, POSE),
1011 XRT_INPUT_PSMV_BODY_CENTER_POSE = XRT_INPUT_NAME(0x002B, POSE),
1012 XRT_INPUT_PSMV_BALL_CENTER_POSE = XRT_INPUT_NAME(0x002C, POSE),
1013
1014 XRT_INPUT_HYDRA_1_CLICK = XRT_INPUT_NAME(0x0030, BOOLEAN),
1015 XRT_INPUT_HYDRA_2_CLICK = XRT_INPUT_NAME(0x0031, BOOLEAN),
1016 XRT_INPUT_HYDRA_3_CLICK = XRT_INPUT_NAME(0x0032, BOOLEAN),
1017 XRT_INPUT_HYDRA_4_CLICK = XRT_INPUT_NAME(0x0033, BOOLEAN),
1018 XRT_INPUT_HYDRA_MIDDLE_CLICK = XRT_INPUT_NAME(0x0034, BOOLEAN),
1019 XRT_INPUT_HYDRA_BUMPER_CLICK = XRT_INPUT_NAME(0x0035, BOOLEAN),
1020 XRT_INPUT_HYDRA_JOYSTICK_CLICK = XRT_INPUT_NAME(0x0036, BOOLEAN),
1021 XRT_INPUT_HYDRA_JOYSTICK_VALUE = XRT_INPUT_NAME(0x0037, VEC2_MINUS_ONE_TO_ONE),
1022 XRT_INPUT_HYDRA_TRIGGER_VALUE = XRT_INPUT_NAME(0x0038, VEC1_ZERO_TO_ONE),
1023 XRT_INPUT_HYDRA_AIM_POSE = XRT_INPUT_NAME(0x0039, POSE),
1024 XRT_INPUT_HYDRA_GRIP_POSE = XRT_INPUT_NAME(0x0040, POSE),
1025
1026 XRT_INPUT_DAYDREAM_TOUCHPAD_CLICK = XRT_INPUT_NAME(0x0040, BOOLEAN),
1027 XRT_INPUT_DAYDREAM_BAR_CLICK = XRT_INPUT_NAME(0x0041, BOOLEAN),
1028 XRT_INPUT_DAYDREAM_CIRCLE_CLICK = XRT_INPUT_NAME(0x0042, BOOLEAN),
1029 XRT_INPUT_DAYDREAM_VOLUP_CLICK = XRT_INPUT_NAME(0x0043, BOOLEAN),
1030 XRT_INPUT_DAYDREAM_VOLDN_CLICK = XRT_INPUT_NAME(0x0044, BOOLEAN),
1031 XRT_INPUT_DAYDREAM_TOUCHPAD = XRT_INPUT_NAME(0x0045, VEC2_MINUS_ONE_TO_ONE),
1032 XRT_INPUT_DAYDREAM_POSE = XRT_INPUT_NAME(0x0046, POSE),
1033 XRT_INPUT_DAYDREAM_TOUCHPAD_TOUCH = XRT_INPUT_NAME(0x0047, BOOLEAN),
1034
1035 XRT_INPUT_INDEX_SYSTEM_CLICK = XRT_INPUT_NAME(0x0050, BOOLEAN),
1036 XRT_INPUT_INDEX_SYSTEM_TOUCH = XRT_INPUT_NAME(0x0051, BOOLEAN),
1037 XRT_INPUT_INDEX_A_CLICK = XRT_INPUT_NAME(0x0052, BOOLEAN),
1038 XRT_INPUT_INDEX_A_TOUCH = XRT_INPUT_NAME(0x0053, BOOLEAN),
1039 XRT_INPUT_INDEX_B_CLICK = XRT_INPUT_NAME(0x0054, BOOLEAN),
1040 XRT_INPUT_INDEX_B_TOUCH = XRT_INPUT_NAME(0x0055, BOOLEAN),
1041 XRT_INPUT_INDEX_SQUEEZE_VALUE = XRT_INPUT_NAME(0x0056, VEC1_ZERO_TO_ONE),
1042 XRT_INPUT_INDEX_SQUEEZE_FORCE = XRT_INPUT_NAME(0x0057, VEC1_ZERO_TO_ONE),
1043 XRT_INPUT_INDEX_TRIGGER_CLICK = XRT_INPUT_NAME(0x0058, BOOLEAN),
1044 XRT_INPUT_INDEX_TRIGGER_VALUE = XRT_INPUT_NAME(0x0059, VEC1_ZERO_TO_ONE),
1045 XRT_INPUT_INDEX_TRIGGER_TOUCH = XRT_INPUT_NAME(0x005A, BOOLEAN),
1046 XRT_INPUT_INDEX_THUMBSTICK = XRT_INPUT_NAME(0x005B, VEC2_MINUS_ONE_TO_ONE),
1047 XRT_INPUT_INDEX_THUMBSTICK_CLICK = XRT_INPUT_NAME(0x005D, BOOLEAN),
1048 XRT_INPUT_INDEX_THUMBSTICK_TOUCH = XRT_INPUT_NAME(0x005E, BOOLEAN),
1049 XRT_INPUT_INDEX_TRACKPAD = XRT_INPUT_NAME(0x005F, VEC2_MINUS_ONE_TO_ONE),
1050 XRT_INPUT_INDEX_TRACKPAD_FORCE = XRT_INPUT_NAME(0x0061, VEC1_ZERO_TO_ONE),
1051 XRT_INPUT_INDEX_TRACKPAD_TOUCH = XRT_INPUT_NAME(0x0062, BOOLEAN),
1052 XRT_INPUT_INDEX_GRIP_POSE = XRT_INPUT_NAME(0x0063, POSE),
1053 XRT_INPUT_INDEX_AIM_POSE = XRT_INPUT_NAME(0x0064, POSE),
1054
1055 XRT_INPUT_VIVE_SYSTEM_CLICK = XRT_INPUT_NAME(0x0070, BOOLEAN),
1056 XRT_INPUT_VIVE_SQUEEZE_CLICK = XRT_INPUT_NAME(0x0071, BOOLEAN),
1057 XRT_INPUT_VIVE_MENU_CLICK = XRT_INPUT_NAME(0x0072, BOOLEAN),
1058 XRT_INPUT_VIVE_TRIGGER_CLICK = XRT_INPUT_NAME(0x0073, BOOLEAN),
1059 XRT_INPUT_VIVE_TRIGGER_VALUE = XRT_INPUT_NAME(0x0074, VEC1_ZERO_TO_ONE),
1060 XRT_INPUT_VIVE_TRACKPAD = XRT_INPUT_NAME(0x0075, VEC2_MINUS_ONE_TO_ONE),
1061 XRT_INPUT_VIVE_TRACKPAD_CLICK = XRT_INPUT_NAME(0x0076, BOOLEAN),
1062 XRT_INPUT_VIVE_TRACKPAD_TOUCH = XRT_INPUT_NAME(0x0077, BOOLEAN),
1063 XRT_INPUT_VIVE_GRIP_POSE = XRT_INPUT_NAME(0x0078, POSE),
1064 XRT_INPUT_VIVE_AIM_POSE = XRT_INPUT_NAME(0x0079, POSE),
1065
1066 XRT_INPUT_VIVE_PRO_SYSTEM_CLICK = XRT_INPUT_NAME(0x0080, BOOLEAN),
1067 XRT_INPUT_VIVE_PRO_VOLUP_CLICK = XRT_INPUT_NAME(0x0081, BOOLEAN),
1068 XRT_INPUT_VIVE_PRO_VOLDN_CLICK = XRT_INPUT_NAME(0x0082, BOOLEAN),
1069 XRT_INPUT_VIVE_PRO_MUTE_MIC_CLICK = XRT_INPUT_NAME(0x0083, BOOLEAN),
1070
1071 XRT_INPUT_WMR_MENU_CLICK = XRT_INPUT_NAME(0x0090, BOOLEAN),
1072 XRT_INPUT_WMR_SQUEEZE_CLICK = XRT_INPUT_NAME(0x0091, BOOLEAN),
1073 XRT_INPUT_WMR_TRIGGER_VALUE = XRT_INPUT_NAME(0x0092, VEC1_ZERO_TO_ONE),
1074 XRT_INPUT_WMR_THUMBSTICK_CLICK = XRT_INPUT_NAME(0x0093, BOOLEAN),
1075 XRT_INPUT_WMR_THUMBSTICK = XRT_INPUT_NAME(0x0094, VEC2_MINUS_ONE_TO_ONE),
1076 XRT_INPUT_WMR_TRACKPAD_CLICK = XRT_INPUT_NAME(0x0095, BOOLEAN),
1077 XRT_INPUT_WMR_TRACKPAD_TOUCH = XRT_INPUT_NAME(0x0096, BOOLEAN),
1078 XRT_INPUT_WMR_TRACKPAD = XRT_INPUT_NAME(0x0097, VEC2_MINUS_ONE_TO_ONE),
1079 XRT_INPUT_WMR_GRIP_POSE = XRT_INPUT_NAME(0x0098, POSE),
1080 XRT_INPUT_WMR_AIM_POSE = XRT_INPUT_NAME(0x0099, POSE),
1081 XRT_INPUT_WMR_HOME_CLICK = XRT_INPUT_NAME(0x009A, BOOLEAN),
1082
1083 XRT_INPUT_XBOX_MENU_CLICK = XRT_INPUT_NAME(0x00A0, BOOLEAN),
1084 XRT_INPUT_XBOX_VIEW_CLICK = XRT_INPUT_NAME(0x00A1, BOOLEAN),
1085 XRT_INPUT_XBOX_A_CLICK = XRT_INPUT_NAME(0x00A2, BOOLEAN),
1086 XRT_INPUT_XBOX_B_CLICK = XRT_INPUT_NAME(0x00A3, BOOLEAN),
1087 XRT_INPUT_XBOX_X_CLICK = XRT_INPUT_NAME(0x00A4, BOOLEAN),
1088 XRT_INPUT_XBOX_Y_CLICK = XRT_INPUT_NAME(0x00A5, BOOLEAN),
1089 XRT_INPUT_XBOX_DPAD_DOWN_CLICK = XRT_INPUT_NAME(0x00A6, BOOLEAN),
1090 XRT_INPUT_XBOX_DPAD_RIGHT_CLICK = XRT_INPUT_NAME(0x00A7, BOOLEAN),
1091 XRT_INPUT_XBOX_DPAD_UP_CLICK = XRT_INPUT_NAME(0x00A8, BOOLEAN),
1092 XRT_INPUT_XBOX_DPAD_LEFT_CLICK = XRT_INPUT_NAME(0x00A9, BOOLEAN),
1093 XRT_INPUT_XBOX_SHOULDER_LEFT_CLICK = XRT_INPUT_NAME(0x00AA, BOOLEAN),
1094 XRT_INPUT_XBOX_SHOULDER_RIGHT_CLICK = XRT_INPUT_NAME(0x00AB, BOOLEAN),
1095 XRT_INPUT_XBOX_THUMBSTICK_LEFT_CLICK = XRT_INPUT_NAME(0x00AC, BOOLEAN),
1096 XRT_INPUT_XBOX_THUMBSTICK_LEFT = XRT_INPUT_NAME(0x00AD, VEC2_MINUS_ONE_TO_ONE),
1097 XRT_INPUT_XBOX_THUMBSTICK_RIGHT_CLICK = XRT_INPUT_NAME(0x00AE, BOOLEAN),
1098 XRT_INPUT_XBOX_THUMBSTICK_RIGHT = XRT_INPUT_NAME(0x00AF, VEC2_MINUS_ONE_TO_ONE),
1099 XRT_INPUT_XBOX_LEFT_TRIGGER_VALUE = XRT_INPUT_NAME(0x00B0, VEC1_ZERO_TO_ONE),
1100 XRT_INPUT_XBOX_RIGHT_TRIGGER_VALUE = XRT_INPUT_NAME(0x00B1, VEC1_ZERO_TO_ONE),
1101
1102 XRT_INPUT_GO_SYSTEM_CLICK = XRT_INPUT_NAME(0x00B0, BOOLEAN),
1103 XRT_INPUT_GO_TRIGGER_CLICK = XRT_INPUT_NAME(0x00B1, BOOLEAN),
1104 XRT_INPUT_GO_BACK_CLICK = XRT_INPUT_NAME(0x00B2, BOOLEAN),
1105 XRT_INPUT_GO_TRACKPAD_CLICK = XRT_INPUT_NAME(0x00B3, BOOLEAN),
1106 XRT_INPUT_GO_TRACKPAD_TOUCH = XRT_INPUT_NAME(0x00B4, BOOLEAN),
1107 XRT_INPUT_GO_TRACKPAD = XRT_INPUT_NAME(0x00B5, VEC2_MINUS_ONE_TO_ONE),
1108 XRT_INPUT_GO_GRIP_POSE = XRT_INPUT_NAME(0x00B6, POSE),
1109 XRT_INPUT_GO_AIM_POSE = XRT_INPUT_NAME(0x00B7, POSE),
1110
1111 XRT_INPUT_TOUCH_X_CLICK = XRT_INPUT_NAME(0x00C0, BOOLEAN),
1112 XRT_INPUT_TOUCH_X_TOUCH = XRT_INPUT_NAME(0x00C1, BOOLEAN),
1113 XRT_INPUT_TOUCH_Y_CLICK = XRT_INPUT_NAME(0x00C2, BOOLEAN),
1114 XRT_INPUT_TOUCH_Y_TOUCH = XRT_INPUT_NAME(0x00C3, BOOLEAN),
1115 XRT_INPUT_TOUCH_MENU_CLICK = XRT_INPUT_NAME(0x00C4, BOOLEAN),
1116 XRT_INPUT_TOUCH_A_CLICK = XRT_INPUT_NAME(0x00C5, BOOLEAN),
1117 XRT_INPUT_TOUCH_A_TOUCH = XRT_INPUT_NAME(0x00C6, BOOLEAN),
1118 XRT_INPUT_TOUCH_B_CLICK = XRT_INPUT_NAME(0x00C7, BOOLEAN),
1119 XRT_INPUT_TOUCH_B_TOUCH = XRT_INPUT_NAME(0x00C8, BOOLEAN),
1120 XRT_INPUT_TOUCH_SYSTEM_CLICK = XRT_INPUT_NAME(0x00C9, BOOLEAN),
1121 XRT_INPUT_TOUCH_SQUEEZE_VALUE = XRT_INPUT_NAME(0x00CA, VEC1_ZERO_TO_ONE),
1122 XRT_INPUT_TOUCH_TRIGGER_TOUCH = XRT_INPUT_NAME(0x00CB, BOOLEAN),
1123 XRT_INPUT_TOUCH_TRIGGER_VALUE = XRT_INPUT_NAME(0x00CC, VEC1_ZERO_TO_ONE),
1124 XRT_INPUT_TOUCH_THUMBSTICK_CLICK = XRT_INPUT_NAME(0x00CD, BOOLEAN),
1125 XRT_INPUT_TOUCH_THUMBSTICK_TOUCH = XRT_INPUT_NAME(0x00CE, BOOLEAN),
1126 XRT_INPUT_TOUCH_THUMBSTICK = XRT_INPUT_NAME(0x00CF, VEC2_MINUS_ONE_TO_ONE),
1127 XRT_INPUT_TOUCH_THUMBREST_TOUCH = XRT_INPUT_NAME(0x00D0, BOOLEAN),
1128 XRT_INPUT_TOUCH_GRIP_POSE = XRT_INPUT_NAME(0x00D1, POSE),
1129 XRT_INPUT_TOUCH_AIM_POSE = XRT_INPUT_NAME(0x00D2, POSE),
1130 XRT_INPUT_TOUCH_TRIGGER_PROXIMITY = XRT_INPUT_NAME(0x00D3, BOOLEAN),
1131 XRT_INPUT_TOUCH_THUMB_PROXIMITY = XRT_INPUT_NAME(0x00D4, BOOLEAN),
1132
1133 XRT_INPUT_HAND_SELECT_VALUE = XRT_INPUT_NAME(0x00E0, VEC1_ZERO_TO_ONE),
1134 XRT_INPUT_HAND_SQUEEZE_VALUE = XRT_INPUT_NAME(0x00E1, VEC1_ZERO_TO_ONE),
1135 XRT_INPUT_HAND_GRIP_POSE = XRT_INPUT_NAME(0x00E2, POSE),
1136 XRT_INPUT_HAND_AIM_POSE = XRT_INPUT_NAME(0x00E3, POSE),
1137
1138 XRT_INPUT_G2_CONTROLLER_X_CLICK = XRT_INPUT_NAME(0x00F0, BOOLEAN),
1139 XRT_INPUT_G2_CONTROLLER_Y_CLICK = XRT_INPUT_NAME(0x00F1, BOOLEAN),
1140 XRT_INPUT_G2_CONTROLLER_A_CLICK = XRT_INPUT_NAME(0x00F2, BOOLEAN),
1141 XRT_INPUT_G2_CONTROLLER_B_CLICK = XRT_INPUT_NAME(0x00F3, BOOLEAN),
1142 XRT_INPUT_G2_CONTROLLER_MENU_CLICK = XRT_INPUT_NAME(0x00F4, BOOLEAN),
1143 XRT_INPUT_G2_CONTROLLER_SQUEEZE_VALUE = XRT_INPUT_NAME(0x00F5, VEC1_ZERO_TO_ONE),
1144 XRT_INPUT_G2_CONTROLLER_TRIGGER_VALUE = XRT_INPUT_NAME(0x00F6, VEC1_ZERO_TO_ONE),
1145 XRT_INPUT_G2_CONTROLLER_THUMBSTICK_CLICK = XRT_INPUT_NAME(0x00F7, BOOLEAN),
1146 XRT_INPUT_G2_CONTROLLER_THUMBSTICK = XRT_INPUT_NAME(0x00F8, VEC2_MINUS_ONE_TO_ONE),
1147 XRT_INPUT_G2_CONTROLLER_GRIP_POSE = XRT_INPUT_NAME(0x00F9, POSE),
1148 XRT_INPUT_G2_CONTROLLER_AIM_POSE = XRT_INPUT_NAME(0x00FA, POSE),
1149 XRT_INPUT_G2_CONTROLLER_HOME_CLICK = XRT_INPUT_NAME(0x00FB, BOOLEAN),
1150 XRT_INPUT_G2_CONTROLLER_SQUEEZE_CLICK = XRT_INPUT_NAME(0x00FC, BOOLEAN),
1151
1152 XRT_INPUT_ODYSSEY_CONTROLLER_MENU_CLICK = XRT_INPUT_NAME(0x0100, BOOLEAN),
1153 XRT_INPUT_ODYSSEY_CONTROLLER_SQUEEZE_CLICK = XRT_INPUT_NAME(0x0101, BOOLEAN),
1154 XRT_INPUT_ODYSSEY_CONTROLLER_TRIGGER_VALUE = XRT_INPUT_NAME(0x0102, VEC1_ZERO_TO_ONE),
1155 XRT_INPUT_ODYSSEY_CONTROLLER_THUMBSTICK_CLICK = XRT_INPUT_NAME(0x0103, BOOLEAN),
1156 XRT_INPUT_ODYSSEY_CONTROLLER_THUMBSTICK = XRT_INPUT_NAME(0x0104, VEC2_MINUS_ONE_TO_ONE),
1157 XRT_INPUT_ODYSSEY_CONTROLLER_TRACKPAD_CLICK = XRT_INPUT_NAME(0x0105, BOOLEAN),
1158 XRT_INPUT_ODYSSEY_CONTROLLER_TRACKPAD_TOUCH = XRT_INPUT_NAME(0x0106, BOOLEAN),
1159 XRT_INPUT_ODYSSEY_CONTROLLER_TRACKPAD = XRT_INPUT_NAME(0x0107, VEC2_MINUS_ONE_TO_ONE),
1160 XRT_INPUT_ODYSSEY_CONTROLLER_GRIP_POSE = XRT_INPUT_NAME(0x0108, POSE),
1161 XRT_INPUT_ODYSSEY_CONTROLLER_AIM_POSE = XRT_INPUT_NAME(0x0109, POSE),
1162 XRT_INPUT_ODYSSEY_CONTROLLER_HOME_CLICK = XRT_INPUT_NAME(0x010A, BOOLEAN),
1163
1164 XRT_INPUT_ML2_CONTROLLER_MENU_CLICK = XRT_INPUT_NAME(0x0200, BOOLEAN),
1165 XRT_INPUT_ML2_CONTROLLER_SELECT_CLICK = XRT_INPUT_NAME(0x0201, BOOLEAN),
1166 XRT_INPUT_ML2_CONTROLLER_TRIGGER_CLICK = XRT_INPUT_NAME(0x0202, BOOLEAN),
1167 XRT_INPUT_ML2_CONTROLLER_TRIGGER_VALUE = XRT_INPUT_NAME(0x0203, VEC1_ZERO_TO_ONE),
1168 XRT_INPUT_ML2_CONTROLLER_TRACKPAD_CLICK = XRT_INPUT_NAME(0x0204, BOOLEAN),
1169 XRT_INPUT_ML2_CONTROLLER_TRACKPAD_TOUCH = XRT_INPUT_NAME(0x0205, BOOLEAN),
1170 XRT_INPUT_ML2_CONTROLLER_TRACKPAD_FORCE = XRT_INPUT_NAME(0x0206, VEC1_ZERO_TO_ONE),
1171 XRT_INPUT_ML2_CONTROLLER_TRACKPAD = XRT_INPUT_NAME(0x0207, VEC2_MINUS_ONE_TO_ONE),
1172 XRT_INPUT_ML2_CONTROLLER_GRIP_POSE = XRT_INPUT_NAME(0x0208, POSE),
1173 XRT_INPUT_ML2_CONTROLLER_AIM_POSE = XRT_INPUT_NAME(0x0209, POSE),
1174 XRT_INPUT_ML2_CONTROLLER_SHOULDER_CLICK = XRT_INPUT_NAME(0x020A, BOOLEAN),
1175
1176 XRT_INPUT_VIVE_TRACKER_SYSTEM_CLICK = XRT_INPUT_NAME(0x0210, BOOLEAN),
1177 XRT_INPUT_VIVE_TRACKER_MENU_CLICK = XRT_INPUT_NAME(0x0211, BOOLEAN),
1178 XRT_INPUT_VIVE_TRACKER_TRIGGER_CLICK = XRT_INPUT_NAME(0x0212, BOOLEAN),
1179 XRT_INPUT_VIVE_TRACKER_SQUEEZE_CLICK = XRT_INPUT_NAME(0x0213, BOOLEAN),
1180 XRT_INPUT_VIVE_TRACKER_TRIGGER_VALUE = XRT_INPUT_NAME(0x0214, VEC1_ZERO_TO_ONE),
1181 XRT_INPUT_VIVE_TRACKER_TRACKPAD = XRT_INPUT_NAME(0x0215, VEC2_MINUS_ONE_TO_ONE),
1182 XRT_INPUT_VIVE_TRACKER_TRACKPAD_CLICK = XRT_INPUT_NAME(0x0216, BOOLEAN),
1183 XRT_INPUT_VIVE_TRACKER_TRACKPAD_TOUCH = XRT_INPUT_NAME(0x0217, BOOLEAN),
1184 XRT_INPUT_VIVE_TRACKER_GRIP_POSE = XRT_INPUT_NAME(0x0218, POSE),
1185
1186 XRT_INPUT_PSSENSE_PS_CLICK = XRT_INPUT_NAME(0x0300, BOOLEAN),
1187 XRT_INPUT_PSSENSE_SHARE_CLICK = XRT_INPUT_NAME(0x0301, BOOLEAN),
1188 XRT_INPUT_PSSENSE_OPTIONS_CLICK = XRT_INPUT_NAME(0x0302, BOOLEAN),
1189 XRT_INPUT_PSSENSE_SQUARE_CLICK = XRT_INPUT_NAME(0x0303, BOOLEAN),
1190 XRT_INPUT_PSSENSE_SQUARE_TOUCH = XRT_INPUT_NAME(0x0304, BOOLEAN),
1191 XRT_INPUT_PSSENSE_TRIANGLE_CLICK = XRT_INPUT_NAME(0x0305, BOOLEAN),
1192 XRT_INPUT_PSSENSE_TRIANGLE_TOUCH = XRT_INPUT_NAME(0x0306, BOOLEAN),
1193 XRT_INPUT_PSSENSE_CROSS_CLICK = XRT_INPUT_NAME(0x0307, BOOLEAN),
1194 XRT_INPUT_PSSENSE_CROSS_TOUCH = XRT_INPUT_NAME(0x0308, BOOLEAN),
1195 XRT_INPUT_PSSENSE_CIRCLE_CLICK = XRT_INPUT_NAME(0x0309, BOOLEAN),
1196 XRT_INPUT_PSSENSE_CIRCLE_TOUCH = XRT_INPUT_NAME(0x030a, BOOLEAN),
1197 XRT_INPUT_PSSENSE_SQUEEZE_CLICK = XRT_INPUT_NAME(0x030b, BOOLEAN),
1198 XRT_INPUT_PSSENSE_SQUEEZE_TOUCH = XRT_INPUT_NAME(0x030c, BOOLEAN),
1199 XRT_INPUT_PSSENSE_SQUEEZE_PROXIMITY = XRT_INPUT_NAME(0x030d, BOOLEAN),
1200 XRT_INPUT_PSSENSE_SQUEEZE_PROXIMITY_FLOAT = XRT_INPUT_NAME(0x030e, VEC1_ZERO_TO_ONE),
1201 XRT_INPUT_PSSENSE_TRIGGER_CLICK = XRT_INPUT_NAME(0x030f, BOOLEAN),
1202 XRT_INPUT_PSSENSE_TRIGGER_TOUCH = XRT_INPUT_NAME(0x0310, BOOLEAN),
1203 XRT_INPUT_PSSENSE_TRIGGER_VALUE = XRT_INPUT_NAME(0x0311, VEC1_ZERO_TO_ONE),
1204 XRT_INPUT_PSSENSE_TRIGGER_PROXIMITY = XRT_INPUT_NAME(0x0312, BOOLEAN),
1205 XRT_INPUT_PSSENSE_TRIGGER_PROXIMITY_FLOAT = XRT_INPUT_NAME(0x0313, VEC1_ZERO_TO_ONE),
1206 XRT_INPUT_PSSENSE_THUMBSTICK = XRT_INPUT_NAME(0x0314, VEC2_MINUS_ONE_TO_ONE),
1207 XRT_INPUT_PSSENSE_THUMBSTICK_CLICK = XRT_INPUT_NAME(0x0315, BOOLEAN),
1208 XRT_INPUT_PSSENSE_THUMBSTICK_TOUCH = XRT_INPUT_NAME(0x0316, BOOLEAN),
1209 XRT_INPUT_PSSENSE_GRIP_POSE = XRT_INPUT_NAME(0x0317, POSE),
1210 XRT_INPUT_PSSENSE_AIM_POSE = XRT_INPUT_NAME(0x0318, POSE),
1211
1212 // XR_EXT_hand_interaction
1213 XRT_INPUT_HAND_PINCH_POSE = XRT_INPUT_NAME(0x0401, POSE),
1214 XRT_INPUT_HAND_POKE_POSE = XRT_INPUT_NAME(0x0402, POSE),
1215 XRT_INPUT_HAND_PINCH_VALUE = XRT_INPUT_NAME(0x0403, VEC1_ZERO_TO_ONE),
1216 XRT_INPUT_HAND_AIM_ACTIVATE_VALUE = XRT_INPUT_NAME(0x0404, VEC1_ZERO_TO_ONE),
1217 XRT_INPUT_HAND_GRASP_VALUE = XRT_INPUT_NAME(0x0405, VEC1_ZERO_TO_ONE),
1218 XRT_INPUT_HAND_PINCH_READY = XRT_INPUT_NAME(0x0406, BOOLEAN),
1219 XRT_INPUT_HAND_AIM_ACTIVATE_READY = XRT_INPUT_NAME(0x0407, BOOLEAN),
1220 XRT_INPUT_HAND_GRASP_READY = XRT_INPUT_NAME(0x0408, BOOLEAN),
1221
1222 XRT_INPUT_OPPO_MR_X_CLICK = XRT_INPUT_NAME(0x0500, BOOLEAN),
1223 XRT_INPUT_OPPO_MR_X_TOUCH = XRT_INPUT_NAME(0x0501, BOOLEAN),
1224 XRT_INPUT_OPPO_MR_Y_CLICK = XRT_INPUT_NAME(0x0502, BOOLEAN),
1225 XRT_INPUT_OPPO_MR_Y_TOUCH = XRT_INPUT_NAME(0x0503, BOOLEAN),
1226 XRT_INPUT_OPPO_MR_MENU_CLICK = XRT_INPUT_NAME(0x0504, BOOLEAN),
1227 XRT_INPUT_OPPO_MR_HEART_RATE_VALUE = XRT_INPUT_NAME(0x0505, VEC1_ZERO_TO_ONE),
1228 XRT_INPUT_OPPO_MR_A_CLICK = XRT_INPUT_NAME(0x0506, BOOLEAN),
1229 XRT_INPUT_OPPO_MR_A_TOUCH = XRT_INPUT_NAME(0x0507, BOOLEAN),
1230 XRT_INPUT_OPPO_MR_B_CLICK = XRT_INPUT_NAME(0x0508, BOOLEAN),
1231 XRT_INPUT_OPPO_MR_B_TOUCH = XRT_INPUT_NAME(0x0509, BOOLEAN),
1232 XRT_INPUT_OPPO_MR_HOME_CLICK = XRT_INPUT_NAME(0x050A, BOOLEAN),
1233 XRT_INPUT_OPPO_MR_SQUEEZE_VALUE = XRT_INPUT_NAME(0x050B, VEC1_ZERO_TO_ONE),
1234 XRT_INPUT_OPPO_MR_TRIGGER_TOUCH = XRT_INPUT_NAME(0x050C, BOOLEAN),
1235 XRT_INPUT_OPPO_MR_TRIGGER_VALUE = XRT_INPUT_NAME(0x050D, VEC1_ZERO_TO_ONE),
1236 XRT_INPUT_OPPO_MR_GRIP_POSE = XRT_INPUT_NAME(0x050E, POSE),
1237 XRT_INPUT_OPPO_MR_AIM_POSE = XRT_INPUT_NAME(0x050F, POSE),
1238 XRT_INPUT_OPPO_MR_THUMBSTICK_CLICK = XRT_INPUT_NAME(0x0510, BOOLEAN),
1239 XRT_INPUT_OPPO_MR_THUMBSTICK_TOUCH = XRT_INPUT_NAME(0x0511, BOOLEAN),
1240 XRT_INPUT_OPPO_MR_THUMBSTICK = XRT_INPUT_NAME(0x0512, VEC2_MINUS_ONE_TO_ONE),
1241
1242 XRT_INPUT_GENERIC_FACE_TRACKING = XRT_INPUT_NAME(0x0600, FACE_TRACKING),
1243
1244 XRT_INPUT_HTC_EYE_FACE_TRACKING = XRT_INPUT_NAME(0x0601, FACE_TRACKING),
1245 XRT_INPUT_HTC_LIP_FACE_TRACKING = XRT_INPUT_NAME(0x0602, FACE_TRACKING),
1246 XRT_INPUT_FB_FACE_TRACKING2_AUDIO = XRT_INPUT_NAME(0x0603, FACE_TRACKING),
1247 XRT_INPUT_FB_FACE_TRACKING2_VISUAL = XRT_INPUT_NAME(0x0604, FACE_TRACKING),
1248 XRT_INPUT_ANDROID_FACE_TRACKING = XRT_INPUT_NAME(0x0605, FACE_TRACKING),
1249
1250 XRT_INPUT_GENERIC_BODY_TRACKING = XRT_INPUT_NAME(0x0700, BODY_TRACKING),
1251 XRT_INPUT_FB_BODY_TRACKING = XRT_INPUT_NAME(0x0701, BODY_TRACKING),
1252 XRT_INPUT_META_FULL_BODY_TRACKING = XRT_INPUT_NAME(0x0702, BODY_TRACKING),
1253 XRT_INPUT_BD_BODY_TRACKING = XRT_INPUT_NAME(0x0703, BODY_TRACKING),
1254 XRT_INPUT_BD_BODY_TRACKING_WITHOUT_ARM = XRT_INPUT_NAME(0x0704, BODY_TRACKING),
1255
1256 XRT_INPUT_PICO_NEO3_X_CLICK = XRT_INPUT_NAME(0x0800, BOOLEAN),
1257 XRT_INPUT_PICO_NEO3_X_TOUCH = XRT_INPUT_NAME(0x0801, BOOLEAN),
1258 XRT_INPUT_PICO_NEO3_Y_CLICK = XRT_INPUT_NAME(0x0802, BOOLEAN),
1259 XRT_INPUT_PICO_NEO3_Y_TOUCH = XRT_INPUT_NAME(0x0803, BOOLEAN),
1260 XRT_INPUT_PICO_NEO3_MENU_CLICK = XRT_INPUT_NAME(0x0804, BOOLEAN),
1261 XRT_INPUT_PICO_NEO3_SYSTEM_CLICK = XRT_INPUT_NAME(0x0805, BOOLEAN),
1262 XRT_INPUT_PICO_NEO3_TRIGGER_CLICK = XRT_INPUT_NAME(0x0806, BOOLEAN),
1263 XRT_INPUT_PICO_NEO3_TRIGGER_VALUE = XRT_INPUT_NAME(0x0807, VEC1_ZERO_TO_ONE),
1264 XRT_INPUT_PICO_NEO3_TRIGGER_TOUCH = XRT_INPUT_NAME(0x0808, BOOLEAN),
1265 XRT_INPUT_PICO_NEO3_THUMBSTICK_CLICK = XRT_INPUT_NAME(0x0809, BOOLEAN),
1266 XRT_INPUT_PICO_NEO3_THUMBSTICK_TOUCH = XRT_INPUT_NAME(0x080A, BOOLEAN),
1267 XRT_INPUT_PICO_NEO3_THUMBSTICK = XRT_INPUT_NAME(0x080B, VEC2_MINUS_ONE_TO_ONE),
1268 XRT_INPUT_PICO_NEO3_SQUEEZE_CLICK = XRT_INPUT_NAME(0x080C, BOOLEAN),
1269 XRT_INPUT_PICO_NEO3_SQUEEZE_VALUE = XRT_INPUT_NAME(0x080D, VEC1_ZERO_TO_ONE),
1270 XRT_INPUT_PICO_NEO3_GRIP_POSE = XRT_INPUT_NAME(0x080E, POSE),
1271 XRT_INPUT_PICO_NEO3_AIM_POSE = XRT_INPUT_NAME(0x080F, POSE),
1272 XRT_INPUT_PICO_NEO3_A_CLICK = XRT_INPUT_NAME(0x0810, BOOLEAN),
1273 XRT_INPUT_PICO_NEO3_A_TOUCH = XRT_INPUT_NAME(0x0811, BOOLEAN),
1274 XRT_INPUT_PICO_NEO3_B_CLICK = XRT_INPUT_NAME(0x0812, BOOLEAN),
1275 XRT_INPUT_PICO_NEO3_B_TOUCH = XRT_INPUT_NAME(0x0813, BOOLEAN),
1276
1277 XRT_INPUT_PICO4_X_CLICK = XRT_INPUT_NAME(0x0900, BOOLEAN),
1278 XRT_INPUT_PICO4_X_TOUCH = XRT_INPUT_NAME(0x0901, BOOLEAN),
1279 XRT_INPUT_PICO4_Y_CLICK = XRT_INPUT_NAME(0x0902, BOOLEAN),
1280 XRT_INPUT_PICO4_Y_TOUCH = XRT_INPUT_NAME(0x0903, BOOLEAN),
1281 XRT_INPUT_PICO4_SYSTEM_CLICK = XRT_INPUT_NAME(0x0905, BOOLEAN),
1282 XRT_INPUT_PICO4_TRIGGER_CLICK = XRT_INPUT_NAME(0x0906, BOOLEAN),
1283 XRT_INPUT_PICO4_TRIGGER_VALUE = XRT_INPUT_NAME(0x0907, VEC1_ZERO_TO_ONE),
1284 XRT_INPUT_PICO4_TRIGGER_TOUCH = XRT_INPUT_NAME(0x0908, BOOLEAN),
1285 XRT_INPUT_PICO4_THUMBSTICK_CLICK = XRT_INPUT_NAME(0x0909, BOOLEAN),
1286 XRT_INPUT_PICO4_THUMBSTICK_TOUCH = XRT_INPUT_NAME(0x090A, BOOLEAN),
1287 XRT_INPUT_PICO4_THUMBSTICK = XRT_INPUT_NAME(0x090B, VEC2_MINUS_ONE_TO_ONE),
1288 XRT_INPUT_PICO4_SQUEEZE_CLICK = XRT_INPUT_NAME(0x090C, BOOLEAN),
1289 XRT_INPUT_PICO4_SQUEEZE_VALUE = XRT_INPUT_NAME(0x090D, VEC1_ZERO_TO_ONE),
1290 XRT_INPUT_PICO4_GRIP_POSE = XRT_INPUT_NAME(0x090E, POSE),
1291 XRT_INPUT_PICO4_AIM_POSE = XRT_INPUT_NAME(0x090F, POSE),
1292 XRT_INPUT_PICO4_A_CLICK = XRT_INPUT_NAME(0x0910, BOOLEAN),
1293 XRT_INPUT_PICO4_A_TOUCH = XRT_INPUT_NAME(0x0911, BOOLEAN),
1294 XRT_INPUT_PICO4_B_CLICK = XRT_INPUT_NAME(0x0912, BOOLEAN),
1295 XRT_INPUT_PICO4_B_TOUCH = XRT_INPUT_NAME(0x0913, BOOLEAN),
1296 XRT_INPUT_PICO4_MENU_CLICK = XRT_INPUT_NAME(0x0914, BOOLEAN),
1297
1298 XRT_INPUT_PICO_G3_MENU_CLICK = XRT_INPUT_NAME(0x0A01, BOOLEAN),
1299 XRT_INPUT_PICO_G3_TRIGGER_CLICK = XRT_INPUT_NAME(0x0A02, BOOLEAN),
1300 XRT_INPUT_PICO_G3_TRIGGER_VALUE = XRT_INPUT_NAME(0x0A03, VEC1_ZERO_TO_ONE),
1301 XRT_INPUT_PICO_G3_THUMBSTICK_CLICK = XRT_INPUT_NAME(0x0A04, BOOLEAN),
1302 XRT_INPUT_PICO_G3_THUMBSTICK_TOUCH = XRT_INPUT_NAME(0x0A05, BOOLEAN),
1303 XRT_INPUT_PICO_G3_THUMBSTICK = XRT_INPUT_NAME(0x0A06, VEC2_MINUS_ONE_TO_ONE),
1304 XRT_INPUT_PICO_G3_GRIP_POSE = XRT_INPUT_NAME(0x0A07, POSE),
1305 XRT_INPUT_PICO_G3_AIM_POSE = XRT_INPUT_NAME(0x0A08, POSE),
1306
1307 XRT_INPUT_VIVE_COSMOS_X_CLICK = XRT_INPUT_NAME(0x0B00, BOOLEAN),
1308 XRT_INPUT_VIVE_COSMOS_Y_CLICK = XRT_INPUT_NAME(0x0B01, BOOLEAN),
1309 XRT_INPUT_VIVE_COSMOS_MENU_CLICK = XRT_INPUT_NAME(0x0B02, BOOLEAN),
1310 XRT_INPUT_VIVE_COSMOS_A_CLICK = XRT_INPUT_NAME(0x0B03, BOOLEAN),
1311 XRT_INPUT_VIVE_COSMOS_B_CLICK = XRT_INPUT_NAME(0x0B04, BOOLEAN),
1312 XRT_INPUT_VIVE_COSMOS_SYSTEM_CLICK = XRT_INPUT_NAME(0x0B05, BOOLEAN),
1313 XRT_INPUT_VIVE_COSMOS_SHOULDER_CLICK = XRT_INPUT_NAME(0x0B06, BOOLEAN),
1314 XRT_INPUT_VIVE_COSMOS_SQUEEZE_CLICK = XRT_INPUT_NAME(0x0B07, BOOLEAN),
1315 XRT_INPUT_VIVE_COSMOS_TRIGGER_CLICK = XRT_INPUT_NAME(0x0B08, BOOLEAN),
1316 XRT_INPUT_VIVE_COSMOS_TRIGGER_VALUE = XRT_INPUT_NAME(0x0B09, VEC1_ZERO_TO_ONE),
1317 XRT_INPUT_VIVE_COSMOS_THUMBSTICK_CLICK = XRT_INPUT_NAME(0x0B0A, BOOLEAN),
1318 XRT_INPUT_VIVE_COSMOS_THUMBSTICK_TOUCH = XRT_INPUT_NAME(0x0B0B, BOOLEAN),
1319 XRT_INPUT_VIVE_COSMOS_THUMBSTICK = XRT_INPUT_NAME(0x0B0C, VEC2_MINUS_ONE_TO_ONE),
1320 XRT_INPUT_VIVE_COSMOS_GRIP_POSE = XRT_INPUT_NAME(0x0B0D, POSE),
1321 XRT_INPUT_VIVE_COSMOS_AIM_POSE = XRT_INPUT_NAME(0x0B0E, POSE),
1322
1323 XRT_INPUT_VIVE_FOCUS3_X_CLICK = XRT_INPUT_NAME(0x0C00, BOOLEAN),
1324 XRT_INPUT_VIVE_FOCUS3_Y_CLICK = XRT_INPUT_NAME(0x0C01, BOOLEAN),
1325 XRT_INPUT_VIVE_FOCUS3_MENU_CLICK = XRT_INPUT_NAME(0x0C02, BOOLEAN),
1326 XRT_INPUT_VIVE_FOCUS3_A_CLICK = XRT_INPUT_NAME(0x0C03, BOOLEAN),
1327 XRT_INPUT_VIVE_FOCUS3_B_CLICK = XRT_INPUT_NAME(0x0C04, BOOLEAN),
1328 XRT_INPUT_VIVE_FOCUS3_SYSTEM_CLICK = XRT_INPUT_NAME(0x0C05, BOOLEAN),
1329 XRT_INPUT_VIVE_FOCUS3_SQUEEZE_CLICK = XRT_INPUT_NAME(0x0C06, BOOLEAN),
1330 XRT_INPUT_VIVE_FOCUS3_SQUEEZE_TOUCH = XRT_INPUT_NAME(0x0C07, BOOLEAN),
1331 XRT_INPUT_VIVE_FOCUS3_SQUEEZE_VALUE = XRT_INPUT_NAME(0x0C08, VEC1_ZERO_TO_ONE),
1332 XRT_INPUT_VIVE_FOCUS3_TRIGGER_CLICK = XRT_INPUT_NAME(0x0C09, BOOLEAN),
1333 XRT_INPUT_VIVE_FOCUS3_TRIGGER_TOUCH = XRT_INPUT_NAME(0x0C0A, BOOLEAN),
1334 XRT_INPUT_VIVE_FOCUS3_TRIGGER_VALUE = XRT_INPUT_NAME(0x0C0B, VEC1_ZERO_TO_ONE),
1335 XRT_INPUT_VIVE_FOCUS3_THUMBSTICK_CLICK = XRT_INPUT_NAME(0x0C0C, BOOLEAN),
1336 XRT_INPUT_VIVE_FOCUS3_THUMBSTICK_TOUCH = XRT_INPUT_NAME(0x0C0D, BOOLEAN),
1337 XRT_INPUT_VIVE_FOCUS3_THUMBSTICK = XRT_INPUT_NAME(0x0C0E, VEC2_MINUS_ONE_TO_ONE),
1338 XRT_INPUT_VIVE_FOCUS3_THUMBREST_TOUCH = XRT_INPUT_NAME(0x0C0F, BOOLEAN),
1339 XRT_INPUT_VIVE_FOCUS3_GRIP_POSE = XRT_INPUT_NAME(0x0C10, POSE),
1340 XRT_INPUT_VIVE_FOCUS3_AIM_POSE = XRT_INPUT_NAME(0x0C11, POSE),
1341
1342 XRT_INPUT_TOUCH_PRO_X_CLICK = XRT_INPUT_NAME(0x0D00, BOOLEAN),
1343 XRT_INPUT_TOUCH_PRO_X_TOUCH = XRT_INPUT_NAME(0x0D01, BOOLEAN),
1344 XRT_INPUT_TOUCH_PRO_Y_CLICK = XRT_INPUT_NAME(0x0D02, BOOLEAN),
1345 XRT_INPUT_TOUCH_PRO_Y_TOUCH = XRT_INPUT_NAME(0x0D03, BOOLEAN),
1346 XRT_INPUT_TOUCH_PRO_MENU_CLICK = XRT_INPUT_NAME(0x0D04, BOOLEAN),
1347 XRT_INPUT_TOUCH_PRO_A_CLICK = XRT_INPUT_NAME(0x0D05, BOOLEAN),
1348 XRT_INPUT_TOUCH_PRO_A_TOUCH = XRT_INPUT_NAME(0x0D06, BOOLEAN),
1349 XRT_INPUT_TOUCH_PRO_B_CLICK = XRT_INPUT_NAME(0x0D07, BOOLEAN),
1350 XRT_INPUT_TOUCH_PRO_B_TOUCH = XRT_INPUT_NAME(0x0D08, BOOLEAN),
1351 XRT_INPUT_TOUCH_PRO_SYSTEM_CLICK = XRT_INPUT_NAME(0x0D09, BOOLEAN),
1352 XRT_INPUT_TOUCH_PRO_SQUEEZE_VALUE = XRT_INPUT_NAME(0x0D0A, VEC1_ZERO_TO_ONE),
1353 XRT_INPUT_TOUCH_PRO_TRIGGER_TOUCH = XRT_INPUT_NAME(0x0D0B, BOOLEAN),
1354 XRT_INPUT_TOUCH_PRO_TRIGGER_VALUE = XRT_INPUT_NAME(0x0D0C, VEC1_ZERO_TO_ONE),
1355 XRT_INPUT_TOUCH_PRO_THUMBSTICK_CLICK = XRT_INPUT_NAME(0x0D0D, BOOLEAN),
1356 XRT_INPUT_TOUCH_PRO_THUMBSTICK_TOUCH = XRT_INPUT_NAME(0x0D0E, BOOLEAN),
1357 XRT_INPUT_TOUCH_PRO_THUMBSTICK = XRT_INPUT_NAME(0x0D0F, VEC2_MINUS_ONE_TO_ONE),
1358 XRT_INPUT_TOUCH_PRO_THUMBREST_TOUCH = XRT_INPUT_NAME(0x0D10, BOOLEAN),
1359 XRT_INPUT_TOUCH_PRO_THUMBREST_FORCE = XRT_INPUT_NAME(0x0D11, VEC1_ZERO_TO_ONE),
1360 XRT_INPUT_TOUCH_PRO_GRIP_POSE = XRT_INPUT_NAME(0x0D12, POSE),
1361 XRT_INPUT_TOUCH_PRO_AIM_POSE = XRT_INPUT_NAME(0x0D13, POSE),
1362 XRT_INPUT_TOUCH_PRO_TRIGGER_PROXIMITY = XRT_INPUT_NAME(0x0D14, BOOLEAN),
1363 XRT_INPUT_TOUCH_PRO_THUMB_PROXIMITY = XRT_INPUT_NAME(0x0D15, BOOLEAN),
1364 XRT_INPUT_TOUCH_PRO_TRIGGER_CURL = XRT_INPUT_NAME(0x0D16, VEC1_ZERO_TO_ONE),
1365 XRT_INPUT_TOUCH_PRO_TRIGGER_SLIDE = XRT_INPUT_NAME(0x0D17, VEC1_ZERO_TO_ONE),
1366 XRT_INPUT_TOUCH_PRO_STYLUS_FORCE = XRT_INPUT_NAME(0x0D18, VEC1_ZERO_TO_ONE),
1367
1368 XRT_INPUT_TOUCH_PLUS_X_CLICK = XRT_INPUT_NAME(0x0E00, BOOLEAN),
1369 XRT_INPUT_TOUCH_PLUS_X_TOUCH = XRT_INPUT_NAME(0x0E01, BOOLEAN),
1370 XRT_INPUT_TOUCH_PLUS_Y_CLICK = XRT_INPUT_NAME(0x0E02, BOOLEAN),
1371 XRT_INPUT_TOUCH_PLUS_Y_TOUCH = XRT_INPUT_NAME(0x0E03, BOOLEAN),
1372 XRT_INPUT_TOUCH_PLUS_MENU_CLICK = XRT_INPUT_NAME(0x0E04, BOOLEAN),
1373 XRT_INPUT_TOUCH_PLUS_A_CLICK = XRT_INPUT_NAME(0x0E05, BOOLEAN),
1374 XRT_INPUT_TOUCH_PLUS_A_TOUCH = XRT_INPUT_NAME(0x0E06, BOOLEAN),
1375 XRT_INPUT_TOUCH_PLUS_B_CLICK = XRT_INPUT_NAME(0x0E07, BOOLEAN),
1376 XRT_INPUT_TOUCH_PLUS_B_TOUCH = XRT_INPUT_NAME(0x0E08, BOOLEAN),
1377 XRT_INPUT_TOUCH_PLUS_SYSTEM_CLICK = XRT_INPUT_NAME(0x0E09, BOOLEAN),
1378 XRT_INPUT_TOUCH_PLUS_SQUEEZE_VALUE = XRT_INPUT_NAME(0x0E0A, VEC1_ZERO_TO_ONE),
1379 XRT_INPUT_TOUCH_PLUS_TRIGGER_TOUCH = XRT_INPUT_NAME(0x0E0B, BOOLEAN),
1380 XRT_INPUT_TOUCH_PLUS_TRIGGER_PROXIMITY = XRT_INPUT_NAME(0x0E0C, BOOLEAN),
1381 XRT_INPUT_TOUCH_PLUS_TRIGGER_VALUE = XRT_INPUT_NAME(0x0E0D, VEC1_ZERO_TO_ONE),
1382 XRT_INPUT_TOUCH_PLUS_TRIGGER_FORCE = XRT_INPUT_NAME(0x0E0E, VEC1_ZERO_TO_ONE),
1383 XRT_INPUT_TOUCH_PLUS_THUMBSTICK_CLICK = XRT_INPUT_NAME(0x0E0F, BOOLEAN),
1384 XRT_INPUT_TOUCH_PLUS_THUMBSTICK_TOUCH = XRT_INPUT_NAME(0x0E10, BOOLEAN),
1385 XRT_INPUT_TOUCH_PLUS_THUMBSTICK = XRT_INPUT_NAME(0x0E11, VEC2_MINUS_ONE_TO_ONE),
1386 XRT_INPUT_TOUCH_PLUS_THUMBREST_TOUCH = XRT_INPUT_NAME(0x0E12, BOOLEAN),
1387 XRT_INPUT_TOUCH_PLUS_GRIP_POSE = XRT_INPUT_NAME(0x0E13, POSE),
1388 XRT_INPUT_TOUCH_PLUS_AIM_POSE = XRT_INPUT_NAME(0x0E14, POSE),
1389 XRT_INPUT_TOUCH_PLUS_THUMB_PROXIMITY = XRT_INPUT_NAME(0x0E15, BOOLEAN),
1390 XRT_INPUT_TOUCH_PLUS_TRIGGER_CURL = XRT_INPUT_NAME(0x0E16, VEC1_ZERO_TO_ONE),
1391 XRT_INPUT_TOUCH_PLUS_TRIGGER_SLIDE = XRT_INPUT_NAME(0x0E17, VEC1_ZERO_TO_ONE),
1392
1393 XRT_INPUT_RIFT_REMOTE_SELECT_CLICK = XRT_INPUT_NAME(0x0F00, BOOLEAN),
1394 XRT_INPUT_RIFT_REMOTE_BACK_CLICK = XRT_INPUT_NAME(0x0F01, BOOLEAN),
1395 XRT_INPUT_RIFT_REMOTE_VOLUME_UP_CLICK = XRT_INPUT_NAME(0x0F02, BOOLEAN),
1396 XRT_INPUT_RIFT_REMOTE_VOLUME_DOWN_CLICK = XRT_INPUT_NAME(0x0F03, BOOLEAN),
1397 XRT_INPUT_RIFT_REMOTE_OCULUS_CLICK = XRT_INPUT_NAME(0x0F04, BOOLEAN),
1398 XRT_INPUT_RIFT_REMOTE_DPAD_DOWN_CLICK = XRT_INPUT_NAME(0x0F05, BOOLEAN),
1399 XRT_INPUT_RIFT_REMOTE_DPAD_RIGHT_CLICK = XRT_INPUT_NAME(0x0F06, BOOLEAN),
1400 XRT_INPUT_RIFT_REMOTE_DPAD_UP_CLICK = XRT_INPUT_NAME(0x0F07, BOOLEAN),
1401 XRT_INPUT_RIFT_REMOTE_DPAD_LEFT_CLICK = XRT_INPUT_NAME(0x0F08, BOOLEAN),
1402
1403 XRT_INPUT_BLUBUR_S1_MENU_CLICK = XRT_INPUT_NAME(0x1000, BOOLEAN),
1404
1405 XRT_INPUT_PSVR2_SYSTEM_CLICK = XRT_INPUT_NAME(0x1100, BOOLEAN),
1406
1407 XRT_INPUT_HAND_CTRL_EMU_PINCH_BOOL = XRT_INPUT_NAME(0x1200, BOOLEAN),
1408 XRT_INPUT_HAND_CTRL_EMU_PINCH_VALUE = XRT_INPUT_NAME(0x1201, VEC1_ZERO_TO_ONE),
1409 XRT_INPUT_HAND_CTRL_EMU_GRIP_POSE = XRT_INPUT_NAME(0x1202, POSE),
1410 XRT_INPUT_HAND_CTRL_EMU_AIM_POSE = XRT_INPUT_NAME(0x1203, POSE),
1411
1412 XRT_INPUT_FLIPVR_A_CLICK = XRT_INPUT_NAME(0x1300, BOOLEAN),
1413 XRT_INPUT_FLIPVR_A_TOUCH = XRT_INPUT_NAME(0x1301, BOOLEAN),
1414 XRT_INPUT_FLIPVR_B_CLICK = XRT_INPUT_NAME(0X1302, BOOLEAN),
1415 XRT_INPUT_FLIPVR_B_TOUCH = XRT_INPUT_NAME(0X1303, BOOLEAN),
1416 XRT_INPUT_FLIPVR_X_CLICK = XRT_INPUT_NAME(0X1304, BOOLEAN),
1417 XRT_INPUT_FLIPVR_X_TOUCH = XRT_INPUT_NAME(0X1305, BOOLEAN),
1418 XRT_INPUT_FLIPVR_Y_CLICK = XRT_INPUT_NAME(0X1306, BOOLEAN),
1419 XRT_INPUT_FLIPVR_Y_TOUCH = XRT_INPUT_NAME(0X1307, BOOLEAN),
1420 XRT_INPUT_FLIPVR_SYSTEM_CLICK = XRT_INPUT_NAME(0X1308, BOOLEAN),
1421 XRT_INPUT_FLIPVR_THUMBSTICK_CLICK = XRT_INPUT_NAME(0X1309, BOOLEAN),
1422 XRT_INPUT_FLIPVR_THUMBSTICK_TOUCH = XRT_INPUT_NAME(0X130A, BOOLEAN),
1423 XRT_INPUT_FLIPVR_THUMBSTICK = XRT_INPUT_NAME(0X130B, VEC2_MINUS_ONE_TO_ONE),
1424 XRT_INPUT_FLIPVR_TRIGGER_CLICK = XRT_INPUT_NAME(0X130C, BOOLEAN),
1425 XRT_INPUT_FLIPVR_TRIGGER_TOUCH = XRT_INPUT_NAME(0X130D, BOOLEAN),
1426 XRT_INPUT_FLIPVR_TRIGGER_VALUE = XRT_INPUT_NAME(0X130E, VEC1_ZERO_TO_ONE),
1427 XRT_INPUT_FLIPVR_SQUEEZE_CLICK = XRT_INPUT_NAME(0X130F, BOOLEAN),
1428 XRT_INPUT_FLIPVR_SQUEEZE_VALUE = XRT_INPUT_NAME(0X1310, VEC1_ZERO_TO_ONE),
1429 XRT_INPUT_FLIPVR_GRIP_POSE = XRT_INPUT_NAME(0X1311, POSE),
1430 XRT_INPUT_FLIPVR_AIM_POSE = XRT_INPUT_NAME(0X1312, POSE),
1431
1432 XRT_INPUT_MX_INK_GRIP_POSE = XRT_INPUT_NAME(0x1400, POSE),
1433 XRT_INPUT_MX_INK_AIM_POSE = XRT_INPUT_NAME(0x1401, POSE),
1434 XRT_INPUT_MX_INK_SYSTEM_CLICK = XRT_INPUT_NAME(0x1402, BOOLEAN),
1435 XRT_INPUT_MX_INK_FRONT_CLICK = XRT_INPUT_NAME(0x1403, BOOLEAN),
1436 XRT_INPUT_MX_INK_FRONT_DOUBLE_TAP = XRT_INPUT_NAME(0x1404, BOOLEAN),
1437 XRT_INPUT_MX_INK_MIDDLE_VALUE = XRT_INPUT_NAME(0x1405, VEC1_ZERO_TO_ONE),
1438 XRT_INPUT_MX_INK_BACK_CLICK = XRT_INPUT_NAME(0x1406, BOOLEAN),
1439 XRT_INPUT_MX_INK_BACK_DOUBLE_TAP = XRT_INPUT_NAME(0x1407, BOOLEAN),
1440 XRT_INPUT_MX_INK_DOCKED = XRT_INPUT_NAME(0x1408, BOOLEAN),
1441 XRT_INPUT_MX_INK_TIP_FORCE = XRT_INPUT_NAME(0x1409, VEC1_ZERO_TO_ONE),
1442 XRT_INPUT_MX_INK_TIP_POSE = XRT_INPUT_NAME(0x140A, POSE),
1443
1444 XRT_INPUT_MAGNETRA2_A_CLICK = XRT_INPUT_NAME(0X1500, BOOLEAN),
1445 XRT_INPUT_MAGNETRA2_B_CLICK = XRT_INPUT_NAME(0X1501, BOOLEAN),
1446 XRT_INPUT_MAGNETRA2_X_CLICK = XRT_INPUT_NAME(0X1502, BOOLEAN),
1447 XRT_INPUT_MAGNETRA2_Y_CLICK = XRT_INPUT_NAME(0X1503, BOOLEAN),
1448 XRT_INPUT_MAGNETRA2_SYSTEM_CLICK = XRT_INPUT_NAME(0X1504, BOOLEAN),
1449 XRT_INPUT_MAGNETRA2_PAIRING_CLICK = XRT_INPUT_NAME(0X1505, BOOLEAN),
1450 XRT_INPUT_MAGNETRA2_TRIGGER_VALUE = XRT_INPUT_NAME(0X1506, VEC1_ZERO_TO_ONE),
1451 XRT_INPUT_MAGNETRA2_TRIGGER_CLICK = XRT_INPUT_NAME(0X1507, BOOLEAN),
1452 XRT_INPUT_MAGNETRA2_SQUEEZE_VALUE = XRT_INPUT_NAME(0X1508, VEC1_ZERO_TO_ONE),
1453 XRT_INPUT_MAGNETRA2_THUMBSTICK = XRT_INPUT_NAME(0X1509, VEC2_MINUS_ONE_TO_ONE),
1454 XRT_INPUT_MAGNETRA2_THUMBSTICK_CLICK = XRT_INPUT_NAME(0X150A, BOOLEAN),
1455 XRT_INPUT_MAGNETRA2_GRIP_POSE = XRT_INPUT_NAME(0X150B, POSE),
1456 XRT_INPUT_MAGNETRA2_AIM_POSE = XRT_INPUT_NAME(0X150C, POSE),
1457
1458 // clang-format on
1459};
1460
1461/*!
1462 * Number of joints in a hand. Corresponds to XR_HAND_JOINT_COUNT_EXT.
1463 *
1464 * @see xrt_hand_joint
1465 * @ingroup xrt_iface
1466 */
1467#define XRT_HAND_JOINT_COUNT 26
1468
1469/*!
1470 * Number of joints in a hand. Corresponds to XrHandJointEXT.
1471 *
1472 * @ingroup xrt_iface
1473 */
1475{
1476 XRT_HAND_JOINT_PALM = 0,
1477 XRT_HAND_JOINT_WRIST = 1,
1478 XRT_HAND_JOINT_THUMB_METACARPAL = 2,
1479 XRT_HAND_JOINT_THUMB_PROXIMAL = 3,
1480 XRT_HAND_JOINT_THUMB_DISTAL = 4,
1481 XRT_HAND_JOINT_THUMB_TIP = 5,
1482 XRT_HAND_JOINT_INDEX_METACARPAL = 6,
1483 XRT_HAND_JOINT_INDEX_PROXIMAL = 7,
1484 XRT_HAND_JOINT_INDEX_INTERMEDIATE = 8,
1485 XRT_HAND_JOINT_INDEX_DISTAL = 9,
1486 XRT_HAND_JOINT_INDEX_TIP = 10,
1487 XRT_HAND_JOINT_MIDDLE_METACARPAL = 11,
1488 XRT_HAND_JOINT_MIDDLE_PROXIMAL = 12,
1489 XRT_HAND_JOINT_MIDDLE_INTERMEDIATE = 13,
1490 XRT_HAND_JOINT_MIDDLE_DISTAL = 14,
1491 XRT_HAND_JOINT_MIDDLE_TIP = 15,
1492 XRT_HAND_JOINT_RING_METACARPAL = 16,
1493 XRT_HAND_JOINT_RING_PROXIMAL = 17,
1494 XRT_HAND_JOINT_RING_INTERMEDIATE = 18,
1495 XRT_HAND_JOINT_RING_DISTAL = 19,
1496 XRT_HAND_JOINT_RING_TIP = 20,
1497 XRT_HAND_JOINT_LITTLE_METACARPAL = 21,
1498 XRT_HAND_JOINT_LITTLE_PROXIMAL = 22,
1499 XRT_HAND_JOINT_LITTLE_INTERMEDIATE = 23,
1500 XRT_HAND_JOINT_LITTLE_DISTAL = 24,
1501 XRT_HAND_JOINT_LITTLE_TIP = 25,
1502 XRT_HAND_JOINT_MAX_ENUM = 0x7FFFFFFF
1503};
1504
1505/*!
1506 * Enumeration for left and right hand.
1507 *
1508 * @ingroup xrt_iface
1509 */
1511{
1512 XRT_HAND_LEFT = 0,
1513 XRT_HAND_RIGHT = 1,
1514};
1515
1516/*!
1517 * Location of a single hand joint. Corresponds to XrHandJointLocationEXT.
1518 *
1519 * @ingroup xrt_iface
1520 */
1522{
1523 struct xrt_space_relation relation;
1524 float radius;
1525};
1526
1527/*!
1528 * Number of fingers on a hand.
1529 *
1530 * @ingroup xrt_iface
1531 */
1532#define XRT_FINGER_COUNT 5
1533
1534/*!
1535 * Names for fingers on a hand.
1536 *
1537 * @ingroup xrt_iface
1538 */
1540{
1541 XRT_FINGER_LITTLE = 0,
1542 XRT_FINGER_RING,
1543 XRT_FINGER_MIDDLE,
1544 XRT_FINGER_INDEX,
1545 XRT_FINGER_THUMB
1546};
1547
1548/*!
1549 * Joint set type used for hand tracking. Corresponds to XrHandJointSetEXT.
1550 *
1551 * @ingroup xrt_iface
1552 */
1554{
1555 union {
1556 struct xrt_hand_joint_value hand_joint_set_default[XRT_HAND_JOINT_COUNT];
1557 } values;
1558
1559 // in driver global space, without tracking_origin offset
1560 struct xrt_space_relation hand_pose;
1561 bool is_active;
1562};
1563
1564/*!
1565 * A union of all input types.
1566 *
1567 * @see xrt_input_type
1568 * @ingroup xrt_iface math
1569 */
1571 struct xrt_vec1 vec1;
1572 struct xrt_vec2 vec2;
1573 bool boolean;
1574};
1575
1576/*!
1577 * The number of bits reserved for the input type in @ref xrt_output_name
1578 * @see xrt_output_type
1579 * @ingroup xrt_iface
1580 */
1581#define XRT_OUTPUT_TYPE_BITWIDTH 8u
1582
1583/*!
1584 * The mask associated with @ref XRT_OUTPUT_TYPE_BITWIDTH
1585 * @see xrt_output_type
1586 * @ingroup xrt_iface
1587 */
1588#define XRT_OUTPUT_TYPE_BITMASK 0xffu
1589
1590/*!
1591 * @brief Create an enum value for xrt_output_name that packs an ID and output
1592 * type.
1593 *
1594 * @param id an integer
1595 * @param type The suffix of an xrt_output_type value name: `XRT_OUTPUT_TYPE_` is
1596 * prepended automatically.
1597 *
1598 * @see xrt_output_name
1599 * @ingroup xrt_iface
1600 */
1601#define XRT_OUTPUT_NAME(id, type) ((UINT32_C(id) << XRT_OUTPUT_TYPE_BITWIDTH) | (uint32_t)XRT_OUTPUT_TYPE_##type)
1602
1603/*!
1604 * @brief Extract the xrt_output_type from an xrt_output_name.
1605 *
1606 * @param name An xrt_output_name value
1607 *
1608 * @relates xrt_output_name
1609 * @returns @ref xrt_output_type
1610 * @ingroup xrt_iface
1611 */
1612#define XRT_GET_OUTPUT_TYPE(name) ((enum xrt_output_type)(name & XRT_OUTPUT_TYPE_BITMASK))
1613
1614/*!
1615 * @brief Extract the xrt_output_name id from an xrt_output_name.
1616 *
1617 * @param name An xrt_output_name value
1618 *
1619 * @relates xrt_output_name
1620 * @returns The extracted id.
1621 * @ingroup xrt_iface
1622 */
1623#define XRT_GET_OUTPUT_ID(name) ((uint32_t)(name >> XRT_OUTPUT_TYPE_BITWIDTH))
1624
1625/*!
1626 * Base type of this output.
1627 *
1628 * @ingroup xrt_iface
1629 */
1631{
1632 // clang-format off
1633 XRT_OUTPUT_TYPE_VIBRATION = 0x00,
1634 XRT_OUTPUT_TYPE_FORCE_FEEDBACK = 0x01,
1635 // clang-format on
1636};
1637
1638/*!
1639 * Name of a output with a baked in type.
1640 *
1641 * @see xrt_output_type
1642 * @ingroup xrt_iface
1643 */
1645{
1646 // clang-format off
1647 //! Not a real output. Sentinel for "no output", distinct from any XRT_OUTPUT_NAME value.
1649 // Named outputs. Each value is XRT_OUTPUT_NAME(id, type), so none of these are 0.
1650 XRT_OUTPUT_NAME_SIMPLE_VIBRATION = XRT_OUTPUT_NAME(0x0010, VIBRATION),
1651 XRT_OUTPUT_NAME_PSMV_RUMBLE_VIBRATION = XRT_OUTPUT_NAME(0x0020, VIBRATION),
1652 XRT_OUTPUT_NAME_INDEX_HAPTIC = XRT_OUTPUT_NAME(0x0030, VIBRATION),
1653 XRT_OUTPUT_NAME_VIVE_HAPTIC = XRT_OUTPUT_NAME(0x0040, VIBRATION),
1654 XRT_OUTPUT_NAME_WMR_HAPTIC = XRT_OUTPUT_NAME(0x0050, VIBRATION),
1655
1656 XRT_OUTPUT_NAME_XBOX_HAPTIC_LEFT = XRT_OUTPUT_NAME(0x0060, VIBRATION),
1657 XRT_OUTPUT_NAME_XBOX_HAPTIC_RIGHT = XRT_OUTPUT_NAME(0x0061, VIBRATION),
1658 XRT_OUTPUT_NAME_XBOX_HAPTIC_LEFT_TRIGGER = XRT_OUTPUT_NAME(0x0062, VIBRATION),
1659 XRT_OUTPUT_NAME_XBOX_HAPTIC_RIGHT_TRIGGER = XRT_OUTPUT_NAME(0x0063, VIBRATION),
1660
1661 XRT_OUTPUT_NAME_TOUCH_HAPTIC = XRT_OUTPUT_NAME(0x0070, VIBRATION),
1662
1663 XRT_OUTPUT_NAME_FORCE_FEEDBACK_LEFT = XRT_OUTPUT_NAME(0x0080, FORCE_FEEDBACK),
1664 XRT_OUTPUT_NAME_FORCE_FEEDBACK_RIGHT = XRT_OUTPUT_NAME(0x0081, FORCE_FEEDBACK),
1665
1666 XRT_OUTPUT_NAME_G2_CONTROLLER_HAPTIC = XRT_OUTPUT_NAME(0x0090, VIBRATION),
1667 XRT_OUTPUT_NAME_ODYSSEY_CONTROLLER_HAPTIC = XRT_OUTPUT_NAME(0x00A0, VIBRATION),
1668 XRT_OUTPUT_NAME_ML2_CONTROLLER_VIBRATION = XRT_OUTPUT_NAME(0x00B0, VIBRATION),
1669
1670 XRT_OUTPUT_NAME_PSSENSE_VIBRATION = XRT_OUTPUT_NAME(0x00C0, VIBRATION),
1671 XRT_OUTPUT_NAME_PSSENSE_TRIGGER_FEEDBACK = XRT_OUTPUT_NAME(0x00C1, FORCE_FEEDBACK),
1672
1673 XRT_OUTPUT_NAME_VIVE_TRACKER_HAPTIC = XRT_OUTPUT_NAME(0x00D0, VIBRATION),
1674
1675 XRT_OUTPUT_NAME_OPPO_MR_HAPTIC = XRT_OUTPUT_NAME(0x00E0, VIBRATION),
1676
1677 XRT_OUTPUT_NAME_PICO_NEO3_HAPTIC = XRT_OUTPUT_NAME(0x00F0, VIBRATION),
1678 XRT_OUTPUT_NAME_PICO4_HAPTIC = XRT_OUTPUT_NAME(0x0100, VIBRATION),
1679
1680 XRT_OUTPUT_NAME_VIVE_COSMOS_HAPTIC = XRT_OUTPUT_NAME(0x0200, VIBRATION),
1681 XRT_OUTPUT_NAME_VIVE_FOCUS3_HAPTIC = XRT_OUTPUT_NAME(0x0300, VIBRATION),
1682
1683 XRT_OUTPUT_NAME_TOUCH_PRO_HAPTIC = XRT_OUTPUT_NAME(0x0400, VIBRATION),
1684 XRT_OUTPUT_NAME_TOUCH_PRO_HAPTIC_TRIGGER = XRT_OUTPUT_NAME(0x0500, VIBRATION),
1685 XRT_OUTPUT_NAME_TOUCH_PRO_HAPTIC_THUMB = XRT_OUTPUT_NAME(0x0600, VIBRATION),
1686 XRT_OUTPUT_NAME_TOUCH_PLUS_HAPTIC = XRT_OUTPUT_NAME(0x0700, VIBRATION),
1687
1688 XRT_OUTPUT_NAME_PSVR2_HAPTIC = XRT_OUTPUT_NAME(0x0800, VIBRATION),
1689
1690 XRT_OUTPUT_NAME_FLIPVR_HAPTIC = XRT_OUTPUT_NAME(0x0900, VIBRATION),
1691
1692 XRT_OUTPUT_NAME_MX_INK_HAPTIC = XRT_OUTPUT_NAME(0x0A00, VIBRATION),
1693
1694 // XR_KHR_generic_controller
1695 XRT_OUTPUT_NAME_GENERIC_VIBRATION = XRT_OUTPUT_NAME(0x0B00, VIBRATION),
1696
1697 XRT_OUTPUT_NAME_CONTACTGLOVE2_HAPTIC = XRT_OUTPUT_NAME(0x0C00, VIBRATION),
1698
1699 // clang-format on
1700 // Make sure to add a trailing comma to any new entries.
1701};
1702
1703enum xrt_face_expression2_fb
1704{
1705 XRT_FACE_EXPRESSION2_BROW_LOWERER_L_FB = 0,
1706 XRT_FACE_EXPRESSION2_BROW_LOWERER_R_FB = 1,
1707 XRT_FACE_EXPRESSION2_CHEEK_PUFF_L_FB = 2,
1708 XRT_FACE_EXPRESSION2_CHEEK_PUFF_R_FB = 3,
1709 XRT_FACE_EXPRESSION2_CHEEK_RAISER_L_FB = 4,
1710 XRT_FACE_EXPRESSION2_CHEEK_RAISER_R_FB = 5,
1711 XRT_FACE_EXPRESSION2_CHEEK_SUCK_L_FB = 6,
1712 XRT_FACE_EXPRESSION2_CHEEK_SUCK_R_FB = 7,
1713 XRT_FACE_EXPRESSION2_CHIN_RAISER_B_FB = 8,
1714 XRT_FACE_EXPRESSION2_CHIN_RAISER_T_FB = 9,
1715 XRT_FACE_EXPRESSION2_DIMPLER_L_FB = 10,
1716 XRT_FACE_EXPRESSION2_DIMPLER_R_FB = 11,
1717 XRT_FACE_EXPRESSION2_EYES_CLOSED_L_FB = 12,
1718 XRT_FACE_EXPRESSION2_EYES_CLOSED_R_FB = 13,
1719 XRT_FACE_EXPRESSION2_EYES_LOOK_DOWN_L_FB = 14,
1720 XRT_FACE_EXPRESSION2_EYES_LOOK_DOWN_R_FB = 15,
1721 XRT_FACE_EXPRESSION2_EYES_LOOK_LEFT_L_FB = 16,
1722 XRT_FACE_EXPRESSION2_EYES_LOOK_LEFT_R_FB = 17,
1723 XRT_FACE_EXPRESSION2_EYES_LOOK_RIGHT_L_FB = 18,
1724 XRT_FACE_EXPRESSION2_EYES_LOOK_RIGHT_R_FB = 19,
1725 XRT_FACE_EXPRESSION2_EYES_LOOK_UP_L_FB = 20,
1726 XRT_FACE_EXPRESSION2_EYES_LOOK_UP_R_FB = 21,
1727 XRT_FACE_EXPRESSION2_INNER_BROW_RAISER_L_FB = 22,
1728 XRT_FACE_EXPRESSION2_INNER_BROW_RAISER_R_FB = 23,
1729 XRT_FACE_EXPRESSION2_JAW_DROP_FB = 24,
1730 XRT_FACE_EXPRESSION2_JAW_SIDEWAYS_LEFT_FB = 25,
1731 XRT_FACE_EXPRESSION2_JAW_SIDEWAYS_RIGHT_FB = 26,
1732 XRT_FACE_EXPRESSION2_JAW_THRUST_FB = 27,
1733 XRT_FACE_EXPRESSION2_LID_TIGHTENER_L_FB = 28,
1734 XRT_FACE_EXPRESSION2_LID_TIGHTENER_R_FB = 29,
1735 XRT_FACE_EXPRESSION2_LIP_CORNER_DEPRESSOR_L_FB = 30,
1736 XRT_FACE_EXPRESSION2_LIP_CORNER_DEPRESSOR_R_FB = 31,
1737 XRT_FACE_EXPRESSION2_LIP_CORNER_PULLER_L_FB = 32,
1738 XRT_FACE_EXPRESSION2_LIP_CORNER_PULLER_R_FB = 33,
1739 XRT_FACE_EXPRESSION2_LIP_FUNNELER_LB_FB = 34,
1740 XRT_FACE_EXPRESSION2_LIP_FUNNELER_LT_FB = 35,
1741 XRT_FACE_EXPRESSION2_LIP_FUNNELER_RB_FB = 36,
1742 XRT_FACE_EXPRESSION2_LIP_FUNNELER_RT_FB = 37,
1743 XRT_FACE_EXPRESSION2_LIP_PRESSOR_L_FB = 38,
1744 XRT_FACE_EXPRESSION2_LIP_PRESSOR_R_FB = 39,
1745 XRT_FACE_EXPRESSION2_LIP_PUCKER_L_FB = 40,
1746 XRT_FACE_EXPRESSION2_LIP_PUCKER_R_FB = 41,
1747 XRT_FACE_EXPRESSION2_LIP_STRETCHER_L_FB = 42,
1748 XRT_FACE_EXPRESSION2_LIP_STRETCHER_R_FB = 43,
1749 XRT_FACE_EXPRESSION2_LIP_SUCK_LB_FB = 44,
1750 XRT_FACE_EXPRESSION2_LIP_SUCK_LT_FB = 45,
1751 XRT_FACE_EXPRESSION2_LIP_SUCK_RB_FB = 46,
1752 XRT_FACE_EXPRESSION2_LIP_SUCK_RT_FB = 47,
1753 XRT_FACE_EXPRESSION2_LIP_TIGHTENER_L_FB = 48,
1754 XRT_FACE_EXPRESSION2_LIP_TIGHTENER_R_FB = 49,
1755 XRT_FACE_EXPRESSION2_LIPS_TOWARD_FB = 50,
1756 XRT_FACE_EXPRESSION2_LOWER_LIP_DEPRESSOR_L_FB = 51,
1757 XRT_FACE_EXPRESSION2_LOWER_LIP_DEPRESSOR_R_FB = 52,
1758 XRT_FACE_EXPRESSION2_MOUTH_LEFT_FB = 53,
1759 XRT_FACE_EXPRESSION2_MOUTH_RIGHT_FB = 54,
1760 XRT_FACE_EXPRESSION2_NOSE_WRINKLER_L_FB = 55,
1761 XRT_FACE_EXPRESSION2_NOSE_WRINKLER_R_FB = 56,
1762 XRT_FACE_EXPRESSION2_OUTER_BROW_RAISER_L_FB = 57,
1763 XRT_FACE_EXPRESSION2_OUTER_BROW_RAISER_R_FB = 58,
1764 XRT_FACE_EXPRESSION2_UPPER_LID_RAISER_L_FB = 59,
1765 XRT_FACE_EXPRESSION2_UPPER_LID_RAISER_R_FB = 60,
1766 XRT_FACE_EXPRESSION2_UPPER_LIP_RAISER_L_FB = 61,
1767 XRT_FACE_EXPRESSION2_UPPER_LIP_RAISER_R_FB = 62,
1768 XRT_FACE_EXPRESSION2_TONGUE_TIP_INTERDENTAL_FB = 63,
1769 XRT_FACE_EXPRESSION2_TONGUE_TIP_ALVEOLAR_FB = 64,
1770 XRT_FACE_EXPRESSION2_TONGUE_FRONT_DORSAL_PALATE_FB = 65,
1771 XRT_FACE_EXPRESSION2_TONGUE_MID_DORSAL_PALATE_FB = 66,
1772 XRT_FACE_EXPRESSION2_TONGUE_BACK_DORSAL_VELAR_FB = 67,
1773 XRT_FACE_EXPRESSION2_TONGUE_OUT_FB = 68,
1774 XRT_FACE_EXPRESSION2_TONGUE_RETREAT_FB = 69,
1775 XRT_FACE_EXPRESSION2_COUNT_FB = 70,
1776 XRT_FACE_EXPRESSION_2FB_MAX_ENUM_FB = 0x7FFFFFFF
1777};
1778
1779enum xrt_face_confidence2_fb
1780{
1781 XRT_FACE_CONFIDENCE2_LOWER_FACE_FB = 0,
1782 XRT_FACE_CONFIDENCE2_UPPER_FACE_FB = 1,
1783 XRT_FACE_CONFIDENCE2_COUNT_FB = 2,
1784 XRT_FACE_CONFIDENCE_2FB_MAX_ENUM_FB = 0x7FFFFFFF
1785};
1786
1787enum xrt_face_expression_set2_fb
1788{
1789 XRT_FACE_EXPRESSION_SET2_DEFAULT_FB = 0,
1790 XRT_FACE_EXPRESSION_SET_2FB_MAX_ENUM_FB = 0x7FFFFFFF
1791};
1792
1793enum xrt_face_tracking_data_source2_fb
1794{
1795 XRT_FACE_TRACKING_DATA_SOURCE2_VISUAL_FB = 0,
1796 XRT_FACE_TRACKING_DATA_SOURCE2_AUDIO_FB = 1,
1797 XRT_FACE_TRACKING_DATA_SOURCE_2FB_MAX_ENUM_FB = 0x7FFFFFFF
1798};
1799
1800enum xrt_eye_expression_htc
1801{
1802 XRT_EYE_EXPRESSION_LEFT_BLINK_HTC = 0,
1803 XRT_EYE_EXPRESSION_LEFT_WIDE_HTC = 1,
1804 XRT_EYE_EXPRESSION_RIGHT_BLINK_HTC = 2,
1805 XRT_EYE_EXPRESSION_RIGHT_WIDE_HTC = 3,
1806 XRT_EYE_EXPRESSION_LEFT_SQUEEZE_HTC = 4,
1807 XRT_EYE_EXPRESSION_RIGHT_SQUEEZE_HTC = 5,
1808 XRT_EYE_EXPRESSION_LEFT_DOWN_HTC = 6,
1809 XRT_EYE_EXPRESSION_RIGHT_DOWN_HTC = 7,
1810 XRT_EYE_EXPRESSION_LEFT_OUT_HTC = 8,
1811 XRT_EYE_EXPRESSION_RIGHT_IN_HTC = 9,
1812 XRT_EYE_EXPRESSION_LEFT_IN_HTC = 10,
1813 XRT_EYE_EXPRESSION_RIGHT_OUT_HTC = 11,
1814 XRT_EYE_EXPRESSION_LEFT_UP_HTC = 12,
1815 XRT_EYE_EXPRESSION_RIGHT_UP_HTC = 13
1816};
1817
1818enum xrt_lip_expression_htc
1819{
1820 XRT_LIP_EXPRESSION_JAW_RIGHT_HTC = 0,
1821 XRT_LIP_EXPRESSION_JAW_LEFT_HTC = 1,
1822 XRT_LIP_EXPRESSION_JAW_FORWARD_HTC = 2,
1823 XRT_LIP_EXPRESSION_JAW_OPEN_HTC = 3,
1824 XRT_LIP_EXPRESSION_MOUTH_APE_SHAPE_HTC = 4,
1825 XRT_LIP_EXPRESSION_MOUTH_UPPER_RIGHT_HTC = 5,
1826 XRT_LIP_EXPRESSION_MOUTH_UPPER_LEFT_HTC = 6,
1827 XRT_LIP_EXPRESSION_MOUTH_LOWER_RIGHT_HTC = 7,
1828 XRT_LIP_EXPRESSION_MOUTH_LOWER_LEFT_HTC = 8,
1829 XRT_LIP_EXPRESSION_MOUTH_UPPER_OVERTURN_HTC = 9,
1830 XRT_LIP_EXPRESSION_MOUTH_LOWER_OVERTURN_HTC = 10,
1831 XRT_LIP_EXPRESSION_MOUTH_POUT_HTC = 11,
1832 XRT_LIP_EXPRESSION_MOUTH_SMILE_RIGHT_HTC = 12,
1833 XRT_LIP_EXPRESSION_MOUTH_SMILE_LEFT_HTC = 13,
1834 XRT_LIP_EXPRESSION_MOUTH_SAD_RIGHT_HTC = 14,
1835 XRT_LIP_EXPRESSION_MOUTH_SAD_LEFT_HTC = 15,
1836 XRT_LIP_EXPRESSION_CHEEK_PUFF_RIGHT_HTC = 16,
1837 XRT_LIP_EXPRESSION_CHEEK_PUFF_LEFT_HTC = 17,
1838 XRT_LIP_EXPRESSION_CHEEK_SUCK_HTC = 18,
1839 XRT_LIP_EXPRESSION_MOUTH_UPPER_UPRIGHT_HTC = 19,
1840 XRT_LIP_EXPRESSION_MOUTH_UPPER_UPLEFT_HTC = 20,
1841 XRT_LIP_EXPRESSION_MOUTH_LOWER_DOWNRIGHT_HTC = 21,
1842 XRT_LIP_EXPRESSION_MOUTH_LOWER_DOWNLEFT_HTC = 22,
1843 XRT_LIP_EXPRESSION_MOUTH_UPPER_INSIDE_HTC = 23,
1844 XRT_LIP_EXPRESSION_MOUTH_LOWER_INSIDE_HTC = 24,
1845 XRT_LIP_EXPRESSION_MOUTH_LOWER_OVERLAY_HTC = 25,
1846 XRT_LIP_EXPRESSION_TONGUE_LONGSTEP1_HTC = 26,
1847 XRT_LIP_EXPRESSION_TONGUE_LEFT_HTC = 27,
1848 XRT_LIP_EXPRESSION_TONGUE_RIGHT_HTC = 28,
1849 XRT_LIP_EXPRESSION_TONGUE_UP_HTC = 29,
1850 XRT_LIP_EXPRESSION_TONGUE_DOWN_HTC = 30,
1851 XRT_LIP_EXPRESSION_TONGUE_ROLL_HTC = 31,
1852 XRT_LIP_EXPRESSION_TONGUE_LONGSTEP2_HTC = 32,
1853 XRT_LIP_EXPRESSION_TONGUE_UPRIGHT_MORPH_HTC = 33,
1854 XRT_LIP_EXPRESSION_TONGUE_UPLEFT_MORPH_HTC = 34,
1855 XRT_LIP_EXPRESSION_TONGUE_DOWNRIGHT_MORPH_HTC = 35,
1856 XRT_LIP_EXPRESSION_TONGUE_DOWNLEFT_MORPH_HTC = 36
1857};
1858
1859enum xrt_facial_tracking_type_htc
1860{
1861 XRT_FACIAL_TRACKING_TYPE_EYE_DEFAULT_HTC = 1,
1862 XRT_FACIAL_TRACKING_TYPE_LIP_DEFAULT_HTC = 2
1863};
1864
1865#define XRT_FACIAL_EXPRESSION_EYE_COUNT_HTC 14
1866#define XRT_FACIAL_EXPRESSION_LIP_COUNT_HTC 37
1867
1868enum xrt_face_confidence_regions_android
1869{
1870 XRT_FACE_CONFIDENCE_REGIONS_LOWER_ANDROID = 0,
1871 XRT_FACE_CONFIDENCE_REGIONS_LEFT_UPPER_ANDROID = 1,
1872 XRT_FACE_CONFIDENCE_REGIONS_RIGHT_UPPER_ANDROID = 2,
1873};
1874
1875enum xrt_face_parameter_indices_android
1876{
1877 XRT_FACE_PARAMETER_INDICES_BROW_LOWERER_L_ANDROID = 0,
1878 XRT_FACE_PARAMETER_INDICES_BROW_LOWERER_R_ANDROID = 1,
1879 XRT_FACE_PARAMETER_INDICES_CHEEK_PUFF_L_ANDROID = 2,
1880 XRT_FACE_PARAMETER_INDICES_CHEEK_PUFF_R_ANDROID = 3,
1881 XRT_FACE_PARAMETER_INDICES_CHEEK_RAISER_L_ANDROID = 4,
1882 XRT_FACE_PARAMETER_INDICES_CHEEK_RAISER_R_ANDROID = 5,
1883 XRT_FACE_PARAMETER_INDICES_CHEEK_SUCK_L_ANDROID = 6,
1884 XRT_FACE_PARAMETER_INDICES_CHEEK_SUCK_R_ANDROID = 7,
1885 XRT_FACE_PARAMETER_INDICES_CHIN_RAISER_B_ANDROID = 8,
1886 XRT_FACE_PARAMETER_INDICES_CHIN_RAISER_T_ANDROID = 9,
1887 XRT_FACE_PARAMETER_INDICES_DIMPLER_L_ANDROID = 10,
1888 XRT_FACE_PARAMETER_INDICES_DIMPLER_R_ANDROID = 11,
1889 XRT_FACE_PARAMETER_INDICES_EYES_CLOSED_L_ANDROID = 12,
1890 XRT_FACE_PARAMETER_INDICES_EYES_CLOSED_R_ANDROID = 13,
1891 XRT_FACE_PARAMETER_INDICES_EYES_LOOK_DOWN_L_ANDROID = 14,
1892 XRT_FACE_PARAMETER_INDICES_EYES_LOOK_DOWN_R_ANDROID = 15,
1893 XRT_FACE_PARAMETER_INDICES_EYES_LOOK_LEFT_L_ANDROID = 16,
1894 XRT_FACE_PARAMETER_INDICES_EYES_LOOK_LEFT_R_ANDROID = 17,
1895 XRT_FACE_PARAMETER_INDICES_EYES_LOOK_RIGHT_L_ANDROID = 18,
1896 XRT_FACE_PARAMETER_INDICES_EYES_LOOK_RIGHT_R_ANDROID = 19,
1897 XRT_FACE_PARAMETER_INDICES_EYES_LOOK_UP_L_ANDROID = 20,
1898 XRT_FACE_PARAMETER_INDICES_EYES_LOOK_UP_R_ANDROID = 21,
1899 XRT_FACE_PARAMETER_INDICES_INNER_BROW_RAISER_L_ANDROID = 22,
1900 XRT_FACE_PARAMETER_INDICES_INNER_BROW_RAISER_R_ANDROID = 23,
1901 XRT_FACE_PARAMETER_INDICES_JAW_DROP_ANDROID = 24,
1902 XRT_FACE_PARAMETER_INDICES_JAW_SIDEWAYS_LEFT_ANDROID = 25,
1903 XRT_FACE_PARAMETER_INDICES_JAW_SIDEWAYS_RIGHT_ANDROID = 26,
1904 XRT_FACE_PARAMETER_INDICES_JAW_THRUST_ANDROID = 27,
1905 XRT_FACE_PARAMETER_INDICES_LID_TIGHTENER_L_ANDROID = 28,
1906 XRT_FACE_PARAMETER_INDICES_LID_TIGHTENER_R_ANDROID = 29,
1907 XRT_FACE_PARAMETER_INDICES_LIP_CORNER_DEPRESSOR_L_ANDROID = 30,
1908 XRT_FACE_PARAMETER_INDICES_LIP_CORNER_DEPRESSOR_R_ANDROID = 31,
1909 XRT_FACE_PARAMETER_INDICES_LIP_CORNER_PULLER_L_ANDROID = 32,
1910 XRT_FACE_PARAMETER_INDICES_LIP_CORNER_PULLER_R_ANDROID = 33,
1911 XRT_FACE_PARAMETER_INDICES_LIP_FUNNELER_LB_ANDROID = 34,
1912 XRT_FACE_PARAMETER_INDICES_LIP_FUNNELER_LT_ANDROID = 35,
1913 XRT_FACE_PARAMETER_INDICES_LIP_FUNNELER_RB_ANDROID = 36,
1914 XRT_FACE_PARAMETER_INDICES_LIP_FUNNELER_RT_ANDROID = 37,
1915 XRT_FACE_PARAMETER_INDICES_LIP_PRESSOR_L_ANDROID = 38,
1916 XRT_FACE_PARAMETER_INDICES_LIP_PRESSOR_R_ANDROID = 39,
1917 XRT_FACE_PARAMETER_INDICES_LIP_PUCKER_L_ANDROID = 40,
1918 XRT_FACE_PARAMETER_INDICES_LIP_PUCKER_R_ANDROID = 41,
1919 XRT_FACE_PARAMETER_INDICES_LIP_STRETCHER_L_ANDROID = 42,
1920 XRT_FACE_PARAMETER_INDICES_LIP_STRETCHER_R_ANDROID = 43,
1921 XRT_FACE_PARAMETER_INDICES_LIP_SUCK_LB_ANDROID = 44,
1922 XRT_FACE_PARAMETER_INDICES_LIP_SUCK_LT_ANDROID = 45,
1923 XRT_FACE_PARAMETER_INDICES_LIP_SUCK_RB_ANDROID = 46,
1924 XRT_FACE_PARAMETER_INDICES_LIP_SUCK_RT_ANDROID = 47,
1925 XRT_FACE_PARAMETER_INDICES_LIP_TIGHTENER_L_ANDROID = 48,
1926 XRT_FACE_PARAMETER_INDICES_LIP_TIGHTENER_R_ANDROID = 49,
1927 XRT_FACE_PARAMETER_INDICES_LIPS_TOWARD_ANDROID = 50,
1928 XRT_FACE_PARAMETER_INDICES_LOWER_LIP_DEPRESSOR_L_ANDROID = 51,
1929 XRT_FACE_PARAMETER_INDICES_LOWER_LIP_DEPRESSOR_R_ANDROID = 52,
1930 XRT_FACE_PARAMETER_INDICES_MOUTH_LEFT_ANDROID = 53,
1931 XRT_FACE_PARAMETER_INDICES_MOUTH_RIGHT_ANDROID = 54,
1932 XRT_FACE_PARAMETER_INDICES_NOSE_WRINKLER_L_ANDROID = 55,
1933 XRT_FACE_PARAMETER_INDICES_NOSE_WRINKLER_R_ANDROID = 56,
1934 XRT_FACE_PARAMETER_INDICES_OUTER_BROW_RAISER_L_ANDROID = 57,
1935 XRT_FACE_PARAMETER_INDICES_OUTER_BROW_RAISER_R_ANDROID = 58,
1936 XRT_FACE_PARAMETER_INDICES_UPPER_LID_RAISER_L_ANDROID = 59,
1937 XRT_FACE_PARAMETER_INDICES_UPPER_LID_RAISER_R_ANDROID = 60,
1938 XRT_FACE_PARAMETER_INDICES_UPPER_LIP_RAISER_L_ANDROID = 61,
1939 XRT_FACE_PARAMETER_INDICES_UPPER_LIP_RAISER_R_ANDROID = 62,
1940 XRT_FACE_PARAMETER_INDICES_TONGUE_OUT_ANDROID = 63,
1941 XRT_FACE_PARAMETER_INDICES_TONGUE_LEFT_ANDROID = 64,
1942 XRT_FACE_PARAMETER_INDICES_TONGUE_RIGHT_ANDROID = 65,
1943 XRT_FACE_PARAMETER_INDICES_TONGUE_UP_ANDROID = 66,
1944 XRT_FACE_PARAMETER_INDICES_TONGUE_DOWN_ANDROID = 67,
1945};
1946
1947enum xrt_face_tracking_state_android
1948{
1949 XRT_FACE_TRACKING_STATE_PAUSED_ANDROID = 0,
1950 XRT_FACE_TRACKING_STATE_STOPPED_ANDROID = 1,
1951 XRT_FACE_TRACKING_STATE_TRACKING_ANDROID = 2,
1952};
1953
1954#define XRT_FACE_PARAMETER_COUNT_ANDROID 68
1955
1956#define XRT_FACE_REGION_CONFIDENCE_COUNT_ANDROID 3
1957
1959{
1960 int64_t sample_time_ns;
1961 XRT_ALIGNAS(8) bool is_active;
1962};
1963
1965{
1967 /// ordered by @ref xrt_eye_expression_htc
1968 float expression_weights[XRT_FACIAL_EXPRESSION_EYE_COUNT_HTC];
1969};
1970
1972{
1974 /// ordered by @ref xrt_lip_expression_htc
1975 float expression_weights[XRT_FACIAL_EXPRESSION_LIP_COUNT_HTC];
1976};
1977
1979{
1980 float weights[XRT_FACE_EXPRESSION2_COUNT_FB];
1981 float confidences[XRT_FACE_CONFIDENCE2_COUNT_FB];
1982
1983 enum xrt_face_tracking_data_source2_fb data_source;
1984 int64_t sample_time_ns;
1985
1986 XRT_ALIGNAS(8) bool is_valid;
1987 bool is_eye_following_blendshapes_valid;
1988};
1989
1991{
1992 // ordered by xrt_face_parameter_indices_android
1993 float parameters[XRT_FACE_PARAMETER_COUNT_ANDROID];
1994 float region_confidences[XRT_FACE_REGION_CONFIDENCE_COUNT_ANDROID];
1995
1996 enum xrt_face_tracking_state_android state;
1997 int64_t sample_time_ns;
1998
1999 XRT_ALIGNAS(8) bool is_valid;
2000};
2001
2003{
2004 union {
2005 struct xrt_facial_base_expression_set_htc base_expression_set_htc;
2006 struct xrt_facial_eye_expression_set_htc eye_expression_set_htc;
2007 struct xrt_facial_lip_expression_set_htc lip_expression_set_htc;
2008 struct xrt_facial_expression_set2_fb face_expression_set2_fb;
2009 struct xrt_facial_expression_set_android face_expression_set_android;
2010 };
2011};
2012
2013/// @addtogroup XR_FB_body_tracking
2014enum xrt_body_joint_fb
2015{
2016 XRT_BODY_JOINT_ROOT_FB = 0,
2017 XRT_BODY_JOINT_HIPS_FB = 1,
2018 XRT_BODY_JOINT_SPINE_LOWER_FB = 2,
2019 XRT_BODY_JOINT_SPINE_MIDDLE_FB = 3,
2020 XRT_BODY_JOINT_SPINE_UPPER_FB = 4,
2021 XRT_BODY_JOINT_CHEST_FB = 5,
2022 XRT_BODY_JOINT_NECK_FB = 6,
2023 XRT_BODY_JOINT_HEAD_FB = 7,
2024 XRT_BODY_JOINT_LEFT_SHOULDER_FB = 8,
2025 XRT_BODY_JOINT_LEFT_SCAPULA_FB = 9,
2026 XRT_BODY_JOINT_LEFT_ARM_UPPER_FB = 10,
2027 XRT_BODY_JOINT_LEFT_ARM_LOWER_FB = 11,
2028 XRT_BODY_JOINT_LEFT_HAND_WRIST_TWIST_FB = 12,
2029 XRT_BODY_JOINT_RIGHT_SHOULDER_FB = 13,
2030 XRT_BODY_JOINT_RIGHT_SCAPULA_FB = 14,
2031 XRT_BODY_JOINT_RIGHT_ARM_UPPER_FB = 15,
2032 XRT_BODY_JOINT_RIGHT_ARM_LOWER_FB = 16,
2033 XRT_BODY_JOINT_RIGHT_HAND_WRIST_TWIST_FB = 17,
2034 XRT_BODY_JOINT_LEFT_HAND_PALM_FB = 18,
2035 XRT_BODY_JOINT_LEFT_HAND_WRIST_FB = 19,
2036 XRT_BODY_JOINT_LEFT_HAND_THUMB_METACARPAL_FB = 20,
2037 XRT_BODY_JOINT_LEFT_HAND_THUMB_PROXIMAL_FB = 21,
2038 XRT_BODY_JOINT_LEFT_HAND_THUMB_DISTAL_FB = 22,
2039 XRT_BODY_JOINT_LEFT_HAND_THUMB_TIP_FB = 23,
2040 XRT_BODY_JOINT_LEFT_HAND_INDEX_METACARPAL_FB = 24,
2041 XRT_BODY_JOINT_LEFT_HAND_INDEX_PROXIMAL_FB = 25,
2042 XRT_BODY_JOINT_LEFT_HAND_INDEX_INTERMEDIATE_FB = 26,
2043 XRT_BODY_JOINT_LEFT_HAND_INDEX_DISTAL_FB = 27,
2044 XRT_BODY_JOINT_LEFT_HAND_INDEX_TIP_FB = 28,
2045 XRT_BODY_JOINT_LEFT_HAND_MIDDLE_METACARPAL_FB = 29,
2046 XRT_BODY_JOINT_LEFT_HAND_MIDDLE_PROXIMAL_FB = 30,
2047 XRT_BODY_JOINT_LEFT_HAND_MIDDLE_INTERMEDIATE_FB = 31,
2048 XRT_BODY_JOINT_LEFT_HAND_MIDDLE_DISTAL_FB = 32,
2049 XRT_BODY_JOINT_LEFT_HAND_MIDDLE_TIP_FB = 33,
2050 XRT_BODY_JOINT_LEFT_HAND_RING_METACARPAL_FB = 34,
2051 XRT_BODY_JOINT_LEFT_HAND_RING_PROXIMAL_FB = 35,
2052 XRT_BODY_JOINT_LEFT_HAND_RING_INTERMEDIATE_FB = 36,
2053 XRT_BODY_JOINT_LEFT_HAND_RING_DISTAL_FB = 37,
2054 XRT_BODY_JOINT_LEFT_HAND_RING_TIP_FB = 38,
2055 XRT_BODY_JOINT_LEFT_HAND_LITTLE_METACARPAL_FB = 39,
2056 XRT_BODY_JOINT_LEFT_HAND_LITTLE_PROXIMAL_FB = 40,
2057 XRT_BODY_JOINT_LEFT_HAND_LITTLE_INTERMEDIATE_FB = 41,
2058 XRT_BODY_JOINT_LEFT_HAND_LITTLE_DISTAL_FB = 42,
2059 XRT_BODY_JOINT_LEFT_HAND_LITTLE_TIP_FB = 43,
2060 XRT_BODY_JOINT_RIGHT_HAND_PALM_FB = 44,
2061 XRT_BODY_JOINT_RIGHT_HAND_WRIST_FB = 45,
2062 XRT_BODY_JOINT_RIGHT_HAND_THUMB_METACARPAL_FB = 46,
2063 XRT_BODY_JOINT_RIGHT_HAND_THUMB_PROXIMAL_FB = 47,
2064 XRT_BODY_JOINT_RIGHT_HAND_THUMB_DISTAL_FB = 48,
2065 XRT_BODY_JOINT_RIGHT_HAND_THUMB_TIP_FB = 49,
2066 XRT_BODY_JOINT_RIGHT_HAND_INDEX_METACARPAL_FB = 50,
2067 XRT_BODY_JOINT_RIGHT_HAND_INDEX_PROXIMAL_FB = 51,
2068 XRT_BODY_JOINT_RIGHT_HAND_INDEX_INTERMEDIATE_FB = 52,
2069 XRT_BODY_JOINT_RIGHT_HAND_INDEX_DISTAL_FB = 53,
2070 XRT_BODY_JOINT_RIGHT_HAND_INDEX_TIP_FB = 54,
2071 XRT_BODY_JOINT_RIGHT_HAND_MIDDLE_METACARPAL_FB = 55,
2072 XRT_BODY_JOINT_RIGHT_HAND_MIDDLE_PROXIMAL_FB = 56,
2073 XRT_BODY_JOINT_RIGHT_HAND_MIDDLE_INTERMEDIATE_FB = 57,
2074 XRT_BODY_JOINT_RIGHT_HAND_MIDDLE_DISTAL_FB = 58,
2075 XRT_BODY_JOINT_RIGHT_HAND_MIDDLE_TIP_FB = 59,
2076 XRT_BODY_JOINT_RIGHT_HAND_RING_METACARPAL_FB = 60,
2077 XRT_BODY_JOINT_RIGHT_HAND_RING_PROXIMAL_FB = 61,
2078 XRT_BODY_JOINT_RIGHT_HAND_RING_INTERMEDIATE_FB = 62,
2079 XRT_BODY_JOINT_RIGHT_HAND_RING_DISTAL_FB = 63,
2080 XRT_BODY_JOINT_RIGHT_HAND_RING_TIP_FB = 64,
2081 XRT_BODY_JOINT_RIGHT_HAND_LITTLE_METACARPAL_FB = 65,
2082 XRT_BODY_JOINT_RIGHT_HAND_LITTLE_PROXIMAL_FB = 66,
2083 XRT_BODY_JOINT_RIGHT_HAND_LITTLE_INTERMEDIATE_FB = 67,
2084 XRT_BODY_JOINT_RIGHT_HAND_LITTLE_DISTAL_FB = 68,
2085 XRT_BODY_JOINT_RIGHT_HAND_LITTLE_TIP_FB = 69,
2086 XRT_BODY_JOINT_COUNT_FB = 70,
2087 XRT_BODY_JOINT_NONE_FB = -1,
2088};
2089
2090/// @addtogroup XR_META_body_tracking_full_body
2091enum xrt_full_body_joint_meta
2092{
2093 XRT_FULL_BODY_JOINT_ROOT_META = 0,
2094 XRT_FULL_BODY_JOINT_HIPS_META = 1,
2095 XRT_FULL_BODY_JOINT_SPINE_LOWER_META = 2,
2096 XRT_FULL_BODY_JOINT_SPINE_MIDDLE_META = 3,
2097 XRT_FULL_BODY_JOINT_SPINE_UPPER_META = 4,
2098 XRT_FULL_BODY_JOINT_CHEST_META = 5,
2099 XRT_FULL_BODY_JOINT_NECK_META = 6,
2100 XRT_FULL_BODY_JOINT_HEAD_META = 7,
2101 XRT_FULL_BODY_JOINT_LEFT_SHOULDER_META = 8,
2102 XRT_FULL_BODY_JOINT_LEFT_SCAPULA_META = 9,
2103 XRT_FULL_BODY_JOINT_LEFT_ARM_UPPER_META = 10,
2104 XRT_FULL_BODY_JOINT_LEFT_ARM_LOWER_META = 11,
2105 XRT_FULL_BODY_JOINT_LEFT_HAND_WRIST_TWIST_META = 12,
2106 XRT_FULL_BODY_JOINT_RIGHT_SHOULDER_META = 13,
2107 XRT_FULL_BODY_JOINT_RIGHT_SCAPULA_META = 14,
2108 XRT_FULL_BODY_JOINT_RIGHT_ARM_UPPER_META = 15,
2109 XRT_FULL_BODY_JOINT_RIGHT_ARM_LOWER_META = 16,
2110 XRT_FULL_BODY_JOINT_RIGHT_HAND_WRIST_TWIST_META = 17,
2111 XRT_FULL_BODY_JOINT_LEFT_HAND_PALM_META = 18,
2112 XRT_FULL_BODY_JOINT_LEFT_HAND_WRIST_META = 19,
2113 XRT_FULL_BODY_JOINT_LEFT_HAND_THUMB_METACARPAL_META = 20,
2114 XRT_FULL_BODY_JOINT_LEFT_HAND_THUMB_PROXIMAL_META = 21,
2115 XRT_FULL_BODY_JOINT_LEFT_HAND_THUMB_DISTAL_META = 22,
2116 XRT_FULL_BODY_JOINT_LEFT_HAND_THUMB_TIP_META = 23,
2117 XRT_FULL_BODY_JOINT_LEFT_HAND_INDEX_METACARPAL_META = 24,
2118 XRT_FULL_BODY_JOINT_LEFT_HAND_INDEX_PROXIMAL_META = 25,
2119 XRT_FULL_BODY_JOINT_LEFT_HAND_INDEX_INTERMEDIATE_META = 26,
2120 XRT_FULL_BODY_JOINT_LEFT_HAND_INDEX_DISTAL_META = 27,
2121 XRT_FULL_BODY_JOINT_LEFT_HAND_INDEX_TIP_META = 28,
2122 XRT_FULL_BODY_JOINT_LEFT_HAND_MIDDLE_METACARPAL_META = 29,
2123 XRT_FULL_BODY_JOINT_LEFT_HAND_MIDDLE_PROXIMAL_META = 30,
2124 XRT_FULL_BODY_JOINT_LEFT_HAND_MIDDLE_INTERMEDIATE_META = 31,
2125 XRT_FULL_BODY_JOINT_LEFT_HAND_MIDDLE_DISTAL_META = 32,
2126 XRT_FULL_BODY_JOINT_LEFT_HAND_MIDDLE_TIP_META = 33,
2127 XRT_FULL_BODY_JOINT_LEFT_HAND_RING_METACARPAL_META = 34,
2128 XRT_FULL_BODY_JOINT_LEFT_HAND_RING_PROXIMAL_META = 35,
2129 XRT_FULL_BODY_JOINT_LEFT_HAND_RING_INTERMEDIATE_META = 36,
2130 XRT_FULL_BODY_JOINT_LEFT_HAND_RING_DISTAL_META = 37,
2131 XRT_FULL_BODY_JOINT_LEFT_HAND_RING_TIP_META = 38,
2132 XRT_FULL_BODY_JOINT_LEFT_HAND_LITTLE_METACARPAL_META = 39,
2133 XRT_FULL_BODY_JOINT_LEFT_HAND_LITTLE_PROXIMAL_META = 40,
2134 XRT_FULL_BODY_JOINT_LEFT_HAND_LITTLE_INTERMEDIATE_META = 41,
2135 XRT_FULL_BODY_JOINT_LEFT_HAND_LITTLE_DISTAL_META = 42,
2136 XRT_FULL_BODY_JOINT_LEFT_HAND_LITTLE_TIP_META = 43,
2137 XRT_FULL_BODY_JOINT_RIGHT_HAND_PALM_META = 44,
2138 XRT_FULL_BODY_JOINT_RIGHT_HAND_WRIST_META = 45,
2139 XRT_FULL_BODY_JOINT_RIGHT_HAND_THUMB_METACARPAL_META = 46,
2140 XRT_FULL_BODY_JOINT_RIGHT_HAND_THUMB_PROXIMAL_META = 47,
2141 XRT_FULL_BODY_JOINT_RIGHT_HAND_THUMB_DISTAL_META = 48,
2142 XRT_FULL_BODY_JOINT_RIGHT_HAND_THUMB_TIP_META = 49,
2143 XRT_FULL_BODY_JOINT_RIGHT_HAND_INDEX_METACARPAL_META = 50,
2144 XRT_FULL_BODY_JOINT_RIGHT_HAND_INDEX_PROXIMAL_META = 51,
2145 XRT_FULL_BODY_JOINT_RIGHT_HAND_INDEX_INTERMEDIATE_META = 52,
2146 XRT_FULL_BODY_JOINT_RIGHT_HAND_INDEX_DISTAL_META = 53,
2147 XRT_FULL_BODY_JOINT_RIGHT_HAND_INDEX_TIP_META = 54,
2148 XRT_FULL_BODY_JOINT_RIGHT_HAND_MIDDLE_METACARPAL_META = 55,
2149 XRT_FULL_BODY_JOINT_RIGHT_HAND_MIDDLE_PROXIMAL_META = 56,
2150 XRT_FULL_BODY_JOINT_RIGHT_HAND_MIDDLE_INTERMEDIATE_META = 57,
2151 XRT_FULL_BODY_JOINT_RIGHT_HAND_MIDDLE_DISTAL_META = 58,
2152 XRT_FULL_BODY_JOINT_RIGHT_HAND_MIDDLE_TIP_META = 59,
2153 XRT_FULL_BODY_JOINT_RIGHT_HAND_RING_METACARPAL_META = 60,
2154 XRT_FULL_BODY_JOINT_RIGHT_HAND_RING_PROXIMAL_META = 61,
2155 XRT_FULL_BODY_JOINT_RIGHT_HAND_RING_INTERMEDIATE_META = 62,
2156 XRT_FULL_BODY_JOINT_RIGHT_HAND_RING_DISTAL_META = 63,
2157 XRT_FULL_BODY_JOINT_RIGHT_HAND_RING_TIP_META = 64,
2158 XRT_FULL_BODY_JOINT_RIGHT_HAND_LITTLE_METACARPAL_META = 65,
2159 XRT_FULL_BODY_JOINT_RIGHT_HAND_LITTLE_PROXIMAL_META = 66,
2160 XRT_FULL_BODY_JOINT_RIGHT_HAND_LITTLE_INTERMEDIATE_META = 67,
2161 XRT_FULL_BODY_JOINT_RIGHT_HAND_LITTLE_DISTAL_META = 68,
2162 XRT_FULL_BODY_JOINT_RIGHT_HAND_LITTLE_TIP_META = 69,
2163 XRT_FULL_BODY_JOINT_LEFT_UPPER_LEG_META = 70,
2164 XRT_FULL_BODY_JOINT_LEFT_LOWER_LEG_META = 71,
2165 XRT_FULL_BODY_JOINT_LEFT_FOOT_ANKLE_TWIST_META = 72,
2166 XRT_FULL_BODY_JOINT_LEFT_FOOT_ANKLE_META = 73,
2167 XRT_FULL_BODY_JOINT_LEFT_FOOT_SUBTALAR_META = 74,
2168 XRT_FULL_BODY_JOINT_LEFT_FOOT_TRANSVERSE_META = 75,
2169 XRT_FULL_BODY_JOINT_LEFT_FOOT_BALL_META = 76,
2170 XRT_FULL_BODY_JOINT_RIGHT_UPPER_LEG_META = 77,
2171 XRT_FULL_BODY_JOINT_RIGHT_LOWER_LEG_META = 78,
2172 XRT_FULL_BODY_JOINT_RIGHT_FOOT_ANKLE_TWIST_META = 79,
2173 XRT_FULL_BODY_JOINT_RIGHT_FOOT_ANKLE_META = 80,
2174 XRT_FULL_BODY_JOINT_RIGHT_FOOT_SUBTALAR_META = 81,
2175 XRT_FULL_BODY_JOINT_RIGHT_FOOT_TRANSVERSE_META = 82,
2176 XRT_FULL_BODY_JOINT_RIGHT_FOOT_BALL_META = 83,
2177 XRT_FULL_BODY_JOINT_COUNT_META = 84,
2178 XRT_FULL_BODY_JOINT_NONE_META = 85,
2179};
2180
2181/// @addtogroup XR_META_body_tracking_full_body
2182enum xrt_body_joint_set_type_fb
2183{
2184 XRT_BODY_JOINT_SET_UNKNOWN = 0,
2185 // XR_FB_body_tracking
2186 XRT_BODY_JOINT_SET_DEFAULT_FB,
2187 // XR_META_body_tracking_full_body
2188 XRT_BODY_JOINT_SET_FULL_BODY_META,
2189};
2190
2191/// @addtogroup XR_META_body_tracking_calibration
2192enum xrt_body_tracking_calibration_state_meta
2193{
2194 // Valid calibration, pose is safe to use
2195 XRT_BODY_TRACKING_CALIBRATION_STATE_VALID_META = 1,
2196 // Calibration is still running, pose may be incorrect
2197 XRT_BODY_TRACKING_CALIBRATION_STATE_CALIBRATING_META = 2,
2198 // Calibration is invalid, pose is not safe to use
2199 XRT_BODY_TRACKING_CALIBRATION_STATE_INVALID_META = 3,
2200};
2201
2202/// @addtogroup XR_META_body_tracking_fidelity
2203enum xrt_body_tracking_fidelity_meta
2204{
2205 XRT_BODY_TRACKING_FIDELITY_LOW_META = 1,
2206 XRT_BODY_TRACKING_FIDELITY_HIGH_META = 2,
2207};
2208
2209/// @addtogroup XR_FB_body_tracking
2211{
2212 struct xrt_pose pose;
2213 int32_t joint;
2214 int32_t parent_joint;
2215};
2216
2217/// @addtogroup XR_FB_body_tracking
2219{
2220 /// ordered by @ref xrt_body_joint_fb
2221 struct xrt_body_skeleton_joint_fb joints[XRT_BODY_JOINT_COUNT_FB];
2222};
2223
2224/// @addtogroup XR_META_body_tracking_full_body
2226{
2227 /// ordered by @ref xrt_full_body_joint_meta
2228 struct xrt_body_skeleton_joint_fb joints[XRT_FULL_BODY_JOINT_COUNT_META];
2229};
2230
2231// structure is a container to represent the body skeleton in T-pose including the joint hierarchy,
2232// can have info such as skeleton scale and proportions
2234{
2235 union {
2236 struct xrt_body_skeleton_fb body_skeleton_fb;
2237 struct xrt_full_body_skeleton_meta full_body_skeleton_meta;
2238 };
2239};
2240
2242{
2243 struct xrt_space_relation relation;
2244};
2245
2247{
2248 int64_t sample_time_ns;
2249 float confidence;
2250 uint32_t skeleton_changed_count;
2251 XRT_ALIGNAS(8) bool is_active;
2252
2253 struct
2254 {
2255 // Requires XR_META_body_tracking_calibration, @ref xrt_device_supported::body_tracking_calibration
2256 enum xrt_body_tracking_calibration_state_meta calibration_status;
2257
2258 // Requires XR_META_body_tracking_fidelity, @ref xrt_device_supported::body_tracking_fidelity
2259 enum xrt_body_tracking_fidelity_meta fidelity_status;
2260 } exts;
2261};
2262
2263// XR_FB_body_tracking
2265{
2266 struct xrt_base_body_joint_set_meta base;
2267 // ordered by xrt_body_joint_fb
2268 struct xrt_body_joint_location_fb joint_locations[XRT_BODY_JOINT_COUNT_FB];
2269};
2270
2271// XR_META_body_tracking_full_body
2273{
2274 struct xrt_base_body_joint_set_meta base;
2275 // ordered by xrt_full_body_joint_meta
2276 struct xrt_body_joint_location_fb joint_locations[XRT_FULL_BODY_JOINT_COUNT_META];
2277};
2278
2279/*
2280 *
2281 * XR_BD_body_tracking (PICO body tracking)
2282 *
2283 */
2284
2285#define XRT_BODY_JOINT_COUNT_BD 24
2286#define XRT_BODY_JOINT_WITHOUT_ARM_COUNT_BD 16
2287
2288enum xrt_body_joint_bd
2289{
2290 XRT_BODY_JOINT_PELVIS_BD = 0,
2291 XRT_BODY_JOINT_LEFT_HIP_BD = 1,
2292 XRT_BODY_JOINT_RIGHT_HIP_BD = 2,
2293 XRT_BODY_JOINT_SPINE1_BD = 3,
2294 XRT_BODY_JOINT_LEFT_KNEE_BD = 4,
2295 XRT_BODY_JOINT_RIGHT_KNEE_BD = 5,
2296 XRT_BODY_JOINT_SPINE2_BD = 6,
2297 XRT_BODY_JOINT_LEFT_ANKLE_BD = 7,
2298 XRT_BODY_JOINT_RIGHT_ANKLE_BD = 8,
2299 XRT_BODY_JOINT_SPINE3_BD = 9,
2300 XRT_BODY_JOINT_LEFT_FOOT_BD = 10,
2301 XRT_BODY_JOINT_RIGHT_FOOT_BD = 11,
2302 XRT_BODY_JOINT_NECK_BD = 12,
2303 XRT_BODY_JOINT_LEFT_COLLAR_BD = 13,
2304 XRT_BODY_JOINT_RIGHT_COLLAR_BD = 14,
2305 XRT_BODY_JOINT_HEAD_BD = 15,
2306 XRT_BODY_JOINT_LEFT_SHOULDER_BD = 16,
2307 XRT_BODY_JOINT_RIGHT_SHOULDER_BD = 17,
2308 XRT_BODY_JOINT_LEFT_ELBOW_BD = 18,
2309 XRT_BODY_JOINT_RIGHT_ELBOW_BD = 19,
2310 XRT_BODY_JOINT_LEFT_WRIST_BD = 20,
2311 XRT_BODY_JOINT_RIGHT_WRIST_BD = 21,
2312 XRT_BODY_JOINT_LEFT_HAND_BD = 22,
2313 XRT_BODY_JOINT_RIGHT_HAND_BD = 23,
2314};
2315
2316enum xrt_body_joint_set_type_bd
2317{
2318 XRT_BODY_JOINT_SET_UNKNOWN_BD = 0,
2319 XRT_BODY_JOINT_SET_BODY_WITHOUT_ARM_BD = 1,
2320 XRT_BODY_JOINT_SET_FULL_BODY_BD = 2,
2321};
2322
2324{
2325 struct xrt_space_relation relation;
2326};
2327
2329{
2330 int64_t sample_time_ns;
2331 struct xrt_body_joint_location_bd joint_locations[XRT_BODY_JOINT_COUNT_BD];
2332 XRT_ALIGNAS(8) bool is_active;
2333 bool all_joint_poses_tracked;
2334};
2335
2337{
2338 union {
2339 struct xrt_base_body_joint_set_meta base_body_joint_set_meta;
2340 struct xrt_body_joint_set_fb body_joint_set_fb;
2341 struct xrt_full_body_joint_set_meta full_body_joint_set_meta;
2342 struct xrt_body_joint_set_bd body_joint_set_bd;
2343 };
2344 // in driver global space, without tracking_origin offset
2345 struct xrt_space_relation body_pose;
2346};
2347
2348/*!
2349 * Value used to indicate a haptic pulse of the minimal supported duration.
2350 *
2351 * @ingroup xrt_iface
2352 */
2353#define XRT_MIN_HAPTIC_DURATION -1
2354
2355/*!
2356 * Value used to indicate a haptic pulse of some runtime defined optimal
2357 * frequency.
2358 *
2359 * @ingroup xrt_iface
2360 */
2361
2362#define XRT_FREQUENCY_UNSPECIFIED 0
2363
2364/*!
2365 * Value used as a timeout to indicate the timeout should never occur.
2366 *
2367 * @ingroup xrt_iface
2368 */
2369#define XRT_INFINITE_DURATION (0x7fffffffffffffffLL)
2370
2371enum xrt_force_feedback_location
2372{
2373 XRT_FORCE_FEEDBACK_LOCATION_LEFT_THUMB,
2374 XRT_FORCE_FEEDBACK_LOCATION_LEFT_INDEX,
2375 XRT_FORCE_FEEDBACK_LOCATION_LEFT_MIDDLE,
2376 XRT_FORCE_FEEDBACK_LOCATION_LEFT_RING,
2377 XRT_FORCE_FEEDBACK_LOCATION_LEFT_PINKY,
2378};
2379
2381{
2382 float value;
2383 enum xrt_force_feedback_location location;
2384};
2385
2386enum xrt_output_value_type
2387{
2388 XRT_OUTPUT_VALUE_TYPE_VIBRATION,
2389 XRT_OUTPUT_VALUE_TYPE_PCM_VIBRATION,
2390 XRT_OUTPUT_VALUE_TYPE_FORCE_FEEDBACK,
2391};
2392
2394{
2395 XRT_ALIGNAS(8) float frequency;
2396 float amplitude;
2397 int64_t duration_ns;
2398};
2399
2401{
2402 uint32_t buffer_size;
2403 XRT_ALIGNAS(8) const float *buffer;
2404 XRT_ALIGNAS(8) float sample_rate;
2405 bool append;
2406 uint32_t *samples_consumed;
2407};
2408
2410{
2411 struct xrt_output_force_feedback force_feedback[5];
2412 uint64_t force_feedback_location_count;
2413};
2414
2415/*!
2416 * A union of all output types.
2417 *
2418 * @see xrt_output_type
2419 * @ingroup xrt_iface math
2420 */
2422{
2423 enum xrt_output_value_type type;
2424
2425 union {
2426 struct xrt_output_value_vibration vibration;
2427 struct xrt_output_value_pcm_vibration pcm_vibration;
2428 struct xrt_output_value_force_feedback force_feedback;
2429 };
2430};
2431
2432/*
2433 *
2434 * Misc enums.
2435 *
2436 */
2437
2438/*!
2439 * What form factor is this device, mostly maps onto OpenXR's @p XrFormFactor.
2440 *
2441 * @ingroup xrt_iface
2442 */
2444{
2445 XRT_FORM_FACTOR_HMD, //!< Head mounted display.
2446 XRT_FORM_FACTOR_HANDHELD, //!< Handheld display.
2447};
2448
2449/*!
2450 * View type to be rendered to by the compositor.
2451 */
2453{
2454 XRT_VIEW_TYPE_INVALID = 0,
2455 XRT_VIEW_TYPE_MONO = 1,
2456 XRT_VIEW_TYPE_STEREO = 2,
2457 XRT_VIEW_TYPE_QUAD = 3,
2458 XRT_VIEW_TYPE_MAX,
2459};
2460
2461/*!
2462 * Domain type.
2463 * Use for performance level setting
2464 * Which hardware should be boost/decrease
2465 */
2467{
2468 XRT_PERF_DOMAIN_CPU = 1,
2469 XRT_PERF_DOMAIN_GPU = 2,
2470};
2471
2472enum xrt_perf_sub_domain
2473{
2474 XRT_PERF_SUB_DOMAIN_COMPOSITING = 1,
2475 XRT_PERF_SUB_DOMAIN_RENDERING = 2,
2476 XRT_PERF_SUB_DOMAIN_THERMAL = 3
2477};
2478
2479/*!
2480 * Performance level.
2481 */
2483{
2484 XRT_PERF_SET_LEVEL_POWER_SAVINGS = 0,
2485 XRT_PERF_SET_LEVEL_SUSTAINED_LOW = 25,
2486 XRT_PERF_SET_LEVEL_SUSTAINED_HIGH = 50,
2487 XRT_PERF_SET_LEVEL_BOOST = 75,
2488};
2489
2490/*!
2491 * Performance level.
2492 */
2494{
2495 XRT_PERF_NOTIFY_LEVEL_NORMAL = 0,
2496 XRT_PERF_NOTIFY_LEVEL_WARNING = 25,
2497 XRT_PERF_NOTIFY_LEVEL_IMPAIRED = 75,
2498};
2499
2500/*!
2501 * Visibility mask, mirror of XrVisibilityMaskKHR
2502 *
2503 * @ingroup xrt_iface
2504 */
2506{
2507 XRT_VISIBILITY_MASK_TYPE_HIDDEN_TRIANGLE_MESH = 1,
2508 XRT_VISIBILITY_MASK_TYPE_VISIBLE_TRIANGLE_MESH = 2,
2509 XRT_VISIBILITY_MASK_TYPE_LINE_LOOP = 3,
2510};
2511
2512
2513/*
2514 *
2515 * Inline functions
2516 *
2517 */
2518
2519// @note We're not using U_LOG_RAW because we can't include u_logging.h inside xrt_defines.h without causing problems.
2520#if 0
2521#define XRT_REFERENCE_DEBUG_PRINT(ACTION, PTR, COUNT) \
2522 do { \
2523 int32_t __count = (COUNT); \
2524 printf(#ACTION " %p to %u", (void *)(PTR), __count); \
2525 if (__count < 0) { \
2526 XRT_DEBUGBREAK(); \
2527 } \
2528 } while (false)
2529#else
2530#define XRT_REFERENCE_DEBUG_PRINT(ACTION, PTR, COUNT)
2531#endif
2532
2533/*!
2534 * Increment the reference, probably want @ref xrt_reference_inc_and_was_zero.
2535 *
2536 * @memberof xrt_reference
2537 * @ingroup xrt_iface
2538 */
2539static inline void
2541{
2542 XRT_MAYBE_UNUSED int32_t count = xrt_atomic_s32_inc_return(&xref->count);
2543
2544 XRT_REFERENCE_DEBUG_PRINT(Incremented, xref, count);
2545}
2546
2547/*!
2548 * Decrement the reference, probably want @ref xrt_reference_dec_and_is_zero.
2549 *
2550 * @memberof xrt_reference
2551 * @ingroup xrt_iface
2552 */
2553static inline void
2555{
2556 XRT_MAYBE_UNUSED int32_t count = xrt_atomic_s32_dec_return(&xref->count);
2557
2558 XRT_REFERENCE_DEBUG_PRINT(Decremented, xref, count);
2559}
2560
2561/*!
2562 * Increment the reference and return true if the value @p was zero.
2563 *
2564 * @memberof xrt_reference
2565 * @ingroup xrt_iface
2566 */
2567XRT_CHECK_RESULT static inline bool
2569{
2570 int32_t count = xrt_atomic_s32_inc_return(&xref->count);
2571
2572 XRT_REFERENCE_DEBUG_PRINT(Incremented, xref, count);
2573
2574 return count == 1;
2575}
2576
2577/*!
2578 * Decrement the reference and return true if the value is now zero.
2579 *
2580 * @memberof xrt_reference
2581 * @ingroup xrt_iface
2582 */
2583XRT_CHECK_RESULT static inline bool
2585{
2586 int32_t count = xrt_atomic_s32_dec_return(&xref->count);
2587
2588 XRT_REFERENCE_DEBUG_PRINT(Decremented, xref, count);
2589
2590 return count == 0;
2591}
2592
2593static inline uint32_t
2594xrt_view_type_view_count(enum xrt_view_type view_type)
2595{
2596 switch (view_type) {
2597 case XRT_VIEW_TYPE_INVALID:
2598 case XRT_VIEW_TYPE_MAX: break;
2599 case XRT_VIEW_TYPE_MONO: return 1;
2600 case XRT_VIEW_TYPE_STEREO: return 2;
2601 case XRT_VIEW_TYPE_QUAD: return 4;
2602 }
2603
2604 return 0;
2605}
2606
2607#ifdef __cplusplus
2608}
2609#endif
xrt_input_type
Base type of this inputs.
Definition xrt_defines.h:878
xrt_hand
Enumeration for left and right hand.
Definition xrt_defines.h:1511
#define XRT_MATRIX_3X3_ELEMENTS
The number of values in xrt_matrix_3x3.
Definition xrt_defines.h:581
xrt_stereo_format
What type of stereo format a frame has.
Definition xrt_defines.h:233
xrt_visibility_mask_type
Visibility mask, mirror of XrVisibilityMaskKHR.
Definition xrt_defines.h:2506
xrt_blend_mode
Blend mode that the device supports, exact mirror of XrEnvironmentBlendMode.
Definition xrt_defines.h:112
static XRT_CHECK_RESULT bool xrt_reference_dec_and_is_zero(struct xrt_reference *xref)
Decrement the reference and return true if the value is now zero.
Definition xrt_defines.h:2584
#define XRT_INPUT_NAME(id, type)
Create an enum value for xrt_input_name that packs an ID and input type.
Definition xrt_defines.h:929
#define XRT_OUTPUT_NAME(id, type)
Create an enum value for xrt_output_name that packs an ID and output type.
Definition xrt_defines.h:1601
xrt_form_factor
What form factor is this device, mostly maps onto OpenXR's XrFormFactor.
Definition xrt_defines.h:2444
xrt_input_name
Every internal input source known to monado with a baked in type.
Definition xrt_defines.h:961
xrt_output_type
Base type of this output.
Definition xrt_defines.h:1631
static XRT_CHECK_RESULT bool xrt_reference_inc_and_was_zero(struct xrt_reference *xref)
Increment the reference and return true if the value was zero.
Definition xrt_defines.h:2568
#define XRT_UUID_SIZE
Internal define for VK_UUID_SIZE and XR_UUID_SIZE_EXT.
Definition xrt_defines.h:31
#define XRT_MATRIX_2X2_ELEMENTS
The number of values in xrt_matrix_2x2.
Definition xrt_defines.h:554
static void xrt_reference_inc(struct xrt_reference *xref)
Increment the reference, probably want xrt_reference_inc_and_was_zero.
Definition xrt_defines.h:2540
#define XRT_MATRIX_2X2_VECS
The number of 2d vectors in xrt_matrix_2x2.
Definition xrt_defines.h:561
#define XRT_LUID_SIZE
Internal define for VK_LUID_SIZE.
Definition xrt_defines.h:55
static void xrt_reference_dec(struct xrt_reference *xref)
Decrement the reference, probably want xrt_reference_dec_and_is_zero.
Definition xrt_defines.h:2554
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:655
#define XRT_HAND_JOINT_COUNT
Number of joints in a hand.
Definition xrt_defines.h:1467
xrt_output_name
Name of a output with a baked in type.
Definition xrt_defines.h:1645
xrt_finger
Names for fingers on a hand.
Definition xrt_defines.h:1540
xrt_hand_joint
Number of joints in a hand.
Definition xrt_defines.h:1475
#define XRT_MATRIX_4X4_ELEMENTS
The number of values in a 4x4 matrix like xrt_matrix_4x4 and xrt_matrix_4x4_f64.
Definition xrt_defines.h:608
xrt_space_relation_flags
Flags of which components of a xrt_space_relation is valid.
Definition xrt_defines.h:685
xrt_device_type
How an xrt_device can be used.
Definition xrt_defines.h:858
@ XRT_INPUT_TYPE_POSE
A tracked pose.
Definition xrt_defines.h:891
@ XRT_INPUT_TYPE_VEC2_MINUS_ONE_TO_ONE
Vec2 input, components in [-1, 1].
Definition xrt_defines.h:885
@ XRT_INPUT_TYPE_VEC3_MINUS_ONE_TO_ONE
Vec3 input, components in [-1, 1].
Definition xrt_defines.h:887
@ XRT_INPUT_TYPE_FACE_TRACKING
A tracked face.
Definition xrt_defines.h:895
@ XRT_INPUT_TYPE_BODY_TRACKING
A tracked body.
Definition xrt_defines.h:897
@ XRT_INPUT_TYPE_HAND_TRACKING
A tracked hand.
Definition xrt_defines.h:893
@ XRT_INPUT_TYPE_VEC1_MINUS_ONE_TO_ONE
Float input in [-1, 1].
Definition xrt_defines.h:883
@ XRT_INPUT_TYPE_BOOLEAN
Boolean (digital, binary) input.
Definition xrt_defines.h:889
@ XRT_INPUT_TYPE_VEC1_ZERO_TO_ONE
Float input in [0, 1].
Definition xrt_defines.h:881
@ XRT_STEREO_FORMAT_OAU
Over & Under.
Definition xrt_defines.h:237
@ XRT_STEREO_FORMAT_SBS
Side by side.
Definition xrt_defines.h:235
@ XRT_STEREO_FORMAT_INTERLEAVED
Interleaved pixels.
Definition xrt_defines.h:236
@ XRT_FORM_FACTOR_HANDHELD
Handheld display.
Definition xrt_defines.h:2446
@ XRT_FORM_FACTOR_HMD
Head mounted display.
Definition xrt_defines.h:2445
@ XRT_INPUT_GENERIC_PALM_POSE
XR_EXT_palm_pose.
Definition xrt_defines.h:974
@ XRT_INPUT_NAME_INVALID
Not a real input. Sentinel for "no input", distinct from any XRT_INPUT_NAME value.
Definition xrt_defines.h:964
@ XRT_INPUT_GENERIC_EYE_GAZE_POSE
XR_EXT_eye_gaze_interaction.
Definition xrt_defines.h:977
@ XRT_INPUT_GENERIC_HEAD_POSE
Standard pose used for rendering.
Definition xrt_defines.h:966
@ XRT_OUTPUT_NAME_INVALID
Not a real output. Sentinel for "no output", distinct from any XRT_OUTPUT_NAME value.
Definition xrt_defines.h:1648
Definition t_rift_blobwatch.c:109
A range of API versions supported.
Definition xrt_defines.h:636
Definition xrt_defines.h:2247
Definition xrt_defines.h:2324
Definition xrt_defines.h:2242
Definition xrt_defines.h:2329
Definition xrt_defines.h:2265
Definition xrt_defines.h:2337
Definition xrt_defines.h:2219
struct xrt_body_skeleton_joint_fb joints[XRT_BODY_JOINT_COUNT_FB]
ordered by xrt_body_joint_fb
Definition xrt_defines.h:2221
Definition xrt_defines.h:2211
Definition xrt_defines.h:2234
A 3 element HSV colour with floating point channels.
Definition xrt_defines.h:441
A 3 element colour with floating point channels.
Definition xrt_defines.h:428
A 3 element colour with 8 bits per channel.
Definition xrt_defines.h:403
A 4 element colour with floating point channels.
Definition xrt_defines.h:453
A 4 element colour with 8 bits per channel.
Definition xrt_defines.h:415
Definition xrt_defines.h:1959
Definition xrt_defines.h:1979
Definition xrt_defines.h:1991
Definition xrt_defines.h:2003
Definition xrt_defines.h:1965
float expression_weights[14]
ordered by xrt_eye_expression_htc
Definition xrt_defines.h:1968
Definition xrt_defines.h:1972
float expression_weights[37]
ordered by xrt_lip_expression_htc
Definition xrt_defines.h:1975
Describes a projection matrix fov.
Definition xrt_defines.h:542
Definition xrt_defines.h:2273
Definition xrt_defines.h:2226
struct xrt_body_skeleton_joint_fb joints[XRT_FULL_BODY_JOINT_COUNT_META]
ordered by xrt_full_body_joint_meta
Definition xrt_defines.h:2228
Joint set type used for hand tracking.
Definition xrt_defines.h:1554
Location of a single hand joint.
Definition xrt_defines.h:1522
A limited unique id, it is only unique for the process it is in, so must not be used or synchronized ...
Definition xrt_defines.h:82
To transport LUIDs between different APIs.
Definition xrt_defines.h:63
A tightly packed 2x2 matrix of floats.
Definition xrt_defines.h:569
A tightly packed 3x3 matrix of doubles.
Definition xrt_defines.h:599
A tightly packed 3x3 matrix of floats.
Definition xrt_defines.h:589
A tightly packed 4x4 matrix of double.
Definition xrt_defines.h:626
A tightly packed 4x4 matrix of floats.
Definition xrt_defines.h:616
Normalized image rectangle, coordinates and size in 0 .
Definition xrt_defines.h:510
Image offset.
Definition xrt_defines.h:477
Definition xrt_defines.h:2381
Definition xrt_defines.h:2410
Definition xrt_defines.h:2401
Definition xrt_defines.h:2394
A union of all output types.
Definition xrt_defines.h:2422
A pose composed of a position and orientation.
Definition xrt_defines.h:522
A quaternion with single floats.
Definition xrt_defines.h:246
Image rectangle.
Definition xrt_defines.h:500
Image rectangle.
Definition xrt_defines.h:487
A base class for reference counted objects.
Definition xrt_defines.h:99
A chain of space relations and their associated validity flags.
Definition xrt_defines.h:750
#define XRT_RELATION_CHAIN_CAPACITY
The maximum number of steps that can be in a relation chain.
Definition xrt_defines.h:740
Image size.
Definition xrt_defines.h:466
A relation with two spaces, includes velocity and acceleration.
Definition xrt_defines.h:713
To transport UUIDs between different APIs.
Definition xrt_defines.h:39
Represents a uv triplet for distortion, basically just three xrt_vec2.
Definition xrt_defines.h:300
A 1 element vector with single floats.
Definition xrt_defines.h:269
A 2 element vector with 32 bit integers.
Definition xrt_defines.h:392
A 2 element vector with single floats.
Definition xrt_defines.h:279
A 3 element vector with single doubles.
Definition xrt_defines.h:322
A 3 element vector with 32 bit integers.
Definition xrt_defines.h:380
A 3 element vector with single floats.
Definition xrt_defines.h:310
A union of all input types.
Definition xrt_defines.h:1570
Header holding common defines.
xrt_perf_notify_level
Performance level.
Definition xrt_defines.h:2494
xrt_distortion_model
Which distortion model does the device expose, used both as a bitfield and value.
Definition xrt_defines.h:167
xrt_passthrough_purpose_flags
Specify the kind of passthrough behavior the layer provides.
Definition xrt_defines.h:151
@ XRT_PASSTHROUGH_LAYER_PURPOSE_TRACKED_KEYBOARD_MASKED_HANDS
Provided by XR_FB_passthrough_keyboard_hands.
Definition xrt_defines.h:159
@ XRT_PASSTHROUGH_LAYER_PURPOSE_RECONSTRUCTION
Fullscreen layer.
Definition xrt_defines.h:153
@ XRT_PASSTHROUGH_LAYER_PURPOSE_TRACKED_KEYBOARD_HANDS
Provided by XR_FB_passthrough_keyboard_hands.
Definition xrt_defines.h:157
@ XRT_PASSTHROUGH_LAYER_PURPOSE_PROJECTED
Projected layer.
Definition xrt_defines.h:155
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:767
@ XRT_DEVICE_HTC_FACE_TRACKING
XR_HTC_facial_tracking.
Definition xrt_defines.h:823
@ XRT_DEVICE_FB_BODY_TRACKING
XR_FB_body_tracking.
Definition xrt_defines.h:826
@ XRT_DEVICE_FB_FACE_TRACKING2
XR_FB_face_tracking2.
Definition xrt_defines.h:829
@ XRT_DEVICE_EXT_HAND_INTERACTION
XR_EXT_hand_interaction.
Definition xrt_defines.h:817
@ XRT_DEVICE_ANDROID_FACE_TRACKING
XR_ANDROID_face_tracking.
Definition xrt_defines.h:820
xrt_panel_refresh_type
The type of panel refresh the device has.
Definition xrt_defines.h:179
@ XRT_PANEL_REFRESH_TYPE_ROLLING
panel refreshes progressively along scanout direction, e.g. OLED panels
Definition xrt_defines.h:183
@ XRT_PANEL_REFRESH_TYPE_GLOBAL
entire panel refreshes simultaneously
Definition xrt_defines.h:181
xrt_scanout_direction
Screen scanout direction.
Definition xrt_defines.h:190
xrt_perf_domain
Domain type.
Definition xrt_defines.h:2467
xrt_passthrough_state
Specify additional state change behavior.
Definition xrt_defines.h:136
@ XRT_PASSTHROUGH_STATE_CHANGED_NON_RECOVERABLE_ERROR_BIT
Non-recoverable error has occurred.
Definition xrt_defines.h:140
@ XRT_PASSTHROUGH_STATE_CHANGED_RESTORED_ERROR_BIT
The runtime has recovered from a previous error and is functioning normally.
Definition xrt_defines.h:144
@ XRT_PASSTHROUGH_STATE_CHANGED_REINIT_REQUIRED_BIT
Passthrough system requires reinitialization.
Definition xrt_defines.h:138
@ XRT_PASSTHROUGH_STATE_CHANGED_RECOVERABLE_ERROR_BIT
A recoverable error has occurred.
Definition xrt_defines.h:142
xrt_view_type
View type to be rendered to by the compositor.
Definition xrt_defines.h:2453
xrt_format
Common formats, use u_format_* functions to reason about them.
Definition xrt_defines.h:204
xrt_passthrough_create_flags
Special flags for creating passthrough.
Definition xrt_defines.h:125
@ XRT_PASSTHROUGH_LAYER_DEPTH
Our compositor just ignores this bit.
Definition xrt_defines.h:129
@ XRT_PASSTHROUGH_IS_RUNNING_AT_CREATION
Start the passthrough on creation.
Definition xrt_defines.h:127
xrt_perf_set_level
Performance level.
Definition xrt_defines.h:2483
Internal result type for XRT.