Monado OpenXR Runtime
xrt_defines.h
Go to the documentation of this file.
1// Copyright 2019-2024, Collabora, Ltd.
2// SPDX-License-Identifier: BSL-1.0
3/*!
4 * @file
5 * @brief Common defines and enums for XRT.
6 * @author Jakob Bornecrantz <jakob@collabora.com>
7 * @author Moses Turner <mosesturner@protonmail.com>
8 * @author Nis Madsen <nima_zero_one@protonmail.com>
9 * @author Korcan Hussein <korcan.hussein@collabora.com>
10 * @ingroup xrt_iface
11 */
12
13#pragma once
14
15#include "xrt/xrt_compiler.h"
16
17#include "xrt/xrt_results.h"
18
19#ifdef __cplusplus
20extern "C" {
21#endif
22
23/*!
24 * Internal define for VK_UUID_SIZE and XR_UUID_SIZE_EXT.
25 *
26 * @ingroup xrt_iface
27 */
28#define XRT_UUID_SIZE 16
29
30/*!
31 * To transport UUIDs between different APIs.
32 *
33 * @ingroup xrt_iface
34 */
36{
37 uint8_t data[XRT_UUID_SIZE];
38};
39
40/*!
41 * Typedef for @ref xrt_uuid.
42 *
43 * @ingroup xrt_iface
44 */
45typedef struct xrt_uuid xrt_uuid_t;
46
47/*!
48 * Internal define for VK_LUID_SIZE.
49 *
50 * @ingroup xrt_iface
51 */
52#define XRT_LUID_SIZE 8
53
54/*!
55 * To transport LUIDs between different APIs.
56 *
57 * @ingroup xrt_iface
58 */
60{
61 uint8_t data[XRT_LUID_SIZE];
62};
63
64/*!
65 * Typedef for @ref xrt_luid.
66 *
67 * @ingroup xrt_iface
68 */
69typedef struct xrt_luid xrt_luid_t;
70
71/*!
72 * A limited unique id, it is only unique for the process it is in, so must not be
73 * used or synchronized across process boundaries. A value of zero is invalid
74 * and means it has not be properly initialised.
75 *
76 * @ingroup xrt_iface
77 */
79{
80 uint64_t data;
81};
82
83/*!
84 * Typedef for @ref xrt_limited_unique_id.
85 *
86 * @ingroup xrt_iface
87 */
89
90/*!
91 * A base class for reference counted objects.
92 *
93 * @ingroup xrt_iface
94 */
96{
97 xrt_atomic_s32_t count;
98};
99
100/*!
101 * Blend mode that the device supports, exact mirror of XrEnvironmentBlendMode.
102 *
103 * This is not a bitmask because we want to be able to express a preference order
104 * that may vary by device, etc.
105 *
106 * @ingroup xrt_iface
107 */
109{
110 XRT_BLEND_MODE_OPAQUE = 1,
111 XRT_BLEND_MODE_ADDITIVE = 2,
112 XRT_BLEND_MODE_ALPHA_BLEND = 3,
113 XRT_BLEND_MODE_MAX_ENUM,
114};
115
116#define XRT_MAX_DEVICE_BLEND_MODES 3
117
118/*!
119 * Special flags for creating passthrough.
120 */
122{
123 //! Start the passthrough on creation
125 //! Our compositor just ignores this bit.
127};
128
129/*!
130 * Specify additional state change behavior.
131 */
133{
134 //! Passthrough system requires reinitialization.
136 //! Non-recoverable error has occurred.
138 //! A recoverable error has occurred.
140 //! The runtime has recovered from a previous error and is functioning normally.
142};
143
144/*!
145 * Specify the kind of passthrough behavior the layer provides.
146 */
148{
149 //! Fullscreen layer
151 //! Projected layer.
153 //! Provided by XR_FB_passthrough_keyboard_hands
155 //! Provided by XR_FB_passthrough_keyboard_hands
157};
158
159/*!
160 * Which distortion model does the device expose,
161 * used both as a bitfield and value.
162 */
164{
165 // clang-format off
166 XRT_DISTORTION_MODEL_NONE = 1u << 0u,
167 XRT_DISTORTION_MODEL_COMPUTE = 1u << 1u,
168 XRT_DISTORTION_MODEL_MESHUV = 1u << 2u,
169 // clang-format on
170};
171
172/*!
173 * Common formats, use `u_format_*` functions to reason about them.
174 */
176{
177 XRT_FORMAT_R8G8B8X8,
178 XRT_FORMAT_R8G8B8A8,
179 XRT_FORMAT_R8G8B8,
180 XRT_FORMAT_R8G8,
181 XRT_FORMAT_R8,
182
183 XRT_FORMAT_BAYER_GR8,
184
185 XRT_FORMAT_L8, // Luminence, R = L, G = L, B = L.
186
187 XRT_FORMAT_BITMAP_8X1, // One bit format tiled in 8x1 blocks.
188 XRT_FORMAT_BITMAP_8X8, // One bit format tiled in 8X8 blocks.
189
190 XRT_FORMAT_YUV888,
191 XRT_FORMAT_YUYV422,
192 XRT_FORMAT_UYVY422,
193
194 XRT_FORMAT_MJPEG,
195};
196
197/*!
198 * What type of stereo format a frame has.
199 *
200 * @ingroup xrt_iface
201 */
203{
204 XRT_STEREO_FORMAT_NONE,
205 XRT_STEREO_FORMAT_SBS, //!< Side by side.
206 XRT_STEREO_FORMAT_INTERLEAVED, //!< Interleaved pixels.
207 XRT_STEREO_FORMAT_OAU, //!< Over & Under.
208};
209
210/*!
211 * A quaternion with single floats.
212 *
213 * @ingroup xrt_iface math
214 */
216{
217 float x;
218 float y;
219 float z;
220 float w;
221};
222
223/*!
224 * Identity value for @ref xrt_quat
225 *
226 * @ingroup xrt_iface math
227 * @relates xrt_quat
228 */
229#define XRT_QUAT_IDENTITY \
230 { \
231 0.f, 0.f, 0.f, 1.f \
232 }
233
234/*!
235 * A 1 element vector with single floats.
236 *
237 * @ingroup xrt_iface math
238 */
240{
241 float x;
242};
243
244/*!
245 * A 2 element vector with single floats.
246 *
247 * @ingroup xrt_iface math
248 */
250{
251 float x;
252 float y;
253};
254
255/*!
256 * Represents a uv triplet for distortion, basically just three xrt_vec2.
257 *
258 * @ingroup xrt_iface_math
259 */
261{
262 struct xrt_vec2 r, g, b;
263};
264
265/*!
266 * A 3 element vector with single floats.
267 *
268 * @ingroup xrt_iface math
269 */
271{
272 float x;
273 float y;
274 float z;
275};
276
277/*!
278 * A 3 element vector with single doubles.
279 *
280 * @ingroup xrt_iface math
281 */
283{
284 double x;
285 double y;
286 double z;
287};
288
289/*!
290 * All-zero value for @ref xrt_vec3
291 *
292 * @ingroup xrt_iface math
293 * @relates xrt_vec3
294 */
295#define XRT_VEC3_ZERO \
296 { \
297 0.f, 0.f, 0.f \
298 }
299/*!
300 * Value for @ref xrt_vec3 with 1 in the @p x coordinate.
301 *
302 * @ingroup xrt_iface math
303 * @relates xrt_vec3
304 */
305#define XRT_VEC3_UNIT_X \
306 { \
307 1.f, 0.f, 0.f \
308 }
309/*!
310 * Value for @ref xrt_vec3 with 1 in the @p y coordinate.
311 *
312 * @ingroup xrt_iface math
313 * @relates xrt_vec3
314 */
315#define XRT_VEC3_UNIT_Y \
316 { \
317 0.f, 1.f, 0.f \
318 }
319/*!
320 * Value for @ref xrt_vec3 with 1 in the @p z coordinate.
321 *
322 * @ingroup xrt_iface math
323 * @relates xrt_vec3
324 */
325#define XRT_VEC3_UNIT_Z \
326 { \
327 0.f, 0.f, 1.f \
328 }
329
330/*!
331 * A 3 element vector with 32 bit integers.
332 *
333 * @ingroup xrt_iface math
334 */
336{
337 int32_t x;
338 int32_t y;
339 int32_t z;
340};
341
342/*!
343 * A 2 element vector with 32 bit integers.
344 *
345 * @ingroup xrt_iface math
346 */
348{
349 int32_t x;
350 int32_t y;
351};
352
353/*!
354 * A 3 element colour with 8 bits per channel.
355 *
356 * @ingroup xrt_iface math
357 */
359{
360 uint8_t r;
361 uint8_t g;
362 uint8_t b;
363};
364
365/*!
366 * A 4 element colour with 8 bits per channel.
367 *
368 * @ingroup xrt_iface math
369 */
371{
372 uint8_t r;
373 uint8_t g;
374 uint8_t b;
375 uint8_t a;
376};
377
378/*!
379 * A 3 element colour with floating point channels.
380 *
381 * @ingroup xrt_iface math
382 */
384{
385 float r;
386 float g;
387 float b;
388};
389
390/*!
391 * A 4 element colour with floating point channels.
392 *
393 * @ingroup xrt_iface math
394 */
396{
397 float r;
398 float g;
399 float b;
400 float a;
401};
402
403/*!
404 * Image size.
405 *
406 * @ingroup xrt_iface math
407 */
409{
410 int w;
411 int h;
412};
413
414/*!
415 * Image offset.
416 *
417 * @ingroup xrt_iface math
418 */
420{
421 int w, h;
422};
423
424/*!
425 * Image rectangle.
426 *
427 * @ingroup xrt_iface math
428 */
430{
431 struct xrt_offset offset;
432 struct xrt_size extent;
433};
434
435/*!
436 * Image rectangle
437 *
438 * @todo Unify xrt_rect and xrt_rect_f32 field names
439 *
440 * @ingroup xrt_iface math
441 */
443{
444 float x, y, w, h;
445};
446
447/*!
448 * Normalized image rectangle, coordinates and size in 0 .. 1 range.
449 *
450 * @ingroup xrt_iface math
451 */
453{
454 float x, y, w, h;
455};
456
457/*!
458 * A pose composed of a position and orientation.
459 *
460 * @see xrt_qaut
461 * @see xrt_vec3
462 * @ingroup xrt_iface math
463 */
465{
466 struct xrt_quat orientation;
467 struct xrt_vec3 position;
468};
469/*!
470 * Identity value for @ref xrt_pose
471 *
472 * @ingroup xrt_iface math
473 * @relates xrt_pose
474 */
475#define XRT_POSE_IDENTITY \
476 { \
477 XRT_QUAT_IDENTITY, XRT_VEC3_ZERO \
478 }
479
480/*!
481 * Describes a projection matrix fov.
482 *
483 * @ingroup xrt_iface math
484 */
486{
487 float angle_left;
488 float angle_right;
489 float angle_up;
490 float angle_down;
491};
492
493/*!
494 * The number of values in @ref xrt_matrix_2x2
495 *
496 * @ingroup xrt_iface math
497 */
498#define XRT_MATRIX_2X2_ELEMENTS 4
499
500/*!
501 * The number of 2d vectors in @ref xrt_matrix_2x2
502 *
503 * @ingroup xrt_iface math
504 */
505#define XRT_MATRIX_2X2_VECS 2
506
507/*!
508 * A tightly packed 2x2 matrix of floats.
509 *
510 * @ingroup xrt_iface math
511 */
513{
514 union {
516 struct xrt_vec2 vecs[XRT_MATRIX_2X2_VECS];
517 };
518};
519
520/*!
521 * The number of values in @ref xrt_matrix_3x3
522 *
523 * @ingroup xrt_iface math
524 */
525#define XRT_MATRIX_3X3_ELEMENTS 9
526
527/*!
528 * A tightly packed 3x3 matrix of floats.
529 *
530 * @ingroup xrt_iface math
531 */
533{
535};
536
537/*!
538 * A tightly packed 3x3 matrix of doubles.
539 *
540 * @ingroup xrt_iface math
541 */
543{
544 double v[XRT_MATRIX_3X3_ELEMENTS];
545};
546
547/*!
548 * The number of values in a 4x4 matrix like @ref xrt_matrix_4x4 and @ref xrt_matrix_4x4_f64
549 *
550 * @ingroup xrt_iface math
551 */
552#define XRT_MATRIX_4X4_ELEMENTS 16
553
554/*!
555 * A tightly packed 4x4 matrix of floats.
556 *
557 * @ingroup xrt_iface math
558 */
560{
562};
563
564/*!
565 * A tightly packed 4x4 matrix of double.
566 *
567 * @ingroup xrt_iface math
568 */
570{
571 double v[XRT_MATRIX_4X4_ELEMENTS];
572};
573
574/*!
575 * A range of API versions supported.
576 *
577 * @ingroup xrt_iface math
578 */
580{
581 uint32_t min_major;
582 uint32_t min_minor;
583 uint32_t min_patch;
584
585 uint32_t max_major;
586 uint32_t max_minor;
587 uint32_t max_patch;
588};
589
590/*!
591 * Type of a OpenXR mapped reference space, maps to the semantic spaces on the
592 * @ref xrt_space_overseer struct. This is used to refer to indirectly for
593 * instance when letting the overseer know that an application is using a
594 * particular reference space.
595 *
596 * @ingroup xrt_iface
597 */
599{
600 XRT_SPACE_REFERENCE_TYPE_VIEW,
601 XRT_SPACE_REFERENCE_TYPE_LOCAL,
602 XRT_SPACE_REFERENCE_TYPE_LOCAL_FLOOR,
603 XRT_SPACE_REFERENCE_TYPE_STAGE,
604 XRT_SPACE_REFERENCE_TYPE_UNBOUNDED,
605};
606
607/*!
608 * The number of enumerations in @ref xrt_reference_space_type.
609 *
610 * @ingroup xrt_iface
611 */
612#define XRT_SPACE_REFERENCE_TYPE_COUNT (XRT_SPACE_REFERENCE_TYPE_UNBOUNDED + 1)
613
614/*!
615 * An invalid @ref xrt_reference_space_type, since it's invalid it's not listed
616 * in the enum.
617 *
618 * @ingroup xrt_iface
619 */
620#define XRT_SPACE_REFERENCE_TYPE_INVALID ((enum xrt_reference_space_type)(-1))
621
622/*!
623 * Flags of which components of a @ref xrt_space_relation is valid.
624 *
625 * @see xrt_space_relation
626 * @ingroup xrt_iface math
627 */
629{
630 // clang-format off
631 XRT_SPACE_RELATION_ORIENTATION_VALID_BIT = (1u << 0u),
632 XRT_SPACE_RELATION_POSITION_VALID_BIT = (1u << 1u),
633 XRT_SPACE_RELATION_LINEAR_VELOCITY_VALID_BIT = (1u << 2u),
634 XRT_SPACE_RELATION_ANGULAR_VELOCITY_VALID_BIT = (1u << 3u),
635 XRT_SPACE_RELATION_ORIENTATION_TRACKED_BIT = (1u << 4u),
636 XRT_SPACE_RELATION_POSITION_TRACKED_BIT = (1u << 5u),
637 // clang-format on
638 XRT_SPACE_RELATION_BITMASK_ALL = (uint32_t)XRT_SPACE_RELATION_ORIENTATION_VALID_BIT | //
639 (uint32_t)XRT_SPACE_RELATION_POSITION_VALID_BIT | //
640 (uint32_t)XRT_SPACE_RELATION_LINEAR_VELOCITY_VALID_BIT | //
641 (uint32_t)XRT_SPACE_RELATION_ANGULAR_VELOCITY_VALID_BIT | //
642 (uint32_t)XRT_SPACE_RELATION_ORIENTATION_TRACKED_BIT | //
643 (uint32_t)XRT_SPACE_RELATION_POSITION_TRACKED_BIT,
644 XRT_SPACE_RELATION_BITMASK_NONE = 0,
645};
646
647/*!
648 * A relation with two spaces, includes velocity and acceleration.
649 *
650 * @see xrt_quat
651 * @see xrt_vec3
652 * @see xrt_pose
653 * @see xrt_space_relation_flags
654 * @ingroup xrt_iface math
655 */
657{
658 enum xrt_space_relation_flags relation_flags;
659 struct xrt_pose pose;
660 struct xrt_vec3 linear_velocity;
661 struct xrt_vec3 angular_velocity;
662};
663
664/*!
665 * A zero/identity value for @ref xrt_space_relation
666 *
667 * @note Despite this initializing all members (to zero or identity), this sets the xrt_space_relation::relation_flags
668 * to XRT_SPACE_RELATION_BITMASK_NONE - so this is safe to assign before an error return, etc.
669 *
670 * @ingroup xrt_iface math
671 * @relates xrt_space_relation
672 */
673#define XRT_SPACE_RELATION_ZERO \
674 { \
675 XRT_SPACE_RELATION_BITMASK_NONE, XRT_POSE_IDENTITY, XRT_VEC3_ZERO, XRT_VEC3_ZERO \
676 }
677
678/*!
679 * The maximum number of steps that can be in a relation chain.
680 *
681 * @see xrt_relation_chain::steps
682 * @relates xrt_relation_chain
683 * @ingroup xrt_iface math
684 */
685#define XRT_RELATION_CHAIN_CAPACITY 8
686
687/*!
688 * A chain of space relations and their associated validity flags.
689 * Functions for manipulating this are available in `math/m_space.h`.
690 *
691 * @see xrt_space_relation
692 * @ingroup xrt_iface math
693 */
695{
697 uint32_t step_count;
698};
699
700
701/*
702 *
703 * Input related enums and structs.
704 *
705 */
706
707/*!
708 * A enum that is used to name devices so that the
709 * state trackers can reason about the devices easier.
710 */
712{
713 XRT_DEVICE_INVALID = 0,
714
715 XRT_DEVICE_GENERIC_HMD = 1,
716
717 // Vive stuff.
718 XRT_DEVICE_VIVE_PRO,
719 XRT_DEVICE_VIVE_WAND,
720 XRT_DEVICE_VIVE_TRACKER, // Generic, only used for bindings.
721 XRT_DEVICE_VIVE_TRACKER_GEN1,
722 XRT_DEVICE_VIVE_TRACKER_GEN2,
723 XRT_DEVICE_VIVE_TRACKER_GEN3,
724 XRT_DEVICE_VIVE_TRACKER_TUNDRA,
725
726 // "Controllers" somewhat sorted as listed in spec.
727 XRT_DEVICE_SIMPLE_CONTROLLER,
728 XRT_DEVICE_DAYDREAM,
729 XRT_DEVICE_WMR_CONTROLLER,
730 XRT_DEVICE_XBOX_CONTROLLER,
731 XRT_DEVICE_GO_CONTROLLER,
732 XRT_DEVICE_TOUCH_CONTROLLER,
733 XRT_DEVICE_INDEX_CONTROLLER,
734
735 XRT_DEVICE_HP_REVERB_G2_CONTROLLER,
736 XRT_DEVICE_SAMSUNG_ODYSSEY_CONTROLLER,
737 XRT_DEVICE_ML2_CONTROLLER,
738 XRT_DEVICE_OPPO_MR_CONTROLLER,
739
740 XRT_DEVICE_HAND_INTERACTION,
741
742 XRT_DEVICE_EYE_GAZE_INTERACTION,
743
744 XRT_DEVICE_PSMV,
745 XRT_DEVICE_PSSENSE,
746 XRT_DEVICE_HYDRA,
747
748 // Other misc stuff.
749 XRT_DEVICE_HAND_TRACKER,
750 XRT_DEVICE_REALSENSE,
751 XRT_DEVICE_DEPTHAI,
752
753 //! XR_EXT_hand_interaction
755
756 //! XR_HTC_facial_tracking
758
759 //! XR_FB_body_tracking
761
762 //! XR_FB_face_tracking2
764
765 // added in OpenXR 1.1
766 XRT_DEVICE_PICO_NEO3_CONTROLLER,
767 XRT_DEVICE_PICO4_CONTROLLER,
768 XRT_DEVICE_PICO_G3_CONTROLLER,
769
770 XRT_DEVICE_VIVE_COSMOS_CONTROLLER,
771 XRT_DEVICE_VIVE_FOCUS3_CONTROLLER,
772
773 XRT_DEVICE_TOUCH_PRO_CONTROLLER,
774 XRT_DEVICE_TOUCH_PLUS_CONTROLLER,
775 XRT_DEVICE_TOUCH_CONTROLLER_RIFT_CV1,
776 XRT_DEVICE_TOUCH_CONTROLLER_QUEST_1_RIFT_S,
777 XRT_DEVICE_TOUCH_CONTROLLER_QUEST_2,
778};
779
780/*!
781 * How an xrt_device can be used.
782 *
783 * @ingroup xrt_iface
784 */
786{
787 XRT_DEVICE_TYPE_UNKNOWN = 0,
788 XRT_DEVICE_TYPE_HMD,
789 XRT_DEVICE_TYPE_RIGHT_HAND_CONTROLLER,
790 XRT_DEVICE_TYPE_LEFT_HAND_CONTROLLER,
791 XRT_DEVICE_TYPE_ANY_HAND_CONTROLLER,
792 XRT_DEVICE_TYPE_GENERIC_TRACKER,
793 XRT_DEVICE_TYPE_HAND_TRACKER,
794 XRT_DEVICE_TYPE_EYE_TRACKER,
795 XRT_DEVICE_TYPE_FACE_TRACKER,
796 XRT_DEVICE_TYPE_BODY_TRACKER,
797};
798
799/*!
800 * Base type of this inputs.
801 *
802 * @ingroup xrt_iface
803 */
805{
806 // clang-format off
807 //! Float input in [0, 1]
809 //! Float input in [-1, 1]
811 //! Vec2 input, components in [-1, 1]
813 //! Vec3 input, components in [-1, 1]
815 //! Boolean (digital, binary) input
817 //! A tracked pose
819 //! A tracked hand
821 //! A tracked face
823 //! A tracked body
825 // clang-format on
826};
827
828/*!
829 * The number of bits reserved for the input type in @ref xrt_input_name
830 *
831 * @see xrt_input_name
832 * @ingroup xrt_iface
833 */
834#define XRT_INPUT_TYPE_BITWIDTH 8u
835
836/*!
837 * The mask associated with @ref XRT_INPUT_TYPE_BITWIDTH
838 *
839 * @see xrt_input_name
840 * @ingroup xrt_iface
841 */
842
843#define XRT_INPUT_TYPE_BITMASK 0xffu
844
845/*!
846 * @brief Create an enum value for xrt_input_name that packs an ID and input
847 * type.
848 *
849 * @param id an integer
850 * @param type The suffix of an xrt_input_type value name: `XRT_INPUT_TYPE_` is
851 * prepended automatically.
852 *
853 * @see xrt_input_name
854 * @ingroup xrt_iface
855 */
856#define XRT_INPUT_NAME(id, type) ((UINT32_C(id) << XRT_INPUT_TYPE_BITWIDTH) | (uint32_t)XRT_INPUT_TYPE_##type)
857
858/*!
859 * @brief Extract the xrt_input_type from an xrt_input_name.
860 *
861 * @param name An xrt_input_name value
862 *
863 * @relates xrt_input_name
864 * @returns @ref xrt_input_type
865 * @ingroup xrt_iface
866 */
867#define XRT_GET_INPUT_TYPE(name) ((enum xrt_input_type)(name & XRT_INPUT_TYPE_BITMASK))
868
869/*!
870 * @brief Extract the xrt_input_name id from an xrt_input_name.
871 *
872 * @param name An xrt_input_name value
873 *
874 * @relates xrt_input_name
875 * @returns @ref xrt_input_type
876 * @ingroup xrt_iface
877 */
878#define XRT_GET_INPUT_ID(name) ((uint32_t)(name >> XRT_INPUT_TYPE_BITWIDTH))
879
880// clang-format off
881#define XRT_INPUT_LIST(_) \
882 /** Standard pose used for rendering */ \
883 _(XRT_INPUT_GENERIC_HEAD_POSE , XRT_INPUT_NAME(0x0000, POSE)) \
884 _(XRT_INPUT_GENERIC_HEAD_DETECT , XRT_INPUT_NAME(0x0001, BOOLEAN)) \
885 _(XRT_INPUT_GENERIC_HAND_TRACKING_LEFT , XRT_INPUT_NAME(0x0002, HAND_TRACKING)) \
886 _(XRT_INPUT_GENERIC_HAND_TRACKING_RIGHT , XRT_INPUT_NAME(0x0004, HAND_TRACKING)) \
887 _(XRT_INPUT_GENERIC_TRACKER_POSE , XRT_INPUT_NAME(0x0005, POSE)) \
888 /** XR_EXT_palm_pose */ \
889 _(XRT_INPUT_GENERIC_PALM_POSE , XRT_INPUT_NAME(0x0006, POSE)) \
890\
891 /** XR_EXT_eye_gaze_interaction */ \
892 _(XRT_INPUT_GENERIC_EYE_GAZE_POSE , XRT_INPUT_NAME(0x0007, POSE)) \
893 /** Standard non-view reference spaces */ \
894 _(XRT_INPUT_GENERIC_LOCAL_SPACE_POSE , XRT_INPUT_NAME(0x0008, POSE)) \
895 _(XRT_INPUT_GENERIC_LOCAL_FLOOR_SPACE_POSE , XRT_INPUT_NAME(0x0009, POSE)) \
896 _(XRT_INPUT_GENERIC_STAGE_SPACE_POSE , XRT_INPUT_NAME(0x000A, POSE)) \
897 _(XRT_INPUT_GENERIC_UNBOUNDED_SPACE_POSE , XRT_INPUT_NAME(0x000B, POSE)) \
898\
899 _(XRT_INPUT_SIMPLE_SELECT_CLICK , XRT_INPUT_NAME(0x0010, BOOLEAN)) \
900 _(XRT_INPUT_SIMPLE_MENU_CLICK , XRT_INPUT_NAME(0x0011, BOOLEAN)) \
901 _(XRT_INPUT_SIMPLE_GRIP_POSE , XRT_INPUT_NAME(0x0012, POSE)) \
902 _(XRT_INPUT_SIMPLE_AIM_POSE , XRT_INPUT_NAME(0x0013, POSE)) \
903\
904 _(XRT_INPUT_PSMV_PS_CLICK , XRT_INPUT_NAME(0x0020, BOOLEAN)) \
905 _(XRT_INPUT_PSMV_MOVE_CLICK , XRT_INPUT_NAME(0x0021, BOOLEAN)) \
906 _(XRT_INPUT_PSMV_START_CLICK , XRT_INPUT_NAME(0x0022, BOOLEAN)) \
907 _(XRT_INPUT_PSMV_SELECT_CLICK , XRT_INPUT_NAME(0x0023, BOOLEAN)) \
908 _(XRT_INPUT_PSMV_SQUARE_CLICK , XRT_INPUT_NAME(0x0024, BOOLEAN)) \
909 _(XRT_INPUT_PSMV_CROSS_CLICK , XRT_INPUT_NAME(0x0025, BOOLEAN)) \
910 _(XRT_INPUT_PSMV_CIRCLE_CLICK , XRT_INPUT_NAME(0x0026, BOOLEAN)) \
911 _(XRT_INPUT_PSMV_TRIANGLE_CLICK , XRT_INPUT_NAME(0x0027, BOOLEAN)) \
912 _(XRT_INPUT_PSMV_TRIGGER_VALUE , XRT_INPUT_NAME(0x0028, VEC1_ZERO_TO_ONE)) \
913 _(XRT_INPUT_PSMV_GRIP_POSE , XRT_INPUT_NAME(0x0029, POSE)) \
914 _(XRT_INPUT_PSMV_AIM_POSE , XRT_INPUT_NAME(0x002A, POSE)) \
915 _(XRT_INPUT_PSMV_BODY_CENTER_POSE , XRT_INPUT_NAME(0x002B, POSE)) \
916 _(XRT_INPUT_PSMV_BALL_CENTER_POSE , XRT_INPUT_NAME(0x002C, POSE)) \
917\
918 _(XRT_INPUT_HYDRA_1_CLICK , XRT_INPUT_NAME(0x0030, BOOLEAN)) \
919 _(XRT_INPUT_HYDRA_2_CLICK , XRT_INPUT_NAME(0x0031, BOOLEAN)) \
920 _(XRT_INPUT_HYDRA_3_CLICK , XRT_INPUT_NAME(0x0032, BOOLEAN)) \
921 _(XRT_INPUT_HYDRA_4_CLICK , XRT_INPUT_NAME(0x0033, BOOLEAN)) \
922 _(XRT_INPUT_HYDRA_MIDDLE_CLICK , XRT_INPUT_NAME(0x0034, BOOLEAN)) \
923 _(XRT_INPUT_HYDRA_BUMPER_CLICK , XRT_INPUT_NAME(0x0035, BOOLEAN)) \
924 _(XRT_INPUT_HYDRA_JOYSTICK_CLICK , XRT_INPUT_NAME(0x0036, BOOLEAN)) \
925 _(XRT_INPUT_HYDRA_JOYSTICK_VALUE , XRT_INPUT_NAME(0x0037, VEC2_MINUS_ONE_TO_ONE)) \
926 _(XRT_INPUT_HYDRA_TRIGGER_VALUE , XRT_INPUT_NAME(0x0038, VEC1_ZERO_TO_ONE)) \
927 _(XRT_INPUT_HYDRA_POSE , XRT_INPUT_NAME(0x0039, POSE)) \
928\
929 _(XRT_INPUT_DAYDREAM_TOUCHPAD_CLICK , XRT_INPUT_NAME(0x0040, BOOLEAN)) \
930 _(XRT_INPUT_DAYDREAM_BAR_CLICK , XRT_INPUT_NAME(0x0041, BOOLEAN)) \
931 _(XRT_INPUT_DAYDREAM_CIRCLE_CLICK , XRT_INPUT_NAME(0x0042, BOOLEAN)) \
932 _(XRT_INPUT_DAYDREAM_VOLUP_CLICK , XRT_INPUT_NAME(0x0043, BOOLEAN)) \
933 _(XRT_INPUT_DAYDREAM_VOLDN_CLICK , XRT_INPUT_NAME(0x0044, BOOLEAN)) \
934 _(XRT_INPUT_DAYDREAM_TOUCHPAD , XRT_INPUT_NAME(0x0045, VEC2_MINUS_ONE_TO_ONE)) \
935 _(XRT_INPUT_DAYDREAM_POSE , XRT_INPUT_NAME(0x0046, POSE)) \
936 _(XRT_INPUT_DAYDREAM_TOUCHPAD_TOUCH , XRT_INPUT_NAME(0x0047, BOOLEAN)) \
937\
938 _(XRT_INPUT_INDEX_SYSTEM_CLICK , XRT_INPUT_NAME(0x0050, BOOLEAN)) \
939 _(XRT_INPUT_INDEX_SYSTEM_TOUCH , XRT_INPUT_NAME(0x0051, BOOLEAN)) \
940 _(XRT_INPUT_INDEX_A_CLICK , XRT_INPUT_NAME(0x0052, BOOLEAN)) \
941 _(XRT_INPUT_INDEX_A_TOUCH , XRT_INPUT_NAME(0x0053, BOOLEAN)) \
942 _(XRT_INPUT_INDEX_B_CLICK , XRT_INPUT_NAME(0x0054, BOOLEAN)) \
943 _(XRT_INPUT_INDEX_B_TOUCH , XRT_INPUT_NAME(0x0055, BOOLEAN)) \
944 _(XRT_INPUT_INDEX_SQUEEZE_VALUE , XRT_INPUT_NAME(0x0056, VEC1_ZERO_TO_ONE)) \
945 _(XRT_INPUT_INDEX_SQUEEZE_FORCE , XRT_INPUT_NAME(0x0057, VEC1_ZERO_TO_ONE)) \
946 _(XRT_INPUT_INDEX_TRIGGER_CLICK , XRT_INPUT_NAME(0x0058, BOOLEAN)) \
947 _(XRT_INPUT_INDEX_TRIGGER_VALUE , XRT_INPUT_NAME(0x0059, VEC1_ZERO_TO_ONE)) \
948 _(XRT_INPUT_INDEX_TRIGGER_TOUCH , XRT_INPUT_NAME(0x005A, BOOLEAN)) \
949 _(XRT_INPUT_INDEX_THUMBSTICK , XRT_INPUT_NAME(0x005B, VEC2_MINUS_ONE_TO_ONE)) \
950 _(XRT_INPUT_INDEX_THUMBSTICK_CLICK , XRT_INPUT_NAME(0x005D, BOOLEAN)) \
951 _(XRT_INPUT_INDEX_THUMBSTICK_TOUCH , XRT_INPUT_NAME(0x005E, BOOLEAN)) \
952 _(XRT_INPUT_INDEX_TRACKPAD , XRT_INPUT_NAME(0x005F, VEC2_MINUS_ONE_TO_ONE)) \
953 _(XRT_INPUT_INDEX_TRACKPAD_FORCE , XRT_INPUT_NAME(0x0061, VEC1_ZERO_TO_ONE)) \
954 _(XRT_INPUT_INDEX_TRACKPAD_TOUCH , XRT_INPUT_NAME(0x0062, BOOLEAN)) \
955 _(XRT_INPUT_INDEX_GRIP_POSE , XRT_INPUT_NAME(0x0063, POSE)) \
956 _(XRT_INPUT_INDEX_AIM_POSE , XRT_INPUT_NAME(0x0064, POSE)) \
957\
958 _(XRT_INPUT_VIVE_SYSTEM_CLICK , XRT_INPUT_NAME(0x0070, BOOLEAN)) \
959 _(XRT_INPUT_VIVE_SQUEEZE_CLICK , XRT_INPUT_NAME(0x0071, BOOLEAN)) \
960 _(XRT_INPUT_VIVE_MENU_CLICK , XRT_INPUT_NAME(0x0072, BOOLEAN)) \
961 _(XRT_INPUT_VIVE_TRIGGER_CLICK , XRT_INPUT_NAME(0x0073, BOOLEAN)) \
962 _(XRT_INPUT_VIVE_TRIGGER_VALUE , XRT_INPUT_NAME(0x0074, VEC1_ZERO_TO_ONE)) \
963 _(XRT_INPUT_VIVE_TRACKPAD , XRT_INPUT_NAME(0x0075, VEC2_MINUS_ONE_TO_ONE)) \
964 _(XRT_INPUT_VIVE_TRACKPAD_CLICK , XRT_INPUT_NAME(0x0076, BOOLEAN)) \
965 _(XRT_INPUT_VIVE_TRACKPAD_TOUCH , XRT_INPUT_NAME(0x0077, BOOLEAN)) \
966 _(XRT_INPUT_VIVE_GRIP_POSE , XRT_INPUT_NAME(0x0078, POSE)) \
967 _(XRT_INPUT_VIVE_AIM_POSE , XRT_INPUT_NAME(0x0079, POSE)) \
968\
969 _(XRT_INPUT_VIVEPRO_SYSTEM_CLICK , XRT_INPUT_NAME(0x0080, BOOLEAN)) \
970 _(XRT_INPUT_VIVEPRO_VOLUP_CLICK , XRT_INPUT_NAME(0x0081, BOOLEAN)) \
971 _(XRT_INPUT_VIVEPRO_VOLDN_CLICK , XRT_INPUT_NAME(0x0082, BOOLEAN)) \
972 _(XRT_INPUT_VIVEPRO_MUTE_MIC_CLICK , XRT_INPUT_NAME(0x0083, BOOLEAN)) \
973\
974 _(XRT_INPUT_WMR_MENU_CLICK , XRT_INPUT_NAME(0x0090, BOOLEAN)) \
975 _(XRT_INPUT_WMR_SQUEEZE_CLICK , XRT_INPUT_NAME(0x0091, BOOLEAN)) \
976 _(XRT_INPUT_WMR_TRIGGER_VALUE , XRT_INPUT_NAME(0x0092, VEC1_ZERO_TO_ONE)) \
977 _(XRT_INPUT_WMR_THUMBSTICK_CLICK , XRT_INPUT_NAME(0x0093, BOOLEAN)) \
978 _(XRT_INPUT_WMR_THUMBSTICK , XRT_INPUT_NAME(0x0094, VEC2_MINUS_ONE_TO_ONE)) \
979 _(XRT_INPUT_WMR_TRACKPAD_CLICK , XRT_INPUT_NAME(0x0095, BOOLEAN)) \
980 _(XRT_INPUT_WMR_TRACKPAD_TOUCH , XRT_INPUT_NAME(0x0096, BOOLEAN)) \
981 _(XRT_INPUT_WMR_TRACKPAD , XRT_INPUT_NAME(0x0097, VEC2_MINUS_ONE_TO_ONE)) \
982 _(XRT_INPUT_WMR_GRIP_POSE , XRT_INPUT_NAME(0x0098, POSE)) \
983 _(XRT_INPUT_WMR_AIM_POSE , XRT_INPUT_NAME(0x0099, POSE)) \
984 _(XRT_INPUT_WMR_HOME_CLICK , XRT_INPUT_NAME(0x009A, BOOLEAN)) \
985\
986 _(XRT_INPUT_XBOX_MENU_CLICK , XRT_INPUT_NAME(0x00A0, BOOLEAN)) \
987 _(XRT_INPUT_XBOX_VIEW_CLICK , XRT_INPUT_NAME(0x00A1, BOOLEAN)) \
988 _(XRT_INPUT_XBOX_A_CLICK , XRT_INPUT_NAME(0x00A2, BOOLEAN)) \
989 _(XRT_INPUT_XBOX_B_CLICK , XRT_INPUT_NAME(0x00A3, BOOLEAN)) \
990 _(XRT_INPUT_XBOX_X_CLICK , XRT_INPUT_NAME(0x00A4, BOOLEAN)) \
991 _(XRT_INPUT_XBOX_Y_CLICK , XRT_INPUT_NAME(0x00A5, BOOLEAN)) \
992 _(XRT_INPUT_XBOX_DPAD_DOWN_CLICK , XRT_INPUT_NAME(0x00A6, BOOLEAN)) \
993 _(XRT_INPUT_XBOX_DPAD_RIGHT_CLICK , XRT_INPUT_NAME(0x00A7, BOOLEAN)) \
994 _(XRT_INPUT_XBOX_DPAD_UP_CLICK , XRT_INPUT_NAME(0x00A8, BOOLEAN)) \
995 _(XRT_INPUT_XBOX_DPAD_LEFT_CLICK , XRT_INPUT_NAME(0x00A9, BOOLEAN)) \
996 _(XRT_INPUT_XBOX_SHOULDER_LEFT_CLICK , XRT_INPUT_NAME(0x00AA, BOOLEAN)) \
997 _(XRT_INPUT_XBOX_SHOULDER_RIGHT_CLICK , XRT_INPUT_NAME(0x00AB, BOOLEAN)) \
998 _(XRT_INPUT_XBOX_THUMBSTICK_LEFT_CLICK , XRT_INPUT_NAME(0x00AC, BOOLEAN)) \
999 _(XRT_INPUT_XBOX_THUMBSTICK_LEFT , XRT_INPUT_NAME(0x00AD, VEC2_MINUS_ONE_TO_ONE)) \
1000 _(XRT_INPUT_XBOX_THUMBSTICK_RIGHT_CLICK , XRT_INPUT_NAME(0x00AE, BOOLEAN)) \
1001 _(XRT_INPUT_XBOX_THUMBSTICK_RIGHT , XRT_INPUT_NAME(0x00AF, VEC2_MINUS_ONE_TO_ONE)) \
1002 _(XRT_INPUT_XBOX_LEFT_TRIGGER_VALUE , XRT_INPUT_NAME(0x00B0, VEC1_ZERO_TO_ONE)) \
1003 _(XRT_INPUT_XBOX_RIGHT_TRIGGER_VALUE , XRT_INPUT_NAME(0x00B1, VEC1_ZERO_TO_ONE)) \
1004\
1005 _(XRT_INPUT_GO_SYSTEM_CLICK , XRT_INPUT_NAME(0x00B0, BOOLEAN)) \
1006 _(XRT_INPUT_GO_TRIGGER_CLICK , XRT_INPUT_NAME(0x00B1, BOOLEAN)) \
1007 _(XRT_INPUT_GO_BACK_CLICK , XRT_INPUT_NAME(0x00B2, BOOLEAN)) \
1008 _(XRT_INPUT_GO_TRACKPAD_CLICK , XRT_INPUT_NAME(0x00B3, BOOLEAN)) \
1009 _(XRT_INPUT_GO_TRACKPAD_TOUCH , XRT_INPUT_NAME(0x00B4, BOOLEAN)) \
1010 _(XRT_INPUT_GO_TRACKPAD , XRT_INPUT_NAME(0x00B5, VEC2_MINUS_ONE_TO_ONE)) \
1011 _(XRT_INPUT_GO_GRIP_POSE , XRT_INPUT_NAME(0x00B6, POSE)) \
1012 _(XRT_INPUT_GO_AIM_POSE , XRT_INPUT_NAME(0x00B7, POSE)) \
1013\
1014 _(XRT_INPUT_TOUCH_X_CLICK , XRT_INPUT_NAME(0x00C0, BOOLEAN)) \
1015 _(XRT_INPUT_TOUCH_X_TOUCH , XRT_INPUT_NAME(0x00C1, BOOLEAN)) \
1016 _(XRT_INPUT_TOUCH_Y_CLICK , XRT_INPUT_NAME(0x00C2, BOOLEAN)) \
1017 _(XRT_INPUT_TOUCH_Y_TOUCH , XRT_INPUT_NAME(0x00C3, BOOLEAN)) \
1018 _(XRT_INPUT_TOUCH_MENU_CLICK , XRT_INPUT_NAME(0x00C4, BOOLEAN)) \
1019 _(XRT_INPUT_TOUCH_A_CLICK , XRT_INPUT_NAME(0x00C5, BOOLEAN)) \
1020 _(XRT_INPUT_TOUCH_A_TOUCH , XRT_INPUT_NAME(0x00C6, BOOLEAN)) \
1021 _(XRT_INPUT_TOUCH_B_CLICK , XRT_INPUT_NAME(0x00C7, BOOLEAN)) \
1022 _(XRT_INPUT_TOUCH_B_TOUCH , XRT_INPUT_NAME(0x00C8, BOOLEAN)) \
1023 _(XRT_INPUT_TOUCH_SYSTEM_CLICK , XRT_INPUT_NAME(0x00C9, BOOLEAN)) \
1024 _(XRT_INPUT_TOUCH_SQUEEZE_VALUE , XRT_INPUT_NAME(0x00CA, VEC1_ZERO_TO_ONE)) \
1025 _(XRT_INPUT_TOUCH_TRIGGER_TOUCH , XRT_INPUT_NAME(0x00CB, BOOLEAN)) \
1026 _(XRT_INPUT_TOUCH_TRIGGER_VALUE , XRT_INPUT_NAME(0x00CC, VEC1_ZERO_TO_ONE)) \
1027 _(XRT_INPUT_TOUCH_THUMBSTICK_CLICK , XRT_INPUT_NAME(0x00CD, BOOLEAN)) \
1028 _(XRT_INPUT_TOUCH_THUMBSTICK_TOUCH , XRT_INPUT_NAME(0x00CE, BOOLEAN)) \
1029 _(XRT_INPUT_TOUCH_THUMBSTICK , XRT_INPUT_NAME(0x00CF, VEC2_MINUS_ONE_TO_ONE)) \
1030 _(XRT_INPUT_TOUCH_THUMBREST_TOUCH , XRT_INPUT_NAME(0x00D0, BOOLEAN)) \
1031 _(XRT_INPUT_TOUCH_GRIP_POSE , XRT_INPUT_NAME(0x00D1, POSE)) \
1032 _(XRT_INPUT_TOUCH_AIM_POSE , XRT_INPUT_NAME(0x00D2, POSE)) \
1033 _(XRT_INPUT_TOUCH_TRIGGER_PROXIMITY , XRT_INPUT_NAME(0x00D3, BOOLEAN)) \
1034 _(XRT_INPUT_TOUCH_THUMB_PROXIMITY , XRT_INPUT_NAME(0x00D4, BOOLEAN)) \
1035\
1036 _(XRT_INPUT_HAND_SELECT_VALUE , XRT_INPUT_NAME(0x00E0, VEC1_ZERO_TO_ONE)) \
1037 _(XRT_INPUT_HAND_SQUEEZE_VALUE , XRT_INPUT_NAME(0x00E1, VEC1_ZERO_TO_ONE)) \
1038 _(XRT_INPUT_HAND_GRIP_POSE , XRT_INPUT_NAME(0x00E2, POSE)) \
1039 _(XRT_INPUT_HAND_AIM_POSE , XRT_INPUT_NAME(0x00E3, POSE)) \
1040\
1041 _(XRT_INPUT_G2_CONTROLLER_X_CLICK , XRT_INPUT_NAME(0x00F0, BOOLEAN)) \
1042 _(XRT_INPUT_G2_CONTROLLER_Y_CLICK , XRT_INPUT_NAME(0x00F1, BOOLEAN)) \
1043 _(XRT_INPUT_G2_CONTROLLER_A_CLICK , XRT_INPUT_NAME(0x00F2, BOOLEAN)) \
1044 _(XRT_INPUT_G2_CONTROLLER_B_CLICK , XRT_INPUT_NAME(0x00F3, BOOLEAN)) \
1045 _(XRT_INPUT_G2_CONTROLLER_MENU_CLICK , XRT_INPUT_NAME(0x00F4, BOOLEAN)) \
1046 _(XRT_INPUT_G2_CONTROLLER_SQUEEZE_VALUE , XRT_INPUT_NAME(0x00F5, VEC1_ZERO_TO_ONE)) \
1047 _(XRT_INPUT_G2_CONTROLLER_TRIGGER_VALUE , XRT_INPUT_NAME(0x00F6, VEC1_ZERO_TO_ONE)) \
1048 _(XRT_INPUT_G2_CONTROLLER_THUMBSTICK_CLICK , XRT_INPUT_NAME(0x00F7, BOOLEAN)) \
1049 _(XRT_INPUT_G2_CONTROLLER_THUMBSTICK , XRT_INPUT_NAME(0x00F8, VEC2_MINUS_ONE_TO_ONE)) \
1050 _(XRT_INPUT_G2_CONTROLLER_GRIP_POSE , XRT_INPUT_NAME(0x00F9, POSE)) \
1051 _(XRT_INPUT_G2_CONTROLLER_AIM_POSE , XRT_INPUT_NAME(0x00FA, POSE)) \
1052 _(XRT_INPUT_G2_CONTROLLER_HOME_CLICK , XRT_INPUT_NAME(0x00FB, BOOLEAN)) \
1053 _(XRT_INPUT_G2_CONTROLLER_SQUEEZE_CLICK , XRT_INPUT_NAME(0x00FC, BOOLEAN)) \
1054\
1055 _(XRT_INPUT_ODYSSEY_CONTROLLER_MENU_CLICK , XRT_INPUT_NAME(0x0100, BOOLEAN)) \
1056 _(XRT_INPUT_ODYSSEY_CONTROLLER_SQUEEZE_CLICK , XRT_INPUT_NAME(0x0101, BOOLEAN)) \
1057 _(XRT_INPUT_ODYSSEY_CONTROLLER_TRIGGER_VALUE , XRT_INPUT_NAME(0x0102, VEC1_ZERO_TO_ONE)) \
1058 _(XRT_INPUT_ODYSSEY_CONTROLLER_THUMBSTICK_CLICK , XRT_INPUT_NAME(0x0103, BOOLEAN)) \
1059 _(XRT_INPUT_ODYSSEY_CONTROLLER_THUMBSTICK , XRT_INPUT_NAME(0x0104, VEC2_MINUS_ONE_TO_ONE)) \
1060 _(XRT_INPUT_ODYSSEY_CONTROLLER_TRACKPAD_CLICK , XRT_INPUT_NAME(0x0105, BOOLEAN)) \
1061 _(XRT_INPUT_ODYSSEY_CONTROLLER_TRACKPAD_TOUCH , XRT_INPUT_NAME(0x0106, BOOLEAN)) \
1062 _(XRT_INPUT_ODYSSEY_CONTROLLER_TRACKPAD , XRT_INPUT_NAME(0x0107, VEC2_MINUS_ONE_TO_ONE)) \
1063 _(XRT_INPUT_ODYSSEY_CONTROLLER_GRIP_POSE , XRT_INPUT_NAME(0x0108, POSE)) \
1064 _(XRT_INPUT_ODYSSEY_CONTROLLER_AIM_POSE , XRT_INPUT_NAME(0x0109, POSE)) \
1065 _(XRT_INPUT_ODYSSEY_CONTROLLER_HOME_CLICK , XRT_INPUT_NAME(0x010A, BOOLEAN)) \
1066\
1067 _(XRT_INPUT_ML2_CONTROLLER_MENU_CLICK , XRT_INPUT_NAME(0x0200, BOOLEAN)) \
1068 _(XRT_INPUT_ML2_CONTROLLER_SELECT_CLICK , XRT_INPUT_NAME(0x0201, BOOLEAN)) \
1069 _(XRT_INPUT_ML2_CONTROLLER_TRIGGER_CLICK , XRT_INPUT_NAME(0x0202, BOOLEAN)) \
1070 _(XRT_INPUT_ML2_CONTROLLER_TRIGGER_VALUE , XRT_INPUT_NAME(0x0203, VEC1_ZERO_TO_ONE)) \
1071 _(XRT_INPUT_ML2_CONTROLLER_TRACKPAD_CLICK , XRT_INPUT_NAME(0x0204, BOOLEAN)) \
1072 _(XRT_INPUT_ML2_CONTROLLER_TRACKPAD_TOUCH , XRT_INPUT_NAME(0x0205, BOOLEAN)) \
1073 _(XRT_INPUT_ML2_CONTROLLER_TRACKPAD_FORCE , XRT_INPUT_NAME(0x0206, VEC1_ZERO_TO_ONE)) \
1074 _(XRT_INPUT_ML2_CONTROLLER_TRACKPAD , XRT_INPUT_NAME(0x0207, VEC2_MINUS_ONE_TO_ONE)) \
1075 _(XRT_INPUT_ML2_CONTROLLER_GRIP_POSE , XRT_INPUT_NAME(0x0208, POSE)) \
1076 _(XRT_INPUT_ML2_CONTROLLER_AIM_POSE , XRT_INPUT_NAME(0x0209, POSE)) \
1077 _(XRT_INPUT_ML2_CONTROLLER_SHOULDER_CLICK , XRT_INPUT_NAME(0x020A, BOOLEAN)) \
1078\
1079 _(XRT_INPUT_VIVE_TRACKER_SYSTEM_CLICK , XRT_INPUT_NAME(0x0210, BOOLEAN)) \
1080 _(XRT_INPUT_VIVE_TRACKER_MENU_CLICK , XRT_INPUT_NAME(0x0211, BOOLEAN)) \
1081 _(XRT_INPUT_VIVE_TRACKER_TRIGGER_CLICK , XRT_INPUT_NAME(0x0212, BOOLEAN)) \
1082 _(XRT_INPUT_VIVE_TRACKER_SQUEEZE_CLICK , XRT_INPUT_NAME(0x0213, BOOLEAN)) \
1083 _(XRT_INPUT_VIVE_TRACKER_TRIGGER_VALUE , XRT_INPUT_NAME(0x0214, VEC1_ZERO_TO_ONE)) \
1084 _(XRT_INPUT_VIVE_TRACKER_TRACKPAD , XRT_INPUT_NAME(0x0215, VEC2_MINUS_ONE_TO_ONE)) \
1085 _(XRT_INPUT_VIVE_TRACKER_TRACKPAD_CLICK , XRT_INPUT_NAME(0x0216, BOOLEAN)) \
1086 _(XRT_INPUT_VIVE_TRACKER_TRACKPAD_TOUCH , XRT_INPUT_NAME(0x0217, BOOLEAN)) \
1087 _(XRT_INPUT_VIVE_TRACKER_GRIP_POSE , XRT_INPUT_NAME(0x0218, POSE)) \
1088\
1089 _(XRT_INPUT_PSSENSE_PS_CLICK , XRT_INPUT_NAME(0x0300, BOOLEAN)) \
1090 _(XRT_INPUT_PSSENSE_SHARE_CLICK , XRT_INPUT_NAME(0x0301, BOOLEAN)) \
1091 _(XRT_INPUT_PSSENSE_OPTIONS_CLICK , XRT_INPUT_NAME(0x0302, BOOLEAN)) \
1092 _(XRT_INPUT_PSSENSE_SQUARE_CLICK , XRT_INPUT_NAME(0x0303, BOOLEAN)) \
1093 _(XRT_INPUT_PSSENSE_SQUARE_TOUCH , XRT_INPUT_NAME(0x0304, BOOLEAN)) \
1094 _(XRT_INPUT_PSSENSE_TRIANGLE_CLICK , XRT_INPUT_NAME(0x0305, BOOLEAN)) \
1095 _(XRT_INPUT_PSSENSE_TRIANGLE_TOUCH , XRT_INPUT_NAME(0x0306, BOOLEAN)) \
1096 _(XRT_INPUT_PSSENSE_CROSS_CLICK , XRT_INPUT_NAME(0x0307, BOOLEAN)) \
1097 _(XRT_INPUT_PSSENSE_CROSS_TOUCH , XRT_INPUT_NAME(0x0308, BOOLEAN)) \
1098 _(XRT_INPUT_PSSENSE_CIRCLE_CLICK , XRT_INPUT_NAME(0x0309, BOOLEAN)) \
1099 _(XRT_INPUT_PSSENSE_CIRCLE_TOUCH , XRT_INPUT_NAME(0x030a, BOOLEAN)) \
1100 _(XRT_INPUT_PSSENSE_SQUEEZE_CLICK , XRT_INPUT_NAME(0x030b, BOOLEAN)) \
1101 _(XRT_INPUT_PSSENSE_SQUEEZE_TOUCH , XRT_INPUT_NAME(0x030c, BOOLEAN)) \
1102 _(XRT_INPUT_PSSENSE_SQUEEZE_PROXIMITY , XRT_INPUT_NAME(0x030d, VEC1_ZERO_TO_ONE)) \
1103 _(XRT_INPUT_PSSENSE_TRIGGER_CLICK , XRT_INPUT_NAME(0x030e, BOOLEAN)) \
1104 _(XRT_INPUT_PSSENSE_TRIGGER_TOUCH , XRT_INPUT_NAME(0x030f, BOOLEAN)) \
1105 _(XRT_INPUT_PSSENSE_TRIGGER_VALUE , XRT_INPUT_NAME(0x0310, VEC1_ZERO_TO_ONE)) \
1106 _(XRT_INPUT_PSSENSE_TRIGGER_PROXIMITY , XRT_INPUT_NAME(0x0311, VEC1_ZERO_TO_ONE)) \
1107 _(XRT_INPUT_PSSENSE_THUMBSTICK , XRT_INPUT_NAME(0x0312, VEC2_MINUS_ONE_TO_ONE)) \
1108 _(XRT_INPUT_PSSENSE_THUMBSTICK_CLICK , XRT_INPUT_NAME(0x0313, BOOLEAN)) \
1109 _(XRT_INPUT_PSSENSE_THUMBSTICK_TOUCH , XRT_INPUT_NAME(0x0314, BOOLEAN)) \
1110 _(XRT_INPUT_PSSENSE_GRIP_POSE , XRT_INPUT_NAME(0x0315, POSE)) \
1111 _(XRT_INPUT_PSSENSE_AIM_POSE , XRT_INPUT_NAME(0x0316, POSE)) \
1112\
1113 /** XR_EXT_hand_interaction */ \
1114 _(XRT_INPUT_HAND_PINCH_POSE , XRT_INPUT_NAME(0x0401, POSE)) \
1115 _(XRT_INPUT_HAND_POKE_POSE , XRT_INPUT_NAME(0x0402, POSE)) \
1116 _(XRT_INPUT_HAND_PINCH_VALUE , XRT_INPUT_NAME(0x0403, VEC1_ZERO_TO_ONE)) \
1117 _(XRT_INPUT_HAND_AIM_ACTIVATE_VALUE , XRT_INPUT_NAME(0x0404, VEC1_ZERO_TO_ONE)) \
1118 _(XRT_INPUT_HAND_GRASP_VALUE , XRT_INPUT_NAME(0x0405, VEC1_ZERO_TO_ONE)) \
1119 _(XRT_INPUT_HAND_PINCH_READY , XRT_INPUT_NAME(0x0406, BOOLEAN)) \
1120 _(XRT_INPUT_HAND_AIM_ACTIVATE_READY , XRT_INPUT_NAME(0x0407, BOOLEAN)) \
1121 _(XRT_INPUT_HAND_GRASP_READY , XRT_INPUT_NAME(0x0408, BOOLEAN)) \
1122\
1123 _(XRT_INPUT_OPPO_MR_X_CLICK , XRT_INPUT_NAME(0x0500, BOOLEAN)) \
1124 _(XRT_INPUT_OPPO_MR_X_TOUCH , XRT_INPUT_NAME(0x0501, BOOLEAN)) \
1125 _(XRT_INPUT_OPPO_MR_Y_CLICK , XRT_INPUT_NAME(0x0502, BOOLEAN)) \
1126 _(XRT_INPUT_OPPO_MR_Y_TOUCH , XRT_INPUT_NAME(0x0503, BOOLEAN)) \
1127 _(XRT_INPUT_OPPO_MR_MENU_CLICK , XRT_INPUT_NAME(0x0504, BOOLEAN)) \
1128 _(XRT_INPUT_OPPO_MR_HEART_RATE_VALUE , XRT_INPUT_NAME(0x0505, VEC1_ZERO_TO_ONE)) \
1129 _(XRT_INPUT_OPPO_MR_A_CLICK , XRT_INPUT_NAME(0x0506, BOOLEAN)) \
1130 _(XRT_INPUT_OPPO_MR_A_TOUCH , XRT_INPUT_NAME(0x0507, BOOLEAN)) \
1131 _(XRT_INPUT_OPPO_MR_B_CLICK , XRT_INPUT_NAME(0x0508, BOOLEAN)) \
1132 _(XRT_INPUT_OPPO_MR_B_TOUCH , XRT_INPUT_NAME(0x0509, BOOLEAN)) \
1133 _(XRT_INPUT_OPPO_MR_HOME_CLICK , XRT_INPUT_NAME(0x050A, BOOLEAN)) \
1134 _(XRT_INPUT_OPPO_MR_SQUEEZE_VALUE , XRT_INPUT_NAME(0x050B, VEC1_ZERO_TO_ONE)) \
1135 _(XRT_INPUT_OPPO_MR_TRIGGER_TOUCH , XRT_INPUT_NAME(0x050C, BOOLEAN)) \
1136 _(XRT_INPUT_OPPO_MR_TRIGGER_VALUE , XRT_INPUT_NAME(0x050D, VEC1_ZERO_TO_ONE)) \
1137 _(XRT_INPUT_OPPO_MR_GRIP_POSE , XRT_INPUT_NAME(0x050E, POSE)) \
1138 _(XRT_INPUT_OPPO_MR_AIM_POSE , XRT_INPUT_NAME(0x050F, POSE)) \
1139 _(XRT_INPUT_OPPO_MR_THUMBSTICK_CLICK , XRT_INPUT_NAME(0x0510, BOOLEAN)) \
1140 _(XRT_INPUT_OPPO_MR_THUMBSTICK_TOUCH , XRT_INPUT_NAME(0x0511, BOOLEAN)) \
1141 _(XRT_INPUT_OPPO_MR_THUMBSTICK , XRT_INPUT_NAME(0x0512, VEC2_MINUS_ONE_TO_ONE)) \
1142\
1143 _(XRT_INPUT_GENERIC_FACE_TRACKING , XRT_INPUT_NAME(0x0600, FACE_TRACKING)) \
1144\
1145 _(XRT_INPUT_HTC_EYE_FACE_TRACKING , XRT_INPUT_NAME(0x0601, FACE_TRACKING)) \
1146 _(XRT_INPUT_HTC_LIP_FACE_TRACKING , XRT_INPUT_NAME(0x0602, FACE_TRACKING)) \
1147 _(XRT_INPUT_FB_FACE_TRACKING2_AUDIO , XRT_INPUT_NAME(0x0603, FACE_TRACKING)) \
1148 _(XRT_INPUT_FB_FACE_TRACKING2_VISUAL , XRT_INPUT_NAME(0x0604, FACE_TRACKING)) \
1149\
1150 _(XRT_INPUT_GENERIC_BODY_TRACKING , XRT_INPUT_NAME(0x0700, BODY_TRACKING)) \
1151 _(XRT_INPUT_FB_BODY_TRACKING , XRT_INPUT_NAME(0x0701, BODY_TRACKING)) \
1152\
1153 _(XRT_INPUT_PICO_NEO3_X_CLICK , XRT_INPUT_NAME(0x0800, BOOLEAN)) \
1154 _(XRT_INPUT_PICO_NEO3_X_TOUCH , XRT_INPUT_NAME(0x0801, BOOLEAN)) \
1155 _(XRT_INPUT_PICO_NEO3_Y_CLICK , XRT_INPUT_NAME(0x0802, BOOLEAN)) \
1156 _(XRT_INPUT_PICO_NEO3_Y_TOUCH , XRT_INPUT_NAME(0x0803, BOOLEAN)) \
1157 _(XRT_INPUT_PICO_NEO3_MENU_CLICK , XRT_INPUT_NAME(0x0804, BOOLEAN)) \
1158 _(XRT_INPUT_PICO_NEO3_SYSTEM_CLICK , XRT_INPUT_NAME(0x0805, BOOLEAN)) \
1159 _(XRT_INPUT_PICO_NEO3_TRIGGER_CLICK , XRT_INPUT_NAME(0x0806, BOOLEAN)) \
1160 _(XRT_INPUT_PICO_NEO3_TRIGGER_VALUE , XRT_INPUT_NAME(0x0807, VEC1_ZERO_TO_ONE)) \
1161 _(XRT_INPUT_PICO_NEO3_TRIGGER_TOUCH , XRT_INPUT_NAME(0x0808, BOOLEAN)) \
1162 _(XRT_INPUT_PICO_NEO3_THUMBSTICK_CLICK , XRT_INPUT_NAME(0x0809, BOOLEAN)) \
1163 _(XRT_INPUT_PICO_NEO3_THUMBSTICK_TOUCH , XRT_INPUT_NAME(0x080A, BOOLEAN)) \
1164 _(XRT_INPUT_PICO_NEO3_THUMBSTICK , XRT_INPUT_NAME(0x080B, VEC2_MINUS_ONE_TO_ONE)) \
1165 _(XRT_INPUT_PICO_NEO3_SQUEEZE_CLICK , XRT_INPUT_NAME(0x080C, BOOLEAN)) \
1166 _(XRT_INPUT_PICO_NEO3_SQUEEZE_VALUE , XRT_INPUT_NAME(0x080D, VEC1_ZERO_TO_ONE)) \
1167 _(XRT_INPUT_PICO_NEO3_GRIP_POSE , XRT_INPUT_NAME(0x080E, POSE)) \
1168 _(XRT_INPUT_PICO_NEO3_AIM_POSE , XRT_INPUT_NAME(0x080F, POSE)) \
1169 _(XRT_INPUT_PICO_NEO3_A_CLICK , XRT_INPUT_NAME(0x0810, BOOLEAN)) \
1170 _(XRT_INPUT_PICO_NEO3_A_TOUCH , XRT_INPUT_NAME(0x0811, BOOLEAN)) \
1171 _(XRT_INPUT_PICO_NEO3_B_CLICK , XRT_INPUT_NAME(0x0812, BOOLEAN)) \
1172 _(XRT_INPUT_PICO_NEO3_B_TOUCH , XRT_INPUT_NAME(0x0813, BOOLEAN)) \
1173\
1174 _(XRT_INPUT_PICO4_X_CLICK , XRT_INPUT_NAME(0x0900, BOOLEAN)) \
1175 _(XRT_INPUT_PICO4_X_TOUCH , XRT_INPUT_NAME(0x0901, BOOLEAN)) \
1176 _(XRT_INPUT_PICO4_Y_CLICK , XRT_INPUT_NAME(0x0902, BOOLEAN)) \
1177 _(XRT_INPUT_PICO4_Y_TOUCH , XRT_INPUT_NAME(0x0903, BOOLEAN)) \
1178 _(XRT_INPUT_PICO4_SYSTEM_CLICK , XRT_INPUT_NAME(0x0905, BOOLEAN)) \
1179 _(XRT_INPUT_PICO4_TRIGGER_CLICK , XRT_INPUT_NAME(0x0906, BOOLEAN)) \
1180 _(XRT_INPUT_PICO4_TRIGGER_VALUE , XRT_INPUT_NAME(0x0907, VEC1_ZERO_TO_ONE)) \
1181 _(XRT_INPUT_PICO4_TRIGGER_TOUCH , XRT_INPUT_NAME(0x0908, BOOLEAN)) \
1182 _(XRT_INPUT_PICO4_THUMBSTICK_CLICK , XRT_INPUT_NAME(0x0909, BOOLEAN)) \
1183 _(XRT_INPUT_PICO4_THUMBSTICK_TOUCH , XRT_INPUT_NAME(0x090A, BOOLEAN)) \
1184 _(XRT_INPUT_PICO4_THUMBSTICK , XRT_INPUT_NAME(0x090B, VEC2_MINUS_ONE_TO_ONE)) \
1185 _(XRT_INPUT_PICO4_SQUEEZE_CLICK , XRT_INPUT_NAME(0x090C, BOOLEAN)) \
1186 _(XRT_INPUT_PICO4_SQUEEZE_VALUE , XRT_INPUT_NAME(0x090D, VEC1_ZERO_TO_ONE)) \
1187 _(XRT_INPUT_PICO4_GRIP_POSE , XRT_INPUT_NAME(0x090E, POSE)) \
1188 _(XRT_INPUT_PICO4_AIM_POSE , XRT_INPUT_NAME(0x090F, POSE)) \
1189 _(XRT_INPUT_PICO4_A_CLICK , XRT_INPUT_NAME(0x0910, BOOLEAN)) \
1190 _(XRT_INPUT_PICO4_A_TOUCH , XRT_INPUT_NAME(0x0911, BOOLEAN)) \
1191 _(XRT_INPUT_PICO4_B_CLICK , XRT_INPUT_NAME(0x0912, BOOLEAN)) \
1192 _(XRT_INPUT_PICO4_B_TOUCH , XRT_INPUT_NAME(0x0913, BOOLEAN)) \
1193 _(XRT_INPUT_PICO4_MENU_CLICK , XRT_INPUT_NAME(0x0914, BOOLEAN)) \
1194\
1195 _(XRT_INPUT_PICO_G3_MENU_CLICK , XRT_INPUT_NAME(0x0A01, BOOLEAN)) \
1196 _(XRT_INPUT_PICO_G3_TRIGGER_CLICK , XRT_INPUT_NAME(0x0A02, BOOLEAN)) \
1197 _(XRT_INPUT_PICO_G3_TRIGGER_VALUE , XRT_INPUT_NAME(0x0A03, VEC1_ZERO_TO_ONE)) \
1198 _(XRT_INPUT_PICO_G3_THUMBSTICK_CLICK , XRT_INPUT_NAME(0x0A04, BOOLEAN)) \
1199 _(XRT_INPUT_PICO_G3_THUMBSTICK_TOUCH , XRT_INPUT_NAME(0x0A05, BOOLEAN)) \
1200 _(XRT_INPUT_PICO_G3_THUMBSTICK , XRT_INPUT_NAME(0x0A06, VEC2_MINUS_ONE_TO_ONE)) \
1201 _(XRT_INPUT_PICO_G3_GRIP_POSE , XRT_INPUT_NAME(0x0A07, POSE)) \
1202 _(XRT_INPUT_PICO_G3_AIM_POSE , XRT_INPUT_NAME(0x0A08, POSE)) \
1203\
1204 _(XRT_INPUT_VIVE_COSMOS_X_CLICK , XRT_INPUT_NAME(0x0B00, BOOLEAN)) \
1205 _(XRT_INPUT_VIVE_COSMOS_Y_CLICK , XRT_INPUT_NAME(0x0B01, BOOLEAN)) \
1206 _(XRT_INPUT_VIVE_COSMOS_MENU_CLICK , XRT_INPUT_NAME(0x0B02, BOOLEAN)) \
1207 _(XRT_INPUT_VIVE_COSMOS_A_CLICK , XRT_INPUT_NAME(0x0B03, BOOLEAN)) \
1208 _(XRT_INPUT_VIVE_COSMOS_B_CLICK , XRT_INPUT_NAME(0x0B04, BOOLEAN)) \
1209 _(XRT_INPUT_VIVE_COSMOS_SYSTEM_CLICK , XRT_INPUT_NAME(0x0B05, BOOLEAN)) \
1210 _(XRT_INPUT_VIVE_COSMOS_SHOULDER_CLICK , XRT_INPUT_NAME(0x0B06, BOOLEAN)) \
1211 _(XRT_INPUT_VIVE_COSMOS_SQUEEZE_CLICK , XRT_INPUT_NAME(0x0B07, BOOLEAN)) \
1212 _(XRT_INPUT_VIVE_COSMOS_TRIGGER_CLICK , XRT_INPUT_NAME(0x0B08, BOOLEAN)) \
1213 _(XRT_INPUT_VIVE_COSMOS_TRIGGER_VALUE , XRT_INPUT_NAME(0x0B09, VEC1_ZERO_TO_ONE)) \
1214 _(XRT_INPUT_VIVE_COSMOS_THUMBSTICK_CLICK , XRT_INPUT_NAME(0x0B0A, BOOLEAN)) \
1215 _(XRT_INPUT_VIVE_COSMOS_THUMBSTICK_TOUCH , XRT_INPUT_NAME(0x0B0B, BOOLEAN)) \
1216 _(XRT_INPUT_VIVE_COSMOS_THUMBSTICK , XRT_INPUT_NAME(0x0B0C, VEC2_MINUS_ONE_TO_ONE)) \
1217 _(XRT_INPUT_VIVE_COSMOS_GRIP_POSE , XRT_INPUT_NAME(0x0B0D, POSE)) \
1218 _(XRT_INPUT_VIVE_COSMOS_AIM_POSE , XRT_INPUT_NAME(0x0B0E, POSE)) \
1219\
1220 _(XRT_INPUT_VIVE_FOCUS3_X_CLICK , XRT_INPUT_NAME(0x0C00, BOOLEAN)) \
1221 _(XRT_INPUT_VIVE_FOCUS3_Y_CLICK , XRT_INPUT_NAME(0x0C01, BOOLEAN)) \
1222 _(XRT_INPUT_VIVE_FOCUS3_MENU_CLICK , XRT_INPUT_NAME(0x0C02, BOOLEAN)) \
1223 _(XRT_INPUT_VIVE_FOCUS3_A_CLICK , XRT_INPUT_NAME(0x0C03, BOOLEAN)) \
1224 _(XRT_INPUT_VIVE_FOCUS3_B_CLICK , XRT_INPUT_NAME(0x0C04, BOOLEAN)) \
1225 _(XRT_INPUT_VIVE_FOCUS3_SYSTEM_CLICK , XRT_INPUT_NAME(0x0C05, BOOLEAN)) \
1226 _(XRT_INPUT_VIVE_FOCUS3_SQUEEZE_CLICK , XRT_INPUT_NAME(0x0C06, BOOLEAN)) \
1227 _(XRT_INPUT_VIVE_FOCUS3_SQUEEZE_TOUCH , XRT_INPUT_NAME(0x0C07, BOOLEAN)) \
1228 _(XRT_INPUT_VIVE_FOCUS3_SQUEEZE_VALUE , XRT_INPUT_NAME(0x0C08, VEC1_ZERO_TO_ONE)) \
1229 _(XRT_INPUT_VIVE_FOCUS3_TRIGGER_CLICK , XRT_INPUT_NAME(0x0C09, BOOLEAN)) \
1230 _(XRT_INPUT_VIVE_FOCUS3_TRIGGER_TOUCH , XRT_INPUT_NAME(0x0C0A, BOOLEAN)) \
1231 _(XRT_INPUT_VIVE_FOCUS3_TRIGGER_VALUE , XRT_INPUT_NAME(0x0C0B, VEC1_ZERO_TO_ONE)) \
1232 _(XRT_INPUT_VIVE_FOCUS3_THUMBSTICK_CLICK , XRT_INPUT_NAME(0x0C0C, BOOLEAN)) \
1233 _(XRT_INPUT_VIVE_FOCUS3_THUMBSTICK_TOUCH , XRT_INPUT_NAME(0x0C0D, BOOLEAN)) \
1234 _(XRT_INPUT_VIVE_FOCUS3_THUMBSTICK , XRT_INPUT_NAME(0x0C0E, VEC2_MINUS_ONE_TO_ONE)) \
1235 _(XRT_INPUT_VIVE_FOCUS3_THUMBREST_TOUCH , XRT_INPUT_NAME(0x0C0F, BOOLEAN)) \
1236 _(XRT_INPUT_VIVE_FOCUS3_GRIP_POSE , XRT_INPUT_NAME(0x0C10, POSE)) \
1237 _(XRT_INPUT_VIVE_FOCUS3_AIM_POSE , XRT_INPUT_NAME(0x0C11, POSE)) \
1238\
1239 _(XRT_INPUT_TOUCH_PRO_X_CLICK , XRT_INPUT_NAME(0x0D00, BOOLEAN)) \
1240 _(XRT_INPUT_TOUCH_PRO_X_TOUCH , XRT_INPUT_NAME(0x0D01, BOOLEAN)) \
1241 _(XRT_INPUT_TOUCH_PRO_Y_CLICK , XRT_INPUT_NAME(0x0D02, BOOLEAN)) \
1242 _(XRT_INPUT_TOUCH_PRO_Y_TOUCH , XRT_INPUT_NAME(0x0D03, BOOLEAN)) \
1243 _(XRT_INPUT_TOUCH_PRO_MENU_CLICK , XRT_INPUT_NAME(0x0D04, BOOLEAN)) \
1244 _(XRT_INPUT_TOUCH_PRO_A_CLICK , XRT_INPUT_NAME(0x0D05, BOOLEAN)) \
1245 _(XRT_INPUT_TOUCH_PRO_A_TOUCH , XRT_INPUT_NAME(0x0D06, BOOLEAN)) \
1246 _(XRT_INPUT_TOUCH_PRO_B_CLICK , XRT_INPUT_NAME(0x0D07, BOOLEAN)) \
1247 _(XRT_INPUT_TOUCH_PRO_B_TOUCH , XRT_INPUT_NAME(0x0D08, BOOLEAN)) \
1248 _(XRT_INPUT_TOUCH_PRO_SYSTEM_CLICK , XRT_INPUT_NAME(0x0D09, BOOLEAN)) \
1249 _(XRT_INPUT_TOUCH_PRO_SQUEEZE_VALUE , XRT_INPUT_NAME(0x0D0A, VEC1_ZERO_TO_ONE)) \
1250 _(XRT_INPUT_TOUCH_PRO_TRIGGER_TOUCH , XRT_INPUT_NAME(0x0D0B, BOOLEAN)) \
1251 _(XRT_INPUT_TOUCH_PRO_TRIGGER_VALUE , XRT_INPUT_NAME(0x0D0C, VEC1_ZERO_TO_ONE)) \
1252 _(XRT_INPUT_TOUCH_PRO_THUMBSTICK_CLICK , XRT_INPUT_NAME(0x0D0D, BOOLEAN)) \
1253 _(XRT_INPUT_TOUCH_PRO_THUMBSTICK_TOUCH , XRT_INPUT_NAME(0x0D0E, BOOLEAN)) \
1254 _(XRT_INPUT_TOUCH_PRO_THUMBSTICK , XRT_INPUT_NAME(0x0D0F, VEC2_MINUS_ONE_TO_ONE)) \
1255 _(XRT_INPUT_TOUCH_PRO_THUMBREST_TOUCH , XRT_INPUT_NAME(0x0D10, BOOLEAN)) \
1256 _(XRT_INPUT_TOUCH_PRO_THUMBREST_FORCE , XRT_INPUT_NAME(0x0D11, VEC1_ZERO_TO_ONE)) \
1257 _(XRT_INPUT_TOUCH_PRO_GRIP_POSE , XRT_INPUT_NAME(0x0D12, POSE)) \
1258 _(XRT_INPUT_TOUCH_PRO_AIM_POSE , XRT_INPUT_NAME(0x0D13, POSE)) \
1259 _(XRT_INPUT_TOUCH_PRO_TRIGGER_PROXIMITY , XRT_INPUT_NAME(0x0D14, BOOLEAN)) \
1260 _(XRT_INPUT_TOUCH_PRO_THUMB_PROXIMITY , XRT_INPUT_NAME(0x0D15, BOOLEAN)) \
1261 _(XRT_INPUT_TOUCH_PRO_TRIGGER_CURL , XRT_INPUT_NAME(0x0D16, VEC1_ZERO_TO_ONE)) \
1262 _(XRT_INPUT_TOUCH_PRO_TRIGGER_SLIDE , XRT_INPUT_NAME(0x0D17, VEC1_ZERO_TO_ONE)) \
1263 _(XRT_INPUT_TOUCH_PRO_STYLUS_FORCE , XRT_INPUT_NAME(0x0D18, VEC1_ZERO_TO_ONE)) \
1264\
1265 _(XRT_INPUT_TOUCH_PLUS_X_CLICK , XRT_INPUT_NAME(0x0E00, BOOLEAN)) \
1266 _(XRT_INPUT_TOUCH_PLUS_X_TOUCH , XRT_INPUT_NAME(0x0E01, BOOLEAN)) \
1267 _(XRT_INPUT_TOUCH_PLUS_Y_CLICK , XRT_INPUT_NAME(0x0E02, BOOLEAN)) \
1268 _(XRT_INPUT_TOUCH_PLUS_Y_TOUCH , XRT_INPUT_NAME(0x0E03, BOOLEAN)) \
1269 _(XRT_INPUT_TOUCH_PLUS_MENU_CLICK , XRT_INPUT_NAME(0x0E04, BOOLEAN)) \
1270 _(XRT_INPUT_TOUCH_PLUS_A_CLICK , XRT_INPUT_NAME(0x0E05, BOOLEAN)) \
1271 _(XRT_INPUT_TOUCH_PLUS_A_TOUCH , XRT_INPUT_NAME(0x0E06, BOOLEAN)) \
1272 _(XRT_INPUT_TOUCH_PLUS_B_CLICK , XRT_INPUT_NAME(0x0E07, BOOLEAN)) \
1273 _(XRT_INPUT_TOUCH_PLUS_B_TOUCH , XRT_INPUT_NAME(0x0E08, BOOLEAN)) \
1274 _(XRT_INPUT_TOUCH_PLUS_SYSTEM_CLICK , XRT_INPUT_NAME(0x0E09, BOOLEAN)) \
1275 _(XRT_INPUT_TOUCH_PLUS_SQUEEZE_VALUE , XRT_INPUT_NAME(0x0E0A, VEC1_ZERO_TO_ONE)) \
1276 _(XRT_INPUT_TOUCH_PLUS_TRIGGER_TOUCH , XRT_INPUT_NAME(0x0E0B, BOOLEAN)) \
1277 _(XRT_INPUT_TOUCH_PLUS_TRIGGER_PROXIMITY , XRT_INPUT_NAME(0x0E0C, BOOLEAN)) \
1278 _(XRT_INPUT_TOUCH_PLUS_TRIGGER_VALUE , XRT_INPUT_NAME(0x0E0D, VEC1_ZERO_TO_ONE)) \
1279 _(XRT_INPUT_TOUCH_PLUS_TRIGGER_FORCE , XRT_INPUT_NAME(0x0E0E, VEC1_ZERO_TO_ONE)) \
1280 _(XRT_INPUT_TOUCH_PLUS_THUMBSTICK_CLICK , XRT_INPUT_NAME(0x0E0F, BOOLEAN)) \
1281 _(XRT_INPUT_TOUCH_PLUS_THUMBSTICK_TOUCH , XRT_INPUT_NAME(0x0E10, BOOLEAN)) \
1282 _(XRT_INPUT_TOUCH_PLUS_THUMBSTICK , XRT_INPUT_NAME(0x0E11, VEC2_MINUS_ONE_TO_ONE)) \
1283 _(XRT_INPUT_TOUCH_PLUS_THUMBREST_TOUCH , XRT_INPUT_NAME(0x0E12, BOOLEAN)) \
1284 _(XRT_INPUT_TOUCH_PLUS_GRIP_POSE , XRT_INPUT_NAME(0x0E13, POSE)) \
1285 _(XRT_INPUT_TOUCH_PLUS_AIM_POSE , XRT_INPUT_NAME(0x0E14, POSE)) \
1286 _(XRT_INPUT_TOUCH_PLUS_THUMB_PROXIMITY , XRT_INPUT_NAME(0x0E15, BOOLEAN)) \
1287 _(XRT_INPUT_TOUCH_PLUS_TRIGGER_CURL , XRT_INPUT_NAME(0x0E16, VEC1_ZERO_TO_ONE)) \
1288 _(XRT_INPUT_TOUCH_PLUS_TRIGGER_SLIDE , XRT_INPUT_NAME(0x0E17, VEC1_ZERO_TO_ONE))
1289
1290// clang-format on
1291
1292
1293/*!
1294 * Every internal input source known to monado with a baked in type.
1295 * Values are maintained in XRT_INPUT_LIST.
1296 *
1297 * @see xrt_input_type
1298 * @ingroup xrt_iface
1299 */
1301{
1302#define XRT_INPUT_LIST_TO_NAME_VALUE(NAME, VALUE) NAME = VALUE,
1303
1304 XRT_INPUT_LIST(XRT_INPUT_LIST_TO_NAME_VALUE)
1305
1306#undef XRT_INPUT_LIST_TO_NAME_VALUE
1307};
1308
1309/*!
1310 * Number of joints in a hand. Corresponds to XR_HAND_JOINT_COUNT_EXT.
1311 *
1312 * @see xrt_hand_joint
1313 * @ingroup xrt_iface
1314 */
1315#define XRT_HAND_JOINT_COUNT 26
1316
1317/*!
1318 * Number of joints in a hand. Corresponds to XrHandJointEXT.
1319 *
1320 * @ingroup xrt_iface
1321 */
1322enum xrt_hand_joint
1323{
1324 XRT_HAND_JOINT_PALM = 0,
1325 XRT_HAND_JOINT_WRIST = 1,
1326 XRT_HAND_JOINT_THUMB_METACARPAL = 2,
1327 XRT_HAND_JOINT_THUMB_PROXIMAL = 3,
1328 XRT_HAND_JOINT_THUMB_DISTAL = 4,
1329 XRT_HAND_JOINT_THUMB_TIP = 5,
1330 XRT_HAND_JOINT_INDEX_METACARPAL = 6,
1331 XRT_HAND_JOINT_INDEX_PROXIMAL = 7,
1332 XRT_HAND_JOINT_INDEX_INTERMEDIATE = 8,
1333 XRT_HAND_JOINT_INDEX_DISTAL = 9,
1334 XRT_HAND_JOINT_INDEX_TIP = 10,
1335 XRT_HAND_JOINT_MIDDLE_METACARPAL = 11,
1336 XRT_HAND_JOINT_MIDDLE_PROXIMAL = 12,
1337 XRT_HAND_JOINT_MIDDLE_INTERMEDIATE = 13,
1338 XRT_HAND_JOINT_MIDDLE_DISTAL = 14,
1339 XRT_HAND_JOINT_MIDDLE_TIP = 15,
1340 XRT_HAND_JOINT_RING_METACARPAL = 16,
1341 XRT_HAND_JOINT_RING_PROXIMAL = 17,
1342 XRT_HAND_JOINT_RING_INTERMEDIATE = 18,
1343 XRT_HAND_JOINT_RING_DISTAL = 19,
1344 XRT_HAND_JOINT_RING_TIP = 20,
1345 XRT_HAND_JOINT_LITTLE_METACARPAL = 21,
1346 XRT_HAND_JOINT_LITTLE_PROXIMAL = 22,
1347 XRT_HAND_JOINT_LITTLE_INTERMEDIATE = 23,
1348 XRT_HAND_JOINT_LITTLE_DISTAL = 24,
1349 XRT_HAND_JOINT_LITTLE_TIP = 25,
1350 XRT_HAND_JOINT_MAX_ENUM = 0x7FFFFFFF
1351};
1352
1353/*!
1354 * Enumeration for left and right hand.
1355 *
1356 * @ingroup xrt_iface
1357 */
1358enum xrt_hand
1359{
1360 XRT_HAND_LEFT = 0,
1361 XRT_HAND_RIGHT = 1,
1362};
1363
1364/*!
1365 * Location of a single hand joint. Corresponds to XrHandJointLocationEXT.
1366 *
1367 * @ingroup xrt_iface
1368 */
1370{
1371 struct xrt_space_relation relation;
1372 float radius;
1373};
1374
1375/*!
1376 * Number of fingers on a hand.
1377 *
1378 * @ingroup xrt_iface
1379 */
1380#define XRT_FINGER_COUNT 5
1381
1382/*!
1383 * Names for fingers on a hand.
1384 *
1385 * @ingroup xrt_iface
1386 */
1387enum xrt_finger
1388{
1389 XRT_FINGER_LITTLE = 0,
1390 XRT_FINGER_RING,
1391 XRT_FINGER_MIDDLE,
1392 XRT_FINGER_INDEX,
1393 XRT_FINGER_THUMB
1394};
1395
1396/*!
1397 * Joint set type used for hand tracking. Corresponds to XrHandJointSetEXT.
1398 *
1399 * @ingroup xrt_iface
1400 */
1401struct xrt_hand_joint_set
1402{
1403 union {
1404 struct xrt_hand_joint_value hand_joint_set_default[XRT_HAND_JOINT_COUNT];
1405 } values;
1406
1407 // in driver global space, without tracking_origin offset
1408 struct xrt_space_relation hand_pose;
1409 bool is_active;
1410};
1411
1412/*!
1413 * A union of all input types.
1414 *
1415 * @see xrt_input_type
1416 * @ingroup xrt_iface math
1417 */
1418union xrt_input_value {
1419 struct xrt_vec1 vec1;
1420 struct xrt_vec2 vec2;
1421 bool boolean;
1422};
1423
1424/*!
1425 * The number of bits reserved for the input type in @ref xrt_output_name
1426 * @see xrt_output_type
1427 * @ingroup xrt_iface
1428 */
1429#define XRT_OUTPUT_TYPE_BITWIDTH 8u
1430
1431/*!
1432 * The mask associated with @ref XRT_OUTPUT_TYPE_BITWIDTH
1433 * @see xrt_output_type
1434 * @ingroup xrt_iface
1435 */
1436#define XRT_OUTPUT_TYPE_BITMASK 0xffu
1437
1438/*!
1439 * Base type of this output.
1440 *
1441 * @ingroup xrt_iface
1442 */
1443enum xrt_output_type
1444{
1445 // clang-format off
1446 XRT_OUTPUT_TYPE_VIBRATION = 0x00,
1447 XRT_OUTPUT_TYPE_FORCE_FEEDBACK = 0x01,
1448 // clang-format on
1449};
1450
1451#define XRT_OUTPUT_NAME(id, type) ((UINT32_C(id) << XRT_OUTPUT_TYPE_BITWIDTH) | (uint32_t)XRT_OUTPUT_TYPE_##type)
1452
1453enum xrt_face_expression2_fb
1454{
1455 XRT_FACE_EXPRESSION2_BROW_LOWERER_L_FB = 0,
1456 XRT_FACE_EXPRESSION2_BROW_LOWERER_R_FB = 1,
1457 XRT_FACE_EXPRESSION2_CHEEK_PUFF_L_FB = 2,
1458 XRT_FACE_EXPRESSION2_CHEEK_PUFF_R_FB = 3,
1459 XRT_FACE_EXPRESSION2_CHEEK_RAISER_L_FB = 4,
1460 XRT_FACE_EXPRESSION2_CHEEK_RAISER_R_FB = 5,
1461 XRT_FACE_EXPRESSION2_CHEEK_SUCK_L_FB = 6,
1462 XRT_FACE_EXPRESSION2_CHEEK_SUCK_R_FB = 7,
1463 XRT_FACE_EXPRESSION2_CHIN_RAISER_B_FB = 8,
1464 XRT_FACE_EXPRESSION2_CHIN_RAISER_T_FB = 9,
1465 XRT_FACE_EXPRESSION2_DIMPLER_L_FB = 10,
1466 XRT_FACE_EXPRESSION2_DIMPLER_R_FB = 11,
1467 XRT_FACE_EXPRESSION2_EYES_CLOSED_L_FB = 12,
1468 XRT_FACE_EXPRESSION2_EYES_CLOSED_R_FB = 13,
1469 XRT_FACE_EXPRESSION2_EYES_LOOK_DOWN_L_FB = 14,
1470 XRT_FACE_EXPRESSION2_EYES_LOOK_DOWN_R_FB = 15,
1471 XRT_FACE_EXPRESSION2_EYES_LOOK_LEFT_L_FB = 16,
1472 XRT_FACE_EXPRESSION2_EYES_LOOK_LEFT_R_FB = 17,
1473 XRT_FACE_EXPRESSION2_EYES_LOOK_RIGHT_L_FB = 18,
1474 XRT_FACE_EXPRESSION2_EYES_LOOK_RIGHT_R_FB = 19,
1475 XRT_FACE_EXPRESSION2_EYES_LOOK_UP_L_FB = 20,
1476 XRT_FACE_EXPRESSION2_EYES_LOOK_UP_R_FB = 21,
1477 XRT_FACE_EXPRESSION2_INNER_BROW_RAISER_L_FB = 22,
1478 XRT_FACE_EXPRESSION2_INNER_BROW_RAISER_R_FB = 23,
1479 XRT_FACE_EXPRESSION2_JAW_DROP_FB = 24,
1480 XRT_FACE_EXPRESSION2_JAW_SIDEWAYS_LEFT_FB = 25,
1481 XRT_FACE_EXPRESSION2_JAW_SIDEWAYS_RIGHT_FB = 26,
1482 XRT_FACE_EXPRESSION2_JAW_THRUST_FB = 27,
1483 XRT_FACE_EXPRESSION2_LID_TIGHTENER_L_FB = 28,
1484 XRT_FACE_EXPRESSION2_LID_TIGHTENER_R_FB = 29,
1485 XRT_FACE_EXPRESSION2_LIP_CORNER_DEPRESSOR_L_FB = 30,
1486 XRT_FACE_EXPRESSION2_LIP_CORNER_DEPRESSOR_R_FB = 31,
1487 XRT_FACE_EXPRESSION2_LIP_CORNER_PULLER_L_FB = 32,
1488 XRT_FACE_EXPRESSION2_LIP_CORNER_PULLER_R_FB = 33,
1489 XRT_FACE_EXPRESSION2_LIP_FUNNELER_LB_FB = 34,
1490 XRT_FACE_EXPRESSION2_LIP_FUNNELER_LT_FB = 35,
1491 XRT_FACE_EXPRESSION2_LIP_FUNNELER_RB_FB = 36,
1492 XRT_FACE_EXPRESSION2_LIP_FUNNELER_RT_FB = 37,
1493 XRT_FACE_EXPRESSION2_LIP_PRESSOR_L_FB = 38,
1494 XRT_FACE_EXPRESSION2_LIP_PRESSOR_R_FB = 39,
1495 XRT_FACE_EXPRESSION2_LIP_PUCKER_L_FB = 40,
1496 XRT_FACE_EXPRESSION2_LIP_PUCKER_R_FB = 41,
1497 XRT_FACE_EXPRESSION2_LIP_STRETCHER_L_FB = 42,
1498 XRT_FACE_EXPRESSION2_LIP_STRETCHER_R_FB = 43,
1499 XRT_FACE_EXPRESSION2_LIP_SUCK_LB_FB = 44,
1500 XRT_FACE_EXPRESSION2_LIP_SUCK_LT_FB = 45,
1501 XRT_FACE_EXPRESSION2_LIP_SUCK_RB_FB = 46,
1502 XRT_FACE_EXPRESSION2_LIP_SUCK_RT_FB = 47,
1503 XRT_FACE_EXPRESSION2_LIP_TIGHTENER_L_FB = 48,
1504 XRT_FACE_EXPRESSION2_LIP_TIGHTENER_R_FB = 49,
1505 XRT_FACE_EXPRESSION2_LIPS_TOWARD_FB = 50,
1506 XRT_FACE_EXPRESSION2_LOWER_LIP_DEPRESSOR_L_FB = 51,
1507 XRT_FACE_EXPRESSION2_LOWER_LIP_DEPRESSOR_R_FB = 52,
1508 XRT_FACE_EXPRESSION2_MOUTH_LEFT_FB = 53,
1509 XRT_FACE_EXPRESSION2_MOUTH_RIGHT_FB = 54,
1510 XRT_FACE_EXPRESSION2_NOSE_WRINKLER_L_FB = 55,
1511 XRT_FACE_EXPRESSION2_NOSE_WRINKLER_R_FB = 56,
1512 XRT_FACE_EXPRESSION2_OUTER_BROW_RAISER_L_FB = 57,
1513 XRT_FACE_EXPRESSION2_OUTER_BROW_RAISER_R_FB = 58,
1514 XRT_FACE_EXPRESSION2_UPPER_LID_RAISER_L_FB = 59,
1515 XRT_FACE_EXPRESSION2_UPPER_LID_RAISER_R_FB = 60,
1516 XRT_FACE_EXPRESSION2_UPPER_LIP_RAISER_L_FB = 61,
1517 XRT_FACE_EXPRESSION2_UPPER_LIP_RAISER_R_FB = 62,
1518 XRT_FACE_EXPRESSION2_TONGUE_TIP_INTERDENTAL_FB = 63,
1519 XRT_FACE_EXPRESSION2_TONGUE_TIP_ALVEOLAR_FB = 64,
1520 XRT_FACE_EXPRESSION2_TONGUE_FRONT_DORSAL_PALATE_FB = 65,
1521 XRT_FACE_EXPRESSION2_TONGUE_MID_DORSAL_PALATE_FB = 66,
1522 XRT_FACE_EXPRESSION2_TONGUE_BACK_DORSAL_VELAR_FB = 67,
1523 XRT_FACE_EXPRESSION2_TONGUE_OUT_FB = 68,
1524 XRT_FACE_EXPRESSION2_TONGUE_RETREAT_FB = 69,
1525 XRT_FACE_EXPRESSION2_COUNT_FB = 70,
1526 XRT_FACE_EXPRESSION_2FB_MAX_ENUM_FB = 0x7FFFFFFF
1527};
1528
1529enum xrt_face_confidence2_fb
1530{
1531 XRT_FACE_CONFIDENCE2_LOWER_FACE_FB = 0,
1532 XRT_FACE_CONFIDENCE2_UPPER_FACE_FB = 1,
1533 XRT_FACE_CONFIDENCE2_COUNT_FB = 2,
1534 XRT_FACE_CONFIDENCE_2FB_MAX_ENUM_FB = 0x7FFFFFFF
1535};
1536
1537enum xrt_face_expression_set2_fb
1538{
1539 XRT_FACE_EXPRESSION_SET2_DEFAULT_FB = 0,
1540 XRT_FACE_EXPRESSION_SET_2FB_MAX_ENUM_FB = 0x7FFFFFFF
1541};
1542
1543enum xrt_face_tracking_data_source2_fb
1544{
1545 XRT_FACE_TRACKING_DATA_SOURCE2_VISUAL_FB = 0,
1546 XRT_FACE_TRACKING_DATA_SOURCE2_AUDIO_FB = 1,
1547 XRT_FACE_TRACKING_DATA_SOURCE_2FB_MAX_ENUM_FB = 0x7FFFFFFF
1548};
1549
1550enum xrt_eye_expression_htc
1551{
1552 XRT_EYE_EXPRESSION_LEFT_BLINK_HTC = 0,
1553 XRT_EYE_EXPRESSION_LEFT_WIDE_HTC = 1,
1554 XRT_EYE_EXPRESSION_RIGHT_BLINK_HTC = 2,
1555 XRT_EYE_EXPRESSION_RIGHT_WIDE_HTC = 3,
1556 XRT_EYE_EXPRESSION_LEFT_SQUEEZE_HTC = 4,
1557 XRT_EYE_EXPRESSION_RIGHT_SQUEEZE_HTC = 5,
1558 XRT_EYE_EXPRESSION_LEFT_DOWN_HTC = 6,
1559 XRT_EYE_EXPRESSION_RIGHT_DOWN_HTC = 7,
1560 XRT_EYE_EXPRESSION_LEFT_OUT_HTC = 8,
1561 XRT_EYE_EXPRESSION_RIGHT_IN_HTC = 9,
1562 XRT_EYE_EXPRESSION_LEFT_IN_HTC = 10,
1563 XRT_EYE_EXPRESSION_RIGHT_OUT_HTC = 11,
1564 XRT_EYE_EXPRESSION_LEFT_UP_HTC = 12,
1565 XRT_EYE_EXPRESSION_RIGHT_UP_HTC = 13
1566};
1567
1568enum xrt_lip_expression_htc
1569{
1570 XRT_LIP_EXPRESSION_JAW_RIGHT_HTC = 0,
1571 XRT_LIP_EXPRESSION_JAW_LEFT_HTC = 1,
1572 XRT_LIP_EXPRESSION_JAW_FORWARD_HTC = 2,
1573 XRT_LIP_EXPRESSION_JAW_OPEN_HTC = 3,
1574 XRT_LIP_EXPRESSION_MOUTH_APE_SHAPE_HTC = 4,
1575 XRT_LIP_EXPRESSION_MOUTH_UPPER_RIGHT_HTC = 5,
1576 XRT_LIP_EXPRESSION_MOUTH_UPPER_LEFT_HTC = 6,
1577 XRT_LIP_EXPRESSION_MOUTH_LOWER_RIGHT_HTC = 7,
1578 XRT_LIP_EXPRESSION_MOUTH_LOWER_LEFT_HTC = 8,
1579 XRT_LIP_EXPRESSION_MOUTH_UPPER_OVERTURN_HTC = 9,
1580 XRT_LIP_EXPRESSION_MOUTH_LOWER_OVERTURN_HTC = 10,
1581 XRT_LIP_EXPRESSION_MOUTH_POUT_HTC = 11,
1582 XRT_LIP_EXPRESSION_MOUTH_SMILE_RIGHT_HTC = 12,
1583 XRT_LIP_EXPRESSION_MOUTH_SMILE_LEFT_HTC = 13,
1584 XRT_LIP_EXPRESSION_MOUTH_SAD_RIGHT_HTC = 14,
1585 XRT_LIP_EXPRESSION_MOUTH_SAD_LEFT_HTC = 15,
1586 XRT_LIP_EXPRESSION_CHEEK_PUFF_RIGHT_HTC = 16,
1587 XRT_LIP_EXPRESSION_CHEEK_PUFF_LEFT_HTC = 17,
1588 XRT_LIP_EXPRESSION_CHEEK_SUCK_HTC = 18,
1589 XRT_LIP_EXPRESSION_MOUTH_UPPER_UPRIGHT_HTC = 19,
1590 XRT_LIP_EXPRESSION_MOUTH_UPPER_UPLEFT_HTC = 20,
1591 XRT_LIP_EXPRESSION_MOUTH_LOWER_DOWNRIGHT_HTC = 21,
1592 XRT_LIP_EXPRESSION_MOUTH_LOWER_DOWNLEFT_HTC = 22,
1593 XRT_LIP_EXPRESSION_MOUTH_UPPER_INSIDE_HTC = 23,
1594 XRT_LIP_EXPRESSION_MOUTH_LOWER_INSIDE_HTC = 24,
1595 XRT_LIP_EXPRESSION_MOUTH_LOWER_OVERLAY_HTC = 25,
1596 XRT_LIP_EXPRESSION_TONGUE_LONGSTEP1_HTC = 26,
1597 XRT_LIP_EXPRESSION_TONGUE_LEFT_HTC = 27,
1598 XRT_LIP_EXPRESSION_TONGUE_RIGHT_HTC = 28,
1599 XRT_LIP_EXPRESSION_TONGUE_UP_HTC = 29,
1600 XRT_LIP_EXPRESSION_TONGUE_DOWN_HTC = 30,
1601 XRT_LIP_EXPRESSION_TONGUE_ROLL_HTC = 31,
1602 XRT_LIP_EXPRESSION_TONGUE_LONGSTEP2_HTC = 32,
1603 XRT_LIP_EXPRESSION_TONGUE_UPRIGHT_MORPH_HTC = 33,
1604 XRT_LIP_EXPRESSION_TONGUE_UPLEFT_MORPH_HTC = 34,
1605 XRT_LIP_EXPRESSION_TONGUE_DOWNRIGHT_MORPH_HTC = 35,
1606 XRT_LIP_EXPRESSION_TONGUE_DOWNLEFT_MORPH_HTC = 36
1607};
1608
1609enum xrt_facial_tracking_type_htc
1610{
1611 XRT_FACIAL_TRACKING_TYPE_EYE_DEFAULT_HTC = 1,
1612 XRT_FACIAL_TRACKING_TYPE_LIP_DEFAULT_HTC = 2
1613};
1614
1615#define XRT_FACIAL_EXPRESSION_EYE_COUNT_HTC 14
1616#define XRT_FACIAL_EXPRESSION_LIP_COUNT_HTC 37
1617
1619{
1620 int64_t sample_time_ns;
1621 bool is_active;
1623
1625{
1627 // ordered by xrt_eye_expression_htc
1628 float expression_weights[XRT_FACIAL_EXPRESSION_EYE_COUNT_HTC];
1630
1632{
1634 // ordered by xrt_lip_expression_htc
1635 float expression_weights[XRT_FACIAL_EXPRESSION_LIP_COUNT_HTC];
1637
1639{
1640 float weights[XRT_FACE_EXPRESSION2_COUNT_FB];
1641 float confidences[XRT_FACE_CONFIDENCE2_COUNT_FB];
1642
1643 enum xrt_face_tracking_data_source2_fb data_source;
1644 uint64_t sample_time_ns;
1645
1646 bool is_valid;
1647 bool is_eye_following_blendshapes_valid;
1649
1651{
1652 union {
1653 struct xrt_facial_base_expression_set_htc base_expression_set_htc;
1654 struct xrt_facial_eye_expression_set_htc eye_expression_set_htc;
1655 struct xrt_facial_lip_expression_set_htc lip_expression_set_htc;
1656 struct xrt_facial_expression_set2_fb face_expression_set2_fb;
1657 };
1658};
1659
1660// XR_FB_body_tracking
1661enum xrt_body_joint_fb
1662{
1663 XRT_BODY_JOINT_ROOT_FB = 0,
1664 XRT_BODY_JOINT_HIPS_FB = 1,
1665 XRT_BODY_JOINT_SPINE_LOWER_FB = 2,
1666 XRT_BODY_JOINT_SPINE_MIDDLE_FB = 3,
1667 XRT_BODY_JOINT_SPINE_UPPER_FB = 4,
1668 XRT_BODY_JOINT_CHEST_FB = 5,
1669 XRT_BODY_JOINT_NECK_FB = 6,
1670 XRT_BODY_JOINT_HEAD_FB = 7,
1671 XRT_BODY_JOINT_LEFT_SHOULDER_FB = 8,
1672 XRT_BODY_JOINT_LEFT_SCAPULA_FB = 9,
1673 XRT_BODY_JOINT_LEFT_ARM_UPPER_FB = 10,
1674 XRT_BODY_JOINT_LEFT_ARM_LOWER_FB = 11,
1675 XRT_BODY_JOINT_LEFT_HAND_WRIST_TWIST_FB = 12,
1676 XRT_BODY_JOINT_RIGHT_SHOULDER_FB = 13,
1677 XRT_BODY_JOINT_RIGHT_SCAPULA_FB = 14,
1678 XRT_BODY_JOINT_RIGHT_ARM_UPPER_FB = 15,
1679 XRT_BODY_JOINT_RIGHT_ARM_LOWER_FB = 16,
1680 XRT_BODY_JOINT_RIGHT_HAND_WRIST_TWIST_FB = 17,
1681 XRT_BODY_JOINT_LEFT_HAND_PALM_FB = 18,
1682 XRT_BODY_JOINT_LEFT_HAND_WRIST_FB = 19,
1683 XRT_BODY_JOINT_LEFT_HAND_THUMB_METACARPAL_FB = 20,
1684 XRT_BODY_JOINT_LEFT_HAND_THUMB_PROXIMAL_FB = 21,
1685 XRT_BODY_JOINT_LEFT_HAND_THUMB_DISTAL_FB = 22,
1686 XRT_BODY_JOINT_LEFT_HAND_THUMB_TIP_FB = 23,
1687 XRT_BODY_JOINT_LEFT_HAND_INDEX_METACARPAL_FB = 24,
1688 XRT_BODY_JOINT_LEFT_HAND_INDEX_PROXIMAL_FB = 25,
1689 XRT_BODY_JOINT_LEFT_HAND_INDEX_INTERMEDIATE_FB = 26,
1690 XRT_BODY_JOINT_LEFT_HAND_INDEX_DISTAL_FB = 27,
1691 XRT_BODY_JOINT_LEFT_HAND_INDEX_TIP_FB = 28,
1692 XRT_BODY_JOINT_LEFT_HAND_MIDDLE_METACARPAL_FB = 29,
1693 XRT_BODY_JOINT_LEFT_HAND_MIDDLE_PROXIMAL_FB = 30,
1694 XRT_BODY_JOINT_LEFT_HAND_MIDDLE_INTERMEDIATE_FB = 31,
1695 XRT_BODY_JOINT_LEFT_HAND_MIDDLE_DISTAL_FB = 32,
1696 XRT_BODY_JOINT_LEFT_HAND_MIDDLE_TIP_FB = 33,
1697 XRT_BODY_JOINT_LEFT_HAND_RING_METACARPAL_FB = 34,
1698 XRT_BODY_JOINT_LEFT_HAND_RING_PROXIMAL_FB = 35,
1699 XRT_BODY_JOINT_LEFT_HAND_RING_INTERMEDIATE_FB = 36,
1700 XRT_BODY_JOINT_LEFT_HAND_RING_DISTAL_FB = 37,
1701 XRT_BODY_JOINT_LEFT_HAND_RING_TIP_FB = 38,
1702 XRT_BODY_JOINT_LEFT_HAND_LITTLE_METACARPAL_FB = 39,
1703 XRT_BODY_JOINT_LEFT_HAND_LITTLE_PROXIMAL_FB = 40,
1704 XRT_BODY_JOINT_LEFT_HAND_LITTLE_INTERMEDIATE_FB = 41,
1705 XRT_BODY_JOINT_LEFT_HAND_LITTLE_DISTAL_FB = 42,
1706 XRT_BODY_JOINT_LEFT_HAND_LITTLE_TIP_FB = 43,
1707 XRT_BODY_JOINT_RIGHT_HAND_PALM_FB = 44,
1708 XRT_BODY_JOINT_RIGHT_HAND_WRIST_FB = 45,
1709 XRT_BODY_JOINT_RIGHT_HAND_THUMB_METACARPAL_FB = 46,
1710 XRT_BODY_JOINT_RIGHT_HAND_THUMB_PROXIMAL_FB = 47,
1711 XRT_BODY_JOINT_RIGHT_HAND_THUMB_DISTAL_FB = 48,
1712 XRT_BODY_JOINT_RIGHT_HAND_THUMB_TIP_FB = 49,
1713 XRT_BODY_JOINT_RIGHT_HAND_INDEX_METACARPAL_FB = 50,
1714 XRT_BODY_JOINT_RIGHT_HAND_INDEX_PROXIMAL_FB = 51,
1715 XRT_BODY_JOINT_RIGHT_HAND_INDEX_INTERMEDIATE_FB = 52,
1716 XRT_BODY_JOINT_RIGHT_HAND_INDEX_DISTAL_FB = 53,
1717 XRT_BODY_JOINT_RIGHT_HAND_INDEX_TIP_FB = 54,
1718 XRT_BODY_JOINT_RIGHT_HAND_MIDDLE_METACARPAL_FB = 55,
1719 XRT_BODY_JOINT_RIGHT_HAND_MIDDLE_PROXIMAL_FB = 56,
1720 XRT_BODY_JOINT_RIGHT_HAND_MIDDLE_INTERMEDIATE_FB = 57,
1721 XRT_BODY_JOINT_RIGHT_HAND_MIDDLE_DISTAL_FB = 58,
1722 XRT_BODY_JOINT_RIGHT_HAND_MIDDLE_TIP_FB = 59,
1723 XRT_BODY_JOINT_RIGHT_HAND_RING_METACARPAL_FB = 60,
1724 XRT_BODY_JOINT_RIGHT_HAND_RING_PROXIMAL_FB = 61,
1725 XRT_BODY_JOINT_RIGHT_HAND_RING_INTERMEDIATE_FB = 62,
1726 XRT_BODY_JOINT_RIGHT_HAND_RING_DISTAL_FB = 63,
1727 XRT_BODY_JOINT_RIGHT_HAND_RING_TIP_FB = 64,
1728 XRT_BODY_JOINT_RIGHT_HAND_LITTLE_METACARPAL_FB = 65,
1729 XRT_BODY_JOINT_RIGHT_HAND_LITTLE_PROXIMAL_FB = 66,
1730 XRT_BODY_JOINT_RIGHT_HAND_LITTLE_INTERMEDIATE_FB = 67,
1731 XRT_BODY_JOINT_RIGHT_HAND_LITTLE_DISTAL_FB = 68,
1732 XRT_BODY_JOINT_RIGHT_HAND_LITTLE_TIP_FB = 69,
1733 XRT_BODY_JOINT_COUNT_FB = 70,
1734 XRT_BODY_JOINT_NONE_FB = -1,
1735};
1736
1737enum xrt_body_joint_set_type_fb
1738{
1739 XRT_BODY_JOINT_SET_UNKNOWN = 0,
1740 // XR_FB_body_tracking
1741 XRT_BODY_JOINT_SET_DEFAULT_FB,
1742};
1744// XR_FB_body_tracking
1746{
1747 struct xrt_pose pose;
1748 int32_t joint;
1749 int32_t parent_joint;
1750};
1752// XR_FB_body_tracking
1754{
1755 // ordered by xrt_body_joint_fb
1756 struct xrt_body_skeleton_joint_fb joints[XRT_BODY_JOINT_COUNT_FB];
1757};
1758
1759// structure is a container to represent the body skeleton in T-pose including the joint hierarchy,
1760// can have info such as skeleton scale and proportions
1761struct xrt_body_skeleton
1762{
1763 union {
1764 struct xrt_body_skeleton_fb body_skeleton_fb;
1765 };
1767
1769{
1770 struct xrt_space_relation relation;
1772
1774{
1775 int64_t sample_time_ns;
1776 float confidence;
1777 uint32_t skeleton_changed_count;
1778 bool is_active;
1779};
1781// XR_FB_body_tracking
1783{
1784 struct xrt_base_body_joint_set_meta base;
1785 // ordered by xrt_body_joint_fb
1786 struct xrt_body_joint_location_fb joint_locations[XRT_BODY_JOINT_COUNT_FB];
1788
1789struct xrt_body_joint_set
1790{
1791 union {
1792 struct xrt_base_body_joint_set_meta base_body_joint_set_meta;
1793 struct xrt_body_joint_set_fb body_joint_set_fb;
1794 };
1795 // in driver global space, without tracking_origin offset
1796 struct xrt_space_relation body_pose;
1797};
1798
1799/*!
1800 * Name of a output with a baked in type.
1801 *
1802 * @see xrt_output_type
1803 * @ingroup xrt_iface
1804 */
1805enum xrt_output_name
1806{
1807 // clang-format off
1808 XRT_OUTPUT_NAME_SIMPLE_VIBRATION = XRT_OUTPUT_NAME(0x0010, VIBRATION),
1809 XRT_OUTPUT_NAME_PSMV_RUMBLE_VIBRATION = XRT_OUTPUT_NAME(0x0020, VIBRATION),
1810 XRT_OUTPUT_NAME_INDEX_HAPTIC = XRT_OUTPUT_NAME(0x0030, VIBRATION),
1811 XRT_OUTPUT_NAME_VIVE_HAPTIC = XRT_OUTPUT_NAME(0x0040, VIBRATION),
1812 XRT_OUTPUT_NAME_WMR_HAPTIC = XRT_OUTPUT_NAME(0x0050, VIBRATION),
1813
1814 XRT_OUTPUT_NAME_XBOX_HAPTIC_LEFT = XRT_OUTPUT_NAME(0x0060, VIBRATION),
1815 XRT_OUTPUT_NAME_XBOX_HAPTIC_RIGHT = XRT_OUTPUT_NAME(0x0061, VIBRATION),
1816 XRT_OUTPUT_NAME_XBOX_HAPTIC_LEFT_TRIGGER = XRT_OUTPUT_NAME(0x0062, VIBRATION),
1817 XRT_OUTPUT_NAME_XBOX_HAPTIC_RIGHT_TRIGGER = XRT_OUTPUT_NAME(0x0063, VIBRATION),
1818
1819 XRT_OUTPUT_NAME_TOUCH_HAPTIC = XRT_OUTPUT_NAME(0x0070, VIBRATION),
1820
1821 XRT_OUTPUT_NAME_FORCE_FEEDBACK_LEFT = XRT_OUTPUT_NAME(0x0080, FORCE_FEEDBACK),
1822 XRT_OUTPUT_NAME_FORCE_FEEDBACK_RIGHT = XRT_OUTPUT_NAME(0x0081, FORCE_FEEDBACK),
1823
1824 XRT_OUTPUT_NAME_G2_CONTROLLER_HAPTIC = XRT_OUTPUT_NAME(0x0090, VIBRATION),
1825 XRT_OUTPUT_NAME_ODYSSEY_CONTROLLER_HAPTIC = XRT_OUTPUT_NAME(0x00A0, VIBRATION),
1826 XRT_OUTPUT_NAME_ML2_CONTROLLER_VIBRATION = XRT_OUTPUT_NAME(0x00B0, VIBRATION),
1827
1828 XRT_OUTPUT_NAME_PSSENSE_VIBRATION = XRT_OUTPUT_NAME(0x00C0, VIBRATION),
1829 XRT_OUTPUT_NAME_PSSENSE_TRIGGER_FEEDBACK = XRT_OUTPUT_NAME(0x00C1, FORCE_FEEDBACK),
1830
1831 XRT_OUTPUT_NAME_VIVE_TRACKER_HAPTIC = XRT_OUTPUT_NAME(0x00D0, VIBRATION),
1832
1833 XRT_OUTPUT_NAME_OPPO_MR_HAPTIC = XRT_OUTPUT_NAME(0x00E0, VIBRATION),
1834
1835 XRT_OUTPUT_NAME_PICO_NEO3_HAPTIC = XRT_OUTPUT_NAME(0x00F0, VIBRATION),
1836 XRT_OUTPUT_NAME_PICO4_HAPTIC = XRT_OUTPUT_NAME(0x0100, VIBRATION),
1837
1838 XRT_OUTPUT_NAME_VIVE_COSMOS_HAPTIC = XRT_OUTPUT_NAME(0x0200, VIBRATION),
1839 XRT_OUTPUT_NAME_VIVE_FOCUS3_HAPTIC = XRT_OUTPUT_NAME(0x0300, VIBRATION),
1840
1841 XRT_OUTPUT_NAME_TOUCH_PRO_HAPTIC = XRT_OUTPUT_NAME(0x0400, VIBRATION),
1842 XRT_OUTPUT_NAME_TOUCH_PRO_HAPTIC_TRIGGER = XRT_OUTPUT_NAME(0x0500, VIBRATION),
1843 XRT_OUTPUT_NAME_TOUCH_PRO_HAPTIC_THUMB = XRT_OUTPUT_NAME(0x0600, VIBRATION),
1844 XRT_OUTPUT_NAME_TOUCH_PLUS_HAPTIC = XRT_OUTPUT_NAME(0x0700, VIBRATION)
1845 // clang-format on
1846};
1847
1848/*!
1849 * Value used to indicate a haptic pulse of the minimal supported duration.
1850 *
1851 * @ingroup xrt_iface
1852 */
1853#define XRT_MIN_HAPTIC_DURATION -1
1854
1855/*!
1856 * Value used to indicate a haptic pulse of some runtime defined optimal
1857 * frequency.
1858 *
1859 * @ingroup xrt_iface
1861
1862#define XRT_FREQUENCY_UNSPECIFIED 0
1863
1864/*!
1865 * Value used as a timeout to indicate the timeout should never occur.
1866 *
1867 * @ingroup xrt_iface
1868 */
1869#define XRT_INFINITE_DURATION (0x7fffffffffffffffLL)
1870
1871enum xrt_force_feedback_location
1872{
1873 XRT_FORCE_FEEDBACK_LOCATION_LEFT_THUMB,
1874 XRT_FORCE_FEEDBACK_LOCATION_LEFT_INDEX,
1875 XRT_FORCE_FEEDBACK_LOCATION_LEFT_MIDDLE,
1876 XRT_FORCE_FEEDBACK_LOCATION_LEFT_RING,
1877 XRT_FORCE_FEEDBACK_LOCATION_LEFT_PINKY,
1879
1881{
1882 float value;
1883 enum xrt_force_feedback_location location;
1884};
1885
1886/*!
1887 * A union of all output types.
1888 *
1889 * @see xrt_output_type
1890 * @ingroup xrt_iface math
1891 */
1892union xrt_output_value {
1893 struct
1894 {
1895 float frequency;
1896 float amplitude;
1897 int64_t duration_ns;
1898 } vibration;
1899
1900 struct
1901 {
1902 struct xrt_output_force_feedback force_feedback[5];
1903 uint64_t force_feedback_location_count;
1904 } force_feedback;
1905};
1906
1907
1908/*
1909 *
1910 * Misc enums.
1911 *
1912 */
1913
1914/*!
1915 * What form factor is this device, mostly maps onto OpenXR's @p XrFormFactor.
1916 *
1917 * @ingroup xrt_iface
1918 */
1921 XRT_FORM_FACTOR_HMD, //!< Head mounted display.
1922 XRT_FORM_FACTOR_HANDHELD, //!< Handheld display.
1923};
1924
1925/*!
1926 * Domain type.
1927 * Use for performance level setting
1928 * Which hardware should be boost/decrease
1929 */
1930enum xrt_perf_domain
1931{
1932 XRT_PERF_DOMAIN_CPU = 1,
1933 XRT_PERF_DOMAIN_GPU = 2,
1934};
1935
1936enum xrt_perf_sub_domain
1937{
1938 XRT_PERF_SUB_DOMAIN_COMPOSITING = 1,
1939 XRT_PERF_SUB_DOMAIN_RENDERING = 2,
1940 XRT_PERF_SUB_DOMAIN_THERMAL = 3
1941};
1942
1943/*!
1944 * Performance level.
1945 */
1947{
1948 XRT_PERF_SET_LEVEL_POWER_SAVINGS = 0,
1949 XRT_PERF_SET_LEVEL_SUSTAINED_LOW = 25,
1950 XRT_PERF_SET_LEVEL_SUSTAINED_HIGH = 50,
1951 XRT_PERF_SET_LEVEL_BOOST = 75,
1952};
1953
1954/*!
1955 * Performance level.
1956 */
1958{
1959 XRT_PERF_NOTIFY_LEVEL_NORMAL = 0,
1960 XRT_PERF_NOTIFY_LEVEL_WARNING = 25,
1961 XRT_PERF_NOTIFY_LEVEL_IMPAIRED = 75,
1962};
1963
1964/*!
1965 * Visibility mask, mirror of XrVisibilityMaskKHR
1966 *
1967 * @ingroup xrt_iface
1968 */
1970{
1971 XRT_VISIBILITY_MASK_TYPE_HIDDEN_TRIANGLE_MESH = 1,
1972 XRT_VISIBILITY_MASK_TYPE_VISIBLE_TRIANGLE_MESH = 2,
1973 XRT_VISIBILITY_MASK_TYPE_LINE_LOOP = 3,
1974};
1975
1976
1977/*
1978 *
1979 * Inline functions
1980 *
1981 */
1982
1983/*!
1984 * Increment the reference, probably want @ref xrt_reference_inc_and_was_zero.
1985 *
1986 * @memberof xrt_reference
1987 * @ingroup xrt_iface
1989static inline void
1990xrt_reference_inc(struct xrt_reference *xref)
1991{
1992 xrt_atomic_s32_inc_return(&xref->count);
1993}
1994
1995/*!
1996 * Decrement the reference, probably want @ref xrt_reference_dec_and_is_zero.
1997 *
1998 * @memberof xrt_reference
1999 * @ingroup xrt_iface
2001static inline void
2002xrt_reference_dec(struct xrt_reference *xref)
2003{
2004 xrt_atomic_s32_dec_return(&xref->count);
2005}
2006
2007/*!
2008 * Increment the reference and return true if the value @p was zero.
2009 *
2010 * @memberof xrt_reference
2011 * @ingroup xrt_iface
2013XRT_CHECK_RESULT static inline bool
2015{
2016 int32_t count = xrt_atomic_s32_inc_return(&xref->count);
2017 return count == 1;
2018}
2019
2020/*!
2021 * Decrement the reference and return true if the value is now zero.
2022 *
2023 * @memberof xrt_reference
2024 * @ingroup xrt_iface
2026XRT_CHECK_RESULT static inline bool
2028{
2029 int32_t count = xrt_atomic_s32_dec_return(&xref->count);
2030 return count == 0;
2031}
2032
2033
2034#ifdef __cplusplus
2035}
2036#endif
xrt_input_type
Base type of this inputs.
Definition: xrt_defines.h:805
xrt_hand
Enumeration for left and right hand.
Definition: xrt_defines.h:1357
#define XRT_MATRIX_3X3_ELEMENTS
The number of values in xrt_matrix_3x3.
Definition: xrt_defines.h:525
xrt_stereo_format
What type of stereo format a frame has.
Definition: xrt_defines.h:203
xrt_visibility_mask_type
Visibility mask, mirror of XrVisibilityMaskKHR.
Definition: xrt_defines.h:1968
xrt_blend_mode
Blend mode that the device supports, exact mirror of XrEnvironmentBlendMode.
Definition: xrt_defines.h:109
static XRT_CHECK_RESULT bool xrt_reference_dec_and_is_zero(struct xrt_reference *xref)
Decrement the reference and return true if the value is now zero.
Definition: xrt_defines.h:2025
xrt_form_factor
What form factor is this device, mostly maps onto OpenXR's XrFormFactor.
Definition: xrt_defines.h:1918
xrt_input_name
Every internal input source known to monado with a baked in type.
Definition: xrt_defines.h:1301
xrt_output_type
Base type of this output.
Definition: xrt_defines.h:1442
static XRT_CHECK_RESULT bool xrt_reference_inc_and_was_zero(struct xrt_reference *xref)
Increment the reference and return true if the value was zero.
Definition: xrt_defines.h:2012
#define XRT_UUID_SIZE
Internal define for VK_UUID_SIZE and XR_UUID_SIZE_EXT.
Definition: xrt_defines.h:28
#define XRT_MATRIX_2X2_ELEMENTS
The number of values in xrt_matrix_2x2.
Definition: xrt_defines.h:498
static void xrt_reference_inc(struct xrt_reference *xref)
Increment the reference, probably want xrt_reference_inc_and_was_zero.
Definition: xrt_defines.h:1988
#define XRT_MATRIX_2X2_VECS
The number of 2d vectors in xrt_matrix_2x2.
Definition: xrt_defines.h:505
#define XRT_LUID_SIZE
Internal define for VK_LUID_SIZE.
Definition: xrt_defines.h:52
static void xrt_reference_dec(struct xrt_reference *xref)
Decrement the reference, probably want xrt_reference_dec_and_is_zero.
Definition: xrt_defines.h:2000
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:599
#define XRT_HAND_JOINT_COUNT
Number of joints in a hand.
Definition: xrt_defines.h:1313
xrt_output_name
Name of a output with a baked in type.
Definition: xrt_defines.h:1804
xrt_finger
Names for fingers on a hand.
Definition: xrt_defines.h:1386
xrt_hand_joint
Number of joints in a hand.
Definition: xrt_defines.h:1321
#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:552
xrt_space_relation_flags
Flags of which components of a xrt_space_relation is valid.
Definition: xrt_defines.h:629
xrt_device_type
How an xrt_device can be used.
Definition: xrt_defines.h:786
@ XRT_INPUT_TYPE_POSE
A tracked pose.
Definition: xrt_defines.h:818
@ XRT_INPUT_TYPE_VEC2_MINUS_ONE_TO_ONE
Vec2 input, components in [-1, 1].
Definition: xrt_defines.h:812
@ XRT_INPUT_TYPE_VEC3_MINUS_ONE_TO_ONE
Vec3 input, components in [-1, 1].
Definition: xrt_defines.h:814
@ XRT_INPUT_TYPE_FACE_TRACKING
A tracked face.
Definition: xrt_defines.h:822
@ XRT_INPUT_TYPE_BODY_TRACKING
A tracked body.
Definition: xrt_defines.h:824
@ XRT_INPUT_TYPE_HAND_TRACKING
A tracked hand.
Definition: xrt_defines.h:820
@ XRT_INPUT_TYPE_VEC1_MINUS_ONE_TO_ONE
Float input in [-1, 1].
Definition: xrt_defines.h:810
@ XRT_INPUT_TYPE_BOOLEAN
Boolean (digital, binary) input.
Definition: xrt_defines.h:816
@ XRT_INPUT_TYPE_VEC1_ZERO_TO_ONE
Float input in [0, 1].
Definition: xrt_defines.h:808
@ XRT_STEREO_FORMAT_OAU
Over & Under.
Definition: xrt_defines.h:207
@ XRT_STEREO_FORMAT_SBS
Side by side.
Definition: xrt_defines.h:205
@ XRT_STEREO_FORMAT_INTERLEAVED
Interleaved pixels.
Definition: xrt_defines.h:206
@ XRT_FORM_FACTOR_HANDHELD
Handheld display.
Definition: xrt_defines.h:1920
@ XRT_FORM_FACTOR_HMD
Head mounted display.
Definition: xrt_defines.h:1919
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:580
Definition: xrt_defines.h:1772
Definition: xrt_defines.h:1767
Definition: xrt_defines.h:1781
Definition: xrt_defines.h:1788
Definition: xrt_defines.h:1752
Definition: xrt_defines.h:1744
Definition: xrt_defines.h:1760
A 3 element colour with floating point channels.
Definition: xrt_defines.h:384
A 3 element colour with 8 bits per channel.
Definition: xrt_defines.h:359
A 4 element colour with floating point channels.
Definition: xrt_defines.h:396
A 4 element colour with 8 bits per channel.
Definition: xrt_defines.h:371
Definition: xrt_defines.h:1617
Definition: xrt_defines.h:1637
Definition: xrt_defines.h:1649
Definition: xrt_defines.h:1623
Definition: xrt_defines.h:1630
Describes a projection matrix fov.
Definition: xrt_defines.h:486
Joint set type used for hand tracking.
Definition: xrt_defines.h:1400
Location of a single hand joint.
Definition: xrt_defines.h:1368
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:79
To transport LUIDs between different APIs.
Definition: xrt_defines.h:60
A tightly packed 2x2 matrix of floats.
Definition: xrt_defines.h:513
A tightly packed 3x3 matrix of doubles.
Definition: xrt_defines.h:543
A tightly packed 3x3 matrix of floats.
Definition: xrt_defines.h:533
A tightly packed 4x4 matrix of double.
Definition: xrt_defines.h:570
A tightly packed 4x4 matrix of floats.
Definition: xrt_defines.h:560
Normalized image rectangle, coordinates and size in 0 .
Definition: xrt_defines.h:453
Image offset.
Definition: xrt_defines.h:420
Definition: xrt_defines.h:1879
A pose composed of a position and orientation.
Definition: xrt_defines.h:465
A quaternion with single floats.
Definition: xrt_defines.h:216
Image rectangle.
Definition: xrt_defines.h:443
Image rectangle.
Definition: xrt_defines.h:430
A base class for reference counted objects.
Definition: xrt_defines.h:96
A chain of space relations and their associated validity flags.
Definition: xrt_defines.h:695
#define XRT_RELATION_CHAIN_CAPACITY
The maximum number of steps that can be in a relation chain.
Definition: xrt_defines.h:685
Image size.
Definition: xrt_defines.h:409
A relation with two spaces, includes velocity and acceleration.
Definition: xrt_defines.h:657
To transport UUIDs between different APIs.
Definition: xrt_defines.h:36
Represents a uv triplet for distortion, basically just three xrt_vec2.
Definition: xrt_defines.h:261
A 1 element vector with single floats.
Definition: xrt_defines.h:240
A 2 element vector with 32 bit integers.
Definition: xrt_defines.h:348
A 2 element vector with single floats.
Definition: xrt_defines.h:250
A 3 element vector with single doubles.
Definition: xrt_defines.h:283
A 3 element vector with 32 bit integers.
Definition: xrt_defines.h:336
A 3 element vector with single floats.
Definition: xrt_defines.h:271
A union of all input types.
Definition: xrt_defines.h:1416
A union of all output types.
Definition: xrt_defines.h:1890
Header holding common defines.
xrt_perf_notify_level
Performance level.
Definition: xrt_defines.h:1956
xrt_distortion_model
Which distortion model does the device expose, used both as a bitfield and value.
Definition: xrt_defines.h:164
xrt_passthrough_purpose_flags
Specify the kind of passthrough behavior the layer provides.
Definition: xrt_defines.h:148
@ XRT_PASSTHROUGH_LAYER_PURPOSE_TRACKED_KEYBOARD_MASKED_HANDS
Provided by XR_FB_passthrough_keyboard_hands.
Definition: xrt_defines.h:156
@ XRT_PASSTHROUGH_LAYER_PURPOSE_RECONSTRUCTION
Fullscreen layer.
Definition: xrt_defines.h:150
@ XRT_PASSTHROUGH_LAYER_PURPOSE_TRACKED_KEYBOARD_HANDS
Provided by XR_FB_passthrough_keyboard_hands.
Definition: xrt_defines.h:154
@ XRT_PASSTHROUGH_LAYER_PURPOSE_PROJECTED
Projected layer.
Definition: xrt_defines.h:152
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:712
@ XRT_DEVICE_HTC_FACE_TRACKING
XR_HTC_facial_tracking.
Definition: xrt_defines.h:757
@ XRT_DEVICE_FB_BODY_TRACKING
XR_FB_body_tracking.
Definition: xrt_defines.h:760
@ XRT_DEVICE_FB_FACE_TRACKING2
XR_FB_face_tracking2.
Definition: xrt_defines.h:763
@ XRT_DEVICE_EXT_HAND_INTERACTION
XR_EXT_hand_interaction.
Definition: xrt_defines.h:754
xrt_perf_domain
Domain type.
Definition: xrt_defines.h:1929
xrt_passthrough_state
Specify additional state change behavior.
Definition: xrt_defines.h:133
@ XRT_PASSTHROUGH_STATE_CHANGED_NON_RECOVERABLE_ERROR_BIT
Non-recoverable error has occurred.
Definition: xrt_defines.h:137
@ XRT_PASSTHROUGH_STATE_CHANGED_RESTORED_ERROR_BIT
The runtime has recovered from a previous error and is functioning normally.
Definition: xrt_defines.h:141
@ XRT_PASSTHROUGH_STATE_CHANGED_REINIT_REQUIRED_BIT
Passthrough system requires reinitialization.
Definition: xrt_defines.h:135
@ XRT_PASSTHROUGH_STATE_CHANGED_RECOVERABLE_ERROR_BIT
A recoverable error has occurred.
Definition: xrt_defines.h:139
xrt_format
Common formats, use u_format_* functions to reason about them.
Definition: xrt_defines.h:176
xrt_passthrough_create_flags
Special flags for creating passthrough.
Definition: xrt_defines.h:122
@ XRT_PASSTHROUGH_LAYER_DEPTH
Our compositor just ignores this bit.
Definition: xrt_defines.h:126
@ XRT_PASSTHROUGH_IS_RUNNING_AT_CREATION
Start the passthrough on creation.
Definition: xrt_defines.h:124
xrt_perf_set_level
Performance level.
Definition: xrt_defines.h:1945
Internal result type for XRT.