Monado OpenXR Runtime
Loading...
Searching...
No Matches
ipc_server_process.c File Reference

Server process functions. More...

#include "xrt/xrt_device.h"
#include "xrt/xrt_results.h"
#include "xrt/xrt_system.h"
#include "xrt/xrt_instance.h"
#include "xrt/xrt_compositor.h"
#include "xrt/xrt_config_have.h"
#include "xrt/xrt_config_os.h"
#include "os/os_time.h"
#include "util/u_var.h"
#include "util/u_misc.h"
#include "util/u_debug.h"
#include "util/u_trace_marker.h"
#include "util/u_verify.h"
#include "util/u_process.h"
#include "util/u_debug_gui.h"
#include "util/u_pretty_print.h"
#include "util/u_git_tag.h"
#include "shared/ipc_protocol.h"
#include "shared/ipc_shmem.h"
#include "server/ipc_server.h"
#include "server/ipc_server_objects.h"
#include "server/ipc_server_interface.h"
#include "server/ipc_server_thread_shutdown.h"
#include <stdlib.h>
#include <stdbool.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <limits.h>
Include dependency graph for ipc_server_process.c:

Macros

#define PN()   u_pp(dg, "\n")
 
#define PNH()   u_pp(dg, "\n#")
 
#define PNHS(...)   u_pp(dg, "\n# "__VA_ARGS__)
 
#define PN80H()
 
#define SET_HT_ROLE(SRC)
 

Functions

static int32_t find_xdev_index (struct ipc_server *s, struct xrt_device *xdev)
 
static XRT_MAYBE_UNUSED void print_linux_end_user_failed_information (enum u_logging_level log_level)
 
static XRT_MAYBE_UNUSED void print_linux_end_user_started_information (enum u_logging_level log_level)
 
static void teardown_all (struct ipc_server *s)
 
static XRT_CHECK_RESULT xrt_result_t init_shm_and_instance_state (struct ipc_server *s, volatile struct ipc_client_state *ics)
 
static void init_system_shm_state (struct ipc_server *s, volatile struct ipc_client_state *ics)
 
static void init_server_state (struct ipc_server *s)
 
static xrt_result_t init_all (struct ipc_server *s, enum u_logging_level log_level, const struct ipc_server_callbacks *callbacks, void *callback_data, const struct ipc_server_main_info *ismi)
 
static void shutdown_clients (struct ipc_server *s)
 
static int main_loop (struct ipc_server *s)
 
static void handle_overlay_client_events (volatile struct ipc_client_state *ics, int active_id, int prev_active_id)
 
static void handle_focused_client_events (volatile struct ipc_client_state *ics, int active_id, int prev_active_id)
 
static void flush_state_to_all_clients_locked (struct ipc_server *s)
 
static void update_server_state_locked (struct ipc_server *s)
 
static volatile struct ipc_client_state * find_client_locked (struct ipc_server *s, uint32_t client_id)
 
static xrt_result_t get_client_app_state_locked (struct ipc_server *s, uint32_t client_id, struct ipc_app_state *out_ias)
 
static xrt_result_t set_active_client_locked (struct ipc_server *s, uint32_t client_id)
 
static xrt_result_t toggle_io_client_locked (struct ipc_server *s, uint32_t client_id)
 
static xrt_result_t set_client_io_blocks_locked (struct ipc_server *s, uint32_t client_id, const struct ipc_client_io_blocks *blocks)
 
static xrt_result_t get_client_session_running_state_locked (struct ipc_server *s, uint32_t client_id, struct xrt_compositor_session_running_state *out_running_state)
 
static xrt_result_t get_client_view_config_locked (struct ipc_server *s, uint32_t client_id, enum xrt_view_type view_type, struct xrt_view_config *out_default_view_config, struct xrt_recommended_view_config *out_recommended_view_config)
 
static xrt_result_t set_client_recommended_view_config_locked (struct ipc_server *s, uint32_t client_id, enum xrt_view_type view_type, const struct xrt_recommended_view_config *recommended_view_config)
 
static uint32_t allocate_id_locked (struct ipc_server *s)
 
xrt_result_t ipc_server_init_system_if_available_locked (struct ipc_server *s, volatile struct ipc_client_state *ics, bool *out_available)
 Finish setting up the server by creating the system, compositor and devices.
 
xrt_result_t ipc_server_get_client_app_state (struct ipc_server *s, uint32_t client_id, struct ipc_app_state *out_ias)
 Get the current state of a client.
 
xrt_result_t ipc_server_set_active_client (struct ipc_server *s, uint32_t client_id)
 Set the new active client.
 
xrt_result_t ipc_server_toggle_io_client (struct ipc_server *s, uint32_t client_id)
 Toggle the io for this client.
 
xrt_result_t ipc_server_set_client_io_blocks (struct ipc_server *s, uint32_t client_id, const struct ipc_client_io_blocks *blocks)
 Block certain types of IO for this client.
 
xrt_result_t ipc_server_get_client_session_running_state (struct ipc_server *s, uint32_t client_id, struct xrt_compositor_session_running_state *out_running_state)
 Get the session running state for this client.
 
xrt_result_t ipc_server_get_client_view_config (struct ipc_server *s, uint32_t client_id, enum xrt_view_type view_type, struct xrt_view_config *out_default_view_config, struct xrt_recommended_view_config *out_recommended_view_config)
 Get the view configuration for this client.
 
xrt_result_t ipc_server_set_client_recommended_view_config (struct ipc_server *s, uint32_t client_id, enum xrt_view_type view_type, const struct xrt_recommended_view_config *recommended_view_config)
 Set the recommended view configuration for this client.
 
void ipc_server_activate_session (volatile struct ipc_client_state *ics)
 Called by client threads to set a session to active.
 
void ipc_server_deactivate_session (volatile struct ipc_client_state *ics)
 Called by client threads to set a session to deactivate.
 
void ipc_server_update_state (struct ipc_server *s)
 Called by client threads to recalculate active client.
 
void ipc_server_handle_failure (struct ipc_server *vs)
 
void ipc_server_handle_shutdown_signal (struct ipc_server *vs)
 
void ipc_server_handle_client_connected (struct ipc_server *vs, xrt_ipc_handle_t ipc_handle)
 
xrt_result_t ipc_server_get_system_properties (struct ipc_server *vs, struct xrt_system_properties *out_properties)
 
int ipc_server_main_common (const struct ipc_server_main_info *ismi, const struct ipc_server_callbacks *callbacks, void *data)
 Common main function for starting the IPC service.
 
int ipc_server_stop (struct ipc_server *s)
 
static void init_failed (xrt_result_t xret, void *data)
 
static void mainloop_entering (struct ipc_server *s, struct xrt_instance *xinst, void *data)
 
static void mainloop_leaving (struct ipc_server *s, struct xrt_instance *xinst, void *data)
 
void client_connected (struct ipc_server *s, uint32_t client_id, void *data)
 
void client_disconnected (struct ipc_server *s, uint32_t client_id, void *data)
 
int ipc_server_main (int argc, char **argv, const struct ipc_server_main_info *ismi)
 Main entrypoint to the compositor process.
 

Detailed Description

Macro Definition Documentation

◆ PN80H

#define PN80H ( )
Value:
do { \
PN(); \
for (uint32_t i = 0; i < 8; i++) { \
u_pp(dg, "##########"); \
} \
} while (false)

◆ SET_HT_ROLE

#define SET_HT_ROLE (   SRC)
Value:
ism->roles.hand_tracking.SRC.left = find_xdev_index(s, s->xsysd->static_roles.hand_tracking.SRC.left); \
ism->roles.hand_tracking.SRC.right = find_xdev_index(s, s->xsysd->static_roles.hand_tracking.SRC.right);

Function Documentation

◆ init_all()

◆ print_linux_end_user_failed_information()

static XRT_MAYBE_UNUSED void print_linux_end_user_failed_information ( enum u_logging_level  log_level)
static
Todo:
These banners name the Monado service and its tools, which is wrong for other services built on the IPC server. The name of the service needs to be passed in.

References u_pp_sink_stack_only::buffer, and U_LOG_IFL_I.