64 for (uint32_t i = 0; i < input_count; i++) {
72 inputs[i].name = name;
84 uint32_t output_count)
86 if (!ics->client_state.io_blocks.block_outputs) {
90 for (uint32_t i = 0; i < output_count; i++) {
95 outputs[i].name = name;
115 if (value->type == XRT_OUTPUT_VALUE_TYPE_PCM_VIBRATION) {
116 IPC_ERROR(ics->
server,
"PCM vibration must use a haptic output call");
133 if (buffer->num_samples == 0) {
134 IPC_ERROR(ics->
server,
"Sample count can't be zero");
139 IPC_ERROR(ics->
server,
"Sample count exceeds maximum allowed count (%u > %u)", buffer->num_samples,
#define U_ZERO(PTR)
Zeroes the correct amount of memory based on the type pointed-to by the argument.
Definition u_misc.h:68
static xrt_result_t ipc_server_validate_output_value(volatile struct ipc_client_state *ics, const struct xrt_output_value *value)
Plain output calls copy the value as is, so reject PCM values: they hold client pointers and must go ...
Definition ipc_server_handle_helpers.h:113
static void ipc_server_client_filter_blocked_inputs(volatile struct ipc_client_state *ics, struct xrt_input *inputs, uint32_t input_count)
Zero out the inputs that are blocked for this client, in place.
Definition ipc_server_handle_helpers.h:60
static void ipc_server_client_filter_blocked_outputs(volatile struct ipc_client_state *ics, struct xrt_output *outputs, uint32_t output_count)
Zero out the outputs if outputs are blocked for this client, in place.
Definition ipc_server_handle_helpers.h:82
static xrt_result_t ipc_server_validate_pcm_haptic_buffer(volatile struct ipc_client_state *ics, const struct ipc_pcm_haptic_buffer *buffer)
Reject haptic output calls with no samples, since the message channel can't send zero bytes,...
Definition ipc_server_handle_helpers.h:131
static bool ipc_server_client_is_input_blocked(volatile struct ipc_client_state *ics, enum xrt_input_name name)
Is the given input blocked for this client by its ipc_client_io_blocks.
Definition ipc_server_handle_helpers.h:34
xrt_input_name
Every internal input source known to monado with a baked in type.
Definition xrt_defines.h:961
enum xrt_result xrt_result_t
Result type used across Monado.
xrt_output_name
Name of a output with a baked in type.
Definition xrt_defines.h:1645
#define XRT_GET_INPUT_TYPE(name)
Extract the xrt_input_type from an xrt_input_name.
Definition xrt_defines.h:940
@ XRT_INPUT_TYPE_POSE
A tracked pose.
Definition xrt_defines.h:891
@ XRT_INPUT_TYPE_VEC2_MINUS_ONE_TO_ONE
Vec2 input, components in [-1, 1].
Definition xrt_defines.h:885
@ XRT_INPUT_TYPE_VEC3_MINUS_ONE_TO_ONE
Vec3 input, components in [-1, 1].
Definition xrt_defines.h:887
@ XRT_INPUT_TYPE_FACE_TRACKING
A tracked face.
Definition xrt_defines.h:895
@ XRT_INPUT_TYPE_BODY_TRACKING
A tracked body.
Definition xrt_defines.h:897
@ XRT_INPUT_TYPE_HAND_TRACKING
A tracked hand.
Definition xrt_defines.h:893
@ XRT_INPUT_TYPE_VEC1_MINUS_ONE_TO_ONE
Float input in [-1, 1].
Definition xrt_defines.h:883
@ XRT_INPUT_TYPE_BOOLEAN
Boolean (digital, binary) input.
Definition xrt_defines.h:889
@ XRT_INPUT_TYPE_VEC1_ZERO_TO_ONE
Float input in [0, 1].
Definition xrt_defines.h:881
@ XRT_INPUT_GENERIC_HEAD_POSE
Standard pose used for rendering.
Definition xrt_defines.h:966
@ XRT_SUCCESS
The operation succeeded.
Definition xrt_results.h:27
@ XRT_ERROR_INVALID_ARGUMENT
Invalid function arguments passed in, e.g.
Definition xrt_results.h:243
#define IPC_MAX_PCM_HAPTIC_SAMPLES
Max number of samples in one ipc_pcm_haptic_buffer.
Definition ipc_protocol.h:401
Which types of IO to block for a client.
Definition ipc_protocol.h:343
Holds the state for a single client.
Definition ipc_server.h:102
struct ipc_server * server
Link back to the main server.
Definition ipc_server.h:104
Definition ipc_protocol.h:404
A union of all output types.
Definition xrt_defines.h:2422
A single named output, that sits on a xrt_device.
Definition xrt_device.h:254