mirror of
https://gitlab.freedesktop.org/monado/monado.git
synced 2024-12-28 02:26:16 +00:00
xrt: Devices get a timekeeping object, must return a timestamp.
Updates drivers to match.
This commit is contained in:
parent
294be21392
commit
9004ea80bb
|
@ -28,6 +28,7 @@
|
||||||
#include "util/u_debug.h"
|
#include "util/u_debug.h"
|
||||||
#include "util/u_misc.h"
|
#include "util/u_misc.h"
|
||||||
#include "util/u_device.h"
|
#include "util/u_device.h"
|
||||||
|
#include "util/u_time.h"
|
||||||
|
|
||||||
#include "hdk_device.h"
|
#include "hdk_device.h"
|
||||||
|
|
||||||
|
@ -99,11 +100,14 @@ hdk_device_destroy(struct xrt_device *xdev)
|
||||||
|
|
||||||
static void
|
static void
|
||||||
hdk_device_get_tracked_pose(struct xrt_device *xdev,
|
hdk_device_get_tracked_pose(struct xrt_device *xdev,
|
||||||
|
struct time_state *timekeeping,
|
||||||
|
int64_t *out_timestamp,
|
||||||
struct xrt_space_relation *out_relation)
|
struct xrt_space_relation *out_relation)
|
||||||
{
|
{
|
||||||
struct hdk_device *hd = hdk_device(xdev);
|
struct hdk_device *hd = hdk_device(xdev);
|
||||||
|
|
||||||
uint8_t buffer[32];
|
uint8_t buffer[32];
|
||||||
|
int64_t now = time_state_get_now(timekeeping);
|
||||||
auto bytesRead = hid_read(hd->dev, &(buffer[0]), sizeof(buffer));
|
auto bytesRead = hid_read(hd->dev, &(buffer[0]), sizeof(buffer));
|
||||||
if (bytesRead == -1) {
|
if (bytesRead == -1) {
|
||||||
if (!hd->disconnect_notified) {
|
if (!hd->disconnect_notified) {
|
||||||
|
@ -121,6 +125,8 @@ hdk_device_get_tracked_pose(struct xrt_device *xdev,
|
||||||
out_relation->relation_flags = XRT_SPACE_RELATION_BITMASK_NONE;
|
out_relation->relation_flags = XRT_SPACE_RELATION_BITMASK_NONE;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
//! @todo adjust for latency here
|
||||||
|
*out_timestamp = now;
|
||||||
uint8_t *buf = &(buffer[0]);
|
uint8_t *buf = &(buffer[0]);
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
#include "util/u_misc.h"
|
#include "util/u_misc.h"
|
||||||
#include "util/u_debug.h"
|
#include "util/u_debug.h"
|
||||||
#include "util/u_device.h"
|
#include "util/u_device.h"
|
||||||
|
#include "util/u_time.h"
|
||||||
|
|
||||||
#include "oh_device.h"
|
#include "oh_device.h"
|
||||||
|
|
||||||
|
@ -41,11 +42,16 @@ oh_device_destroy(struct xrt_device *xdev)
|
||||||
|
|
||||||
static void
|
static void
|
||||||
oh_device_get_tracked_pose(struct xrt_device *xdev,
|
oh_device_get_tracked_pose(struct xrt_device *xdev,
|
||||||
|
struct time_state *timekeeping,
|
||||||
|
int64_t *out_timestamp,
|
||||||
struct xrt_space_relation *out_relation)
|
struct xrt_space_relation *out_relation)
|
||||||
{
|
{
|
||||||
struct oh_device *ohd = oh_device(xdev);
|
struct oh_device *ohd = oh_device(xdev);
|
||||||
struct xrt_quat quat = {0.f, 0.f, 0.f, 1.f};
|
struct xrt_quat quat = {0.f, 0.f, 0.f, 1.f};
|
||||||
ohmd_ctx_update(ohd->ctx);
|
ohmd_ctx_update(ohd->ctx);
|
||||||
|
int64_t now = time_state_get_now(timekeeping);
|
||||||
|
//! @todo adjust for latency here
|
||||||
|
*out_timestamp = now;
|
||||||
ohmd_device_getf(ohd->dev, OHMD_ROTATION_QUAT, &quat.x);
|
ohmd_device_getf(ohd->dev, OHMD_ROTATION_QUAT, &quat.x);
|
||||||
out_relation->pose.orientation = quat;
|
out_relation->pose.orientation = quat;
|
||||||
//! @todo assuming that orientation is actually currently tracked.
|
//! @todo assuming that orientation is actually currently tracked.
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
struct time_state;
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* A per-lens view information.
|
* A per-lens view information.
|
||||||
|
@ -153,6 +154,8 @@ struct xrt_device
|
||||||
* This is very very WIP and will need to be made a lot more advanced.
|
* This is very very WIP and will need to be made a lot more advanced.
|
||||||
*/
|
*/
|
||||||
void (*get_tracked_pose)(struct xrt_device *xdev,
|
void (*get_tracked_pose)(struct xrt_device *xdev,
|
||||||
|
struct time_state *timekeeping,
|
||||||
|
int64_t *out_timestamp,
|
||||||
struct xrt_space_relation *out_relation);
|
struct xrt_space_relation *out_relation);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
|
|
@ -135,7 +135,9 @@ oxr_session_get_view_pose_at(struct oxr_logger *log,
|
||||||
|
|
||||||
struct xrt_device *xdev = sess->sys->device;
|
struct xrt_device *xdev = sess->sys->device;
|
||||||
struct xrt_space_relation relation;
|
struct xrt_space_relation relation;
|
||||||
xdev->get_tracked_pose(xdev, &relation);
|
int64_t timestamp;
|
||||||
|
xdev->get_tracked_pose(xdev, sess->sys->inst->timekeeping, ×tamp,
|
||||||
|
&relation);
|
||||||
if ((relation.relation_flags &
|
if ((relation.relation_flags &
|
||||||
XRT_SPACE_RELATION_ORIENTATION_VALID_BIT) != 0) {
|
XRT_SPACE_RELATION_ORIENTATION_VALID_BIT) != 0) {
|
||||||
pose->orientation = relation.pose.orientation;
|
pose->orientation = relation.pose.orientation;
|
||||||
|
|
Loading…
Reference in a new issue