monado/src/xrt/auxiliary/util/u_device.h

104 lines
2.1 KiB
C
Raw Normal View History

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>
* @ingroup aux_util
2019-03-18 05:52:32 +00:00
*/
#pragma once
#include "xrt/xrt_compiler.h"
#include "xrt/xrt_device.h"
#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;
enum u_device_alloc_flags
{
// clang-format off
U_DEVICE_ALLOC_HMD = 1 << 0,
U_DEVICE_ALLOC_TRACKING_NONE = 1 << 1,
// clang-format on
};
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
u_device_setup_split_side_by_side(struct xrt_device *xdev,
const struct u_device_simple_info *info);
2019-03-18 05:52:32 +00:00
/*!
* Dump the device config to stderr.
*
* @ingroup aux_util
2019-03-18 05:52:32 +00:00
*/
void
u_device_dump_config(struct xrt_device *xdev,
const char *prefix,
const char *prod);
2019-03-18 05:52:32 +00:00
2019-06-07 12:22:59 +00:00
#define U_DEVICE_ALLOCATE(type, flags, num_inputs, num_outputs) \
((type *)u_device_allocate(flags, sizeof(type), num_inputs, \
num_outputs))
/*!
* 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.
*
* @ingroup aux_util
*/
void *
u_device_allocate(enum u_device_alloc_flags flags,
size_t size,
2019-06-07 12:22:59 +00:00
size_t num_inputs,
size_t num_outputs);
/*!
* 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
#ifdef __cplusplus
}
#endif