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