105template <
class T, DeviceFunctions functions>
class DeviceBase
119 if constexpr (functions.hmd) {
120 xdev.get_view_poses = getViewPosesWrap;
121 xdev.is_form_factor_available = isFormFactorAvailableWrap;
124 if constexpr (functions.distortion) {
125 xdev.compute_distortion = computeDistortionWrap;
128 if constexpr (functions.visibility_mask) {
129 xdev.get_visibility_mask = getVisibilityMaskWrap;
132 if constexpr (functions.update_inputs) {
133 xdev.update_inputs = updateInputsWrap;
136 if constexpr (functions.output) {
137 xdev.set_output = setOutputWrap;
140 if constexpr (functions.output_limits) {
141 xdev.get_output_limits = getOutputLimitsWrap;
144 if constexpr (functions.hand_tracking) {
145 xdev.get_hand_tracking = getHandTrackingWrap;
148 if constexpr (functions.face_tracking) {
149 xdev.get_face_tracking = getFaceTrackingWrap;
152 if constexpr (functions.face_calibration_android) {
153 xdev.get_face_calibration_state_android = getFaceCalibrationStateAndroidWrap;
156 if constexpr (functions.body_tracking) {
157 xdev.get_body_skeleton = getBodySkeletonWrap;
158 xdev.get_body_joints = getBodyJointsWrap;
159 xdev.reset_body_tracking_calibration_meta = resetBodyTrackingCalibrationMetaWrap;
160 xdev.set_body_tracking_calibration_override_meta = setBodyTrackingCalibrationOverrideMetaWrap;
163 if constexpr (functions.plane_detection) {
164 xdev.begin_plane_detection_ext = beginPlaneDetectionExtWrap;
165 xdev.destroy_plane_detection_ext = destroyPlaneDetectionExtWrap;
166 xdev.get_plane_detection_state_ext = getPlaneDetectionStateExtWrap;
167 xdev.get_plane_detections_ext = getPlaneDetectionsExtWrap;
170 if constexpr (functions.presence) {
171 xdev.get_presence = getPresenceWrap;
174 if constexpr (functions.reference_space) {
175 xdev.ref_space_usage = refSpaceUsageWrap;
178 if constexpr (functions.battery) {
179 xdev.get_battery_status = getBatteryStatusWrap;
182 if constexpr (functions.brightness) {
183 xdev.get_brightness = getBrightnessWrap;
184 xdev.set_brightness = setBrightnessWrap;
187 if constexpr (functions.compositor_info) {
188 xdev.get_compositor_info = getCompositorInfoWrap;
191 if constexpr (functions.features) {
192 xdev.begin_feature = beginFeatureWrap;
193 xdev.end_feature = endFeatureWrap;
203 derived() const noexcept
205 return static_cast<const T &
>(*this);
211 return static_cast<T &
>(*this);
218 return &(
reinterpret_cast<const DeviceBase *
>(xdev)->derived());
225 return &(
reinterpret_cast<DeviceBase *
>(xdev)->derived());
254#define GET(xdev) (fromXDev(xdev)->derived())
257 updateInputsWrap(
struct xrt_device *xdev)
noexcept
259 return GET(xdev).updateInputs();
266 int64_t at_timestamp_ns,
269 return GET(xdev).getTrackedPose(name, at_timestamp_ns, out_relation);
276 int64_t desired_timestamp_ns,
278 int64_t *out_timestamp_ns)
noexcept
280 return GET(xdev).getHandTracking(name, desired_timestamp_ns, out_value, out_timestamp_ns);
287 int64_t at_timestamp_ns,
290 return GET(xdev).getFaceTracking(facial_expression_type, at_timestamp_ns, out_value);
295 getFaceCalibrationStateAndroidWrap(
struct xrt_device *xdev,
bool *out_face_is_calibrated)
noexcept
297 return GET(xdev).getFaceCalibrationStateAndroid(out_face_is_calibrated);
306 return GET(xdev).getBodySkeleton(body_tracking_type, out_value);
313 int64_t desired_timestamp_ns,
316 return GET(xdev).getBodyJoints(body_tracking_type, desired_timestamp_ns, out_value);
321 resetBodyTrackingCalibrationMetaWrap(
struct xrt_device *xdev)
noexcept
323 return GET(xdev).resetBodyTrackingCalibrationMeta();
328 setBodyTrackingCalibrationOverrideMetaWrap(
struct xrt_device *xdev,
float new_body_height)
noexcept
330 return GET(xdev).setBodyTrackingCalibrationOverrideMeta(new_body_height);
337 return GET(xdev).setOutput(name, value);
344 return GET(xdev).getOutputLimits(limits);
349 getPresenceWrap(
struct xrt_device *xdev,
bool *presence)
noexcept
351 return GET(xdev).getPresence(presence);
356 beginPlaneDetectionExtWrap(
struct xrt_device *xdev,
358 uint64_t plane_detection_id,
359 uint64_t *out_plane_detection_id)
noexcept
361 return GET(xdev).beginPlaneDetectionExt(begin_info, plane_detection_id, out_plane_detection_id);
366 destroyPlaneDetectionExtWrap(
struct xrt_device *xdev, uint64_t plane_detection_id)
noexcept
368 return GET(xdev).destroyPlaneDetectionExt(plane_detection_id);
373 getPlaneDetectionStateExtWrap(
struct xrt_device *xdev,
374 uint64_t plane_detection_id,
377 return GET(xdev).getPlaneDetectionStateExt(plane_detection_id, out_state);
382 getPlaneDetectionsExtWrap(
struct xrt_device *xdev,
383 uint64_t plane_detection_id,
386 return GET(xdev).getPlaneDetectionsExt(plane_detection_id, out_detections);
392 const struct xrt_vec3 *default_eye_relation,
393 int64_t at_timestamp_ns,
398 struct xrt_pose *out_poses)
noexcept
400 return GET(xdev).getViewPoses(default_eye_relation, at_timestamp_ns, view_type, view_count,
401 out_head_relation, out_fovs, out_poses);
406 computeDistortionWrap(
409 return GET(xdev).computeDistortion(view, u, v, out_result);
414 getVisibilityMaskWrap(
struct xrt_device *xdev,
419 return GET(xdev).getVisibilityMask(type, view_index, out_mask);
429 return GET(xdev).refSpaceUsage(type, name, used);
436 return GET(xdev).isFormFactorAvailable(form_factor);
438 G_CATCH_GUARDS_WITH_RETURN(
false)
441 getBatteryStatusWrap(struct
xrt_device *xdev,
bool *out_present,
bool *out_charging,
float *out_charge) noexcept
443 return GET(xdev).getBatteryStatus(out_present, out_charging, out_charge);
448 getBrightnessWrap(
struct xrt_device *xdev,
float *out_brightness)
noexcept
450 return GET(xdev).getBrightness(out_brightness);
455 setBrightnessWrap(
struct xrt_device *xdev,
float brightness,
bool relative)
noexcept
457 return GET(xdev).setBrightness(brightness, relative);
462 getCompositorInfoWrap(
struct xrt_device *xdev,
466 return GET(xdev).getCompositorInfo(mode, out_info);
473 return GET(xdev).beginFeature(type);
480 return GET(xdev).endFeature(type);
485 destroyDeviceWrap(
struct xrt_device *xdev)
noexcept
487 T::destroyDevice(xdev);
Helper wrapper for xrt_device, Monado has C style inheritance where the first field is the base class...
Definition: g_device.hpp:106
DeviceBase() noexcept
Fully resets and sets function pointers on xrt_device.
Definition: g_device.hpp:111
xrt_device * getXDev() noexcept
Gets the underlying xrt_device pointer.
Definition: g_device.hpp:237
static T * fromXDev(xrt_device *xdev) noexcept
Gets the pointer to the derived class from a xrt_device.
Definition: g_device.hpp:223
static const T * fromXDev(const xrt_device *xdev) noexcept
Gets the pointer to the derived class from a xrt_device.
Definition: g_device.hpp:216
~DeviceBase() noexcept=default
Destructor.
const xrt_device * getXDev() const noexcept
Gets the underlying xrt_device pointer.
Definition: g_device.hpp:230
Catch guards for glue classes.
void u_device_populate_function_pointers(struct xrt_device *xdev, u_device_get_tracked_pose_function_t get_tracked_pose_fn, u_device_destroy_function_t destroy_fn)
Populate the device's function pointers with default implementations.
Definition: u_device.c:595
xrt_visibility_mask_type
Visibility mask, mirror of XrVisibilityMaskKHR.
Definition: xrt_defines.h:2424
xrt_form_factor
What form factor is this device, mostly maps onto OpenXR's XrFormFactor.
Definition: xrt_defines.h:2365
xrt_input_name
Every internal input source known to monado with a baked in type.
Definition: xrt_defines.h:915
enum xrt_result xrt_result_t
Result type used across Monado.
xrt_reference_space_type
Type of a OpenXR mapped reference space, maps to the semantic spaces on the xrt_space_overseer struct...
Definition: xrt_defines.h:612
xrt_output_name
Name of a output with a baked in type.
Definition: xrt_defines.h:1582
xrt_plane_detector_state_ext
State of a plane detector, see xrt_device.
Definition: xrt_plane_detector.h:83
Selects which functions that the DeviceBase wrapper should set.
Definition: g_device.hpp:24
bool body_tracking
xrt_device::get_body_skeleton xrt_device::get_body_joints xrt_device::reset_body_tracking_calibration...
Definition: g_device.hpp:61
bool reference_space
xrt_device::ref_space_usage
Definition: g_device.hpp:75
bool plane_detection
xrt_device::begin_plane_detection_ext xrt_device::destroy_plane_detection_ext xrt_device::get_plane_d...
Definition: g_device.hpp:69
bool output_limits
xrt_device::get_output_limits
Definition: g_device.hpp:44
bool visibility_mask
xrt_device::get_visibility_mask
Definition: g_device.hpp:35
bool update_inputs
xrt_device::update_inputs
Definition: g_device.hpp:38
bool compositor_info
xrt_device::get_compositor_info
Definition: g_device.hpp:87
bool hmd
xrt_device::get_view_poses xrt_device::is_form_factor_available
Definition: g_device.hpp:29
bool output
xrt_device::set_output
Definition: g_device.hpp:41
bool battery
xrt_device::get_battery_status
Definition: g_device.hpp:78
bool brightness
xrt_device::get_brightness xrt_device::set_brightness
Definition: g_device.hpp:84
bool hand_tracking
xrt_device::get_hand_tracking
Definition: g_device.hpp:47
bool face_tracking
xrt_device::get_face_tracking
Definition: g_device.hpp:50
bool distortion
xrt_device::compute_distortion
Definition: g_device.hpp:32
bool features
xrt_device::begin_feature xrt_device::end_feature
Definition: g_device.hpp:93
bool face_calibration_android
xrt_device::get_face_calibration_state_android
Definition: g_device.hpp:53
bool presence
xrt_device::get_presence
Definition: g_device.hpp:72
Definition: xrt_defines.h:2258
Definition: xrt_defines.h:2158
Compositor information for a device.
Definition: xrt_device.h:88
Compositor mode information for a device.
Definition: xrt_device.h:104
A single HMD or input device.
Definition: xrt_device.h:310
Definition: xrt_defines.h:1934
Describes a projection matrix fov.
Definition: xrt_defines.h:499
Joint set type used for hand tracking.
Definition: xrt_defines.h:1491
Output limits of a particular device.
Definition: xrt_device.h:266
A union of all output types.
Definition: xrt_defines.h:2343
Each plane has n polygons; ultimately plane metadata from xrt_plane_detections_ext::locations and xrt...
Definition: xrt_plane_detector.h:172
A query for a plane.
Definition: xrt_plane_detector.h:97
A pose composed of a position and orientation.
Definition: xrt_defines.h:479
A relation with two spaces, includes velocity and acceleration.
Definition: xrt_defines.h:670
Represents a uv triplet for distortion, basically just three xrt_vec2.
Definition: xrt_defines.h:279
A 3 element vector with single floats.
Definition: xrt_defines.h:289
Visibility mask helper, the indices and vertices are tightly packed after this struct.
Definition: xrt_visibility_mask.h:26
Misc helpers for device drivers.
xrt_view_type
View type to be rendered to by the compositor.
Definition: xrt_defines.h:2374
Header defining an xrt display or controller device.
xrt_device_feature_type
Higher level features for devices.
Definition: xrt_device.h:254