2020-07-03 13:28:55 +00:00
|
|
|
// Copyright 2019-2020, Collabora, Ltd.
|
2019-03-18 05:52:32 +00:00
|
|
|
// SPDX-License-Identifier: BSL-1.0
|
|
|
|
/*!
|
|
|
|
* @file
|
|
|
|
* @brief Misc helpers for device drivers.
|
|
|
|
* @author Jakob Bornecrantz <jakob@collabora.com>
|
2019-04-06 11:28:56 +00:00
|
|
|
* @ingroup aux_util
|
2019-03-18 05:52:32 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include "xrt/xrt_compiler.h"
|
|
|
|
#include "xrt/xrt_device.h"
|
2019-05-09 10:54:48 +00:00
|
|
|
#include "xrt/xrt_tracking.h"
|
2019-03-18 05:52:32 +00:00
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
extern const struct xrt_matrix_2x2 u_device_rotation_right;
|
|
|
|
extern const struct xrt_matrix_2x2 u_device_rotation_left;
|
|
|
|
extern const struct xrt_matrix_2x2 u_device_rotation_ident;
|
|
|
|
extern const struct xrt_matrix_2x2 u_device_rotation_180;
|
|
|
|
|
2019-05-09 10:54:48 +00:00
|
|
|
enum u_device_alloc_flags
|
|
|
|
{
|
|
|
|
// clang-format off
|
2020-12-27 22:49:32 +00:00
|
|
|
U_DEVICE_ALLOC_NO_FLAGS = 0,
|
2019-05-09 10:54:48 +00:00
|
|
|
U_DEVICE_ALLOC_HMD = 1 << 0,
|
|
|
|
U_DEVICE_ALLOC_TRACKING_NONE = 1 << 1,
|
|
|
|
// clang-format on
|
|
|
|
};
|
|
|
|
|
2019-04-19 23:11:16 +00:00
|
|
|
struct u_device_simple_info
|
|
|
|
{
|
|
|
|
struct
|
|
|
|
{
|
|
|
|
uint32_t w_pixels;
|
|
|
|
uint32_t h_pixels;
|
|
|
|
float w_meters;
|
|
|
|
float h_meters;
|
|
|
|
} display;
|
|
|
|
|
|
|
|
float lens_horizontal_separation_meters;
|
|
|
|
float lens_vertical_position_meters;
|
|
|
|
|
|
|
|
struct
|
|
|
|
{
|
|
|
|
float fov;
|
|
|
|
} views[2];
|
|
|
|
};
|
|
|
|
|
|
|
|
/*!
|
|
|
|
* Setup the device information given a very simple info struct.
|
|
|
|
*
|
|
|
|
* @return true on success.
|
|
|
|
* @ingroup aux_util
|
|
|
|
*/
|
|
|
|
bool
|
2021-01-14 14:13:48 +00:00
|
|
|
u_device_setup_split_side_by_side(struct xrt_device *xdev, const struct u_device_simple_info *info);
|
2019-04-19 23:11:16 +00:00
|
|
|
|
2019-03-18 05:52:32 +00:00
|
|
|
/*!
|
|
|
|
* Dump the device config to stderr.
|
2019-04-06 11:28:56 +00:00
|
|
|
*
|
|
|
|
* @ingroup aux_util
|
2019-03-18 05:52:32 +00:00
|
|
|
*/
|
|
|
|
void
|
2021-01-14 14:13:48 +00:00
|
|
|
u_device_dump_config(struct xrt_device *xdev, const char *prefix, const char *prod);
|
2019-03-18 05:52:32 +00:00
|
|
|
|
2021-01-14 14:13:48 +00:00
|
|
|
#define U_DEVICE_ALLOCATE(type, flags, num_inputs, num_outputs) \
|
|
|
|
((type *)u_device_allocate(flags, sizeof(type), num_inputs, num_outputs))
|
2019-05-09 10:54:48 +00:00
|
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
* Helper function to allocate a device plus inputs in the same allocation
|
|
|
|
* placed after the device in memory.
|
|
|
|
*
|
|
|
|
* Will setup any pointers and num values.
|
2019-10-24 10:43:01 +00:00
|
|
|
*
|
|
|
|
* @ingroup aux_util
|
2019-05-09 10:54:48 +00:00
|
|
|
*/
|
2019-09-29 10:43:23 +00:00
|
|
|
void *
|
2021-01-14 14:13:48 +00:00
|
|
|
u_device_allocate(enum u_device_alloc_flags flags, size_t size, size_t num_inputs, size_t num_outputs);
|
2019-05-09 10:54:48 +00:00
|
|
|
|
2019-10-24 10:43:01 +00:00
|
|
|
/*!
|
|
|
|
* Helper function to free a device and any data hanging of it.
|
|
|
|
*
|
|
|
|
* @ingroup aux_util
|
|
|
|
*/
|
|
|
|
void
|
|
|
|
u_device_free(struct xrt_device *xdev);
|
|
|
|
|
2019-03-18 05:52:32 +00:00
|
|
|
|
2020-11-06 15:34:29 +00:00
|
|
|
#define XRT_DEVICE_ROLE_UNASSIGNED (-1)
|
|
|
|
|
|
|
|
/*!
|
|
|
|
* Helper function to assign head, left hand and right hand roles.
|
|
|
|
*
|
|
|
|
* @ingroup aux_util
|
|
|
|
*/
|
|
|
|
void
|
2021-01-14 14:13:48 +00:00
|
|
|
u_device_assign_xdev_roles(struct xrt_device **xdevs, size_t num_xdevs, int *head, int *left, int *right);
|
2020-11-06 15:34:29 +00:00
|
|
|
|
2020-11-08 23:30:30 +00:00
|
|
|
/*!
|
2021-03-16 14:51:34 +00:00
|
|
|
* Helper function for setting up tracking origins. Applies 3dof offsets for devices with XRT_TRACKING_TYPE_NONE.
|
2020-11-08 23:30:30 +00:00
|
|
|
*
|
|
|
|
* @ingroup aux_util
|
|
|
|
*/
|
|
|
|
void
|
|
|
|
u_device_setup_tracking_origins(struct xrt_device *head,
|
|
|
|
struct xrt_device *left,
|
2020-12-25 22:28:13 +00:00
|
|
|
struct xrt_device *right,
|
|
|
|
struct xrt_vec3 *global_tracking_origin_offset);
|
2020-11-08 23:30:30 +00:00
|
|
|
|
2019-03-18 05:52:32 +00:00
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|