Monado OpenXR Runtime
feeder.h
Go to the documentation of this file.
1// Copyright 2025, rcelyte
2// SPDX-License-Identifier: BSL-1.0
3/*!
4 * @file
5 * @brief SolarXR pose feeder
6 * @ingroup drv_solarxr
7 */
8
9#pragma once
10#include "solarxr_ipc_socket.h"
11
12#include "os/os_threading.h"
13
14/*!
15 * Object that observes a collection of @ref xrt_device objects,
16 * reporting their poses and status to a SolarXR server over IPC
17 * @ingroup drv_solarxr
18 */
19struct u_hashmap_int;
20struct feeder
21{
22 struct os_mutex mutex;
23 struct solarxr_ipc_socket socket;
24 uint32_t next_id;
25 struct u_hashmap_int *devices;
26};
27
28bool
29feeder_init(struct feeder *feeder, enum u_logging_level log_level);
30
31void
32feeder_fini(struct feeder *feeder);
33
34/*!
35 * Register a device to observe and announce it to the server
36 *
37 * Holds the mutex during most of the operation.
38 *
39 * @param feeder self
40 * @param device device to register
41 *
42 * @return true on success.
43 *
44 * @public @memberof feeder
45 */
46bool
47feeder_add_device(struct feeder *feeder, struct xrt_device *xdev); // thread safe
48
49/*!
50 * Unregister a previously added device
51 *
52 * Holds the mutex during most of the operation.
53 *
54 * @param feeder self
55 * @param device device to unregister
56 *
57 * @public @memberof feeder
58 */
59void
60feeder_remove_device(struct feeder *feeder, struct xrt_device *xdev); // thread safe
61
62/*!
63 * Unregister all observed devices
64 *
65 * Holds the mutex during most of the operation.
66 *
67 * @param feeder self
68 *
69 * @public @memberof feeder
70 */
71void
72feeder_clear_devices(struct feeder *feeder); // thread safe
73
74/*!
75 * Poll all observed xdevs and
76 *
77 * Holds the mutex during most of the operation.
78 *
79 * @param feeder self
80 * @param time Timestamp used to query device poses
81 *
82 * @public @memberof feeder
83 */
84void
85feeder_send_feedback(struct feeder *feeder); // thread safe
u_logging_level
Logging level enum.
Definition: u_logging.h:45
Wrapper around OS threading native functions.
Definition: feeder.h:21
void feeder_remove_device(struct feeder *feeder, struct xrt_device *xdev)
Unregister a previously added device.
Definition: feeder.c:157
bool feeder_add_device(struct feeder *feeder, struct xrt_device *xdev)
Register a device to observe and announce it to the server.
Definition: feeder.c:38
void feeder_clear_devices(struct feeder *feeder)
Unregister all observed devices.
Definition: feeder.c:179
void feeder_send_feedback(struct feeder *feeder)
Poll all observed xdevs and.
Definition: feeder.c:272
A wrapper around a native mutex.
Definition: os_threading.h:69
Definition: solarxr_ipc_socket.h:21
A simple uint64_t key to a void pointer hashmap.
Definition: u_hashmap.cpp:24
A single HMD or input device.
Definition: xrt_device.h:310