87#define U_LOG_RAW(...) \
89 u_log(__FILE__, __LINE__, __func__, U_LOGGING_RAW, __VA_ARGS__); \
104#define U_LOG(level, ...) \
106 u_log(__FILE__, __LINE__, __func__, level, __VA_ARGS__); \
118#define U_LOG_IFL(level, cond_level, ...) \
120 if (cond_level <= level) { \
121 u_log(__FILE__, __LINE__, __func__, level, __VA_ARGS__); \
135#define U_LOG_XDEV(level, xdev, ...) \
137 u_log_xdev(__FILE__, __LINE__, __func__, level, xdev, __VA_ARGS__); \
149#define U_LOG_XDEV_IFL(level, cond_level, xdev, ...) \
151 if (cond_level <= level) { \
152 u_log_xdev(__FILE__, __LINE__, __func__, level, xdev, __VA_ARGS__); \
167#define U_LOG_IFL_HEX(level, cond_level, data, data_size) \
169 if (cond_level <= level) { \
170 u_log_hex(__FILE__, __LINE__, __func__, level, data, data_size); \
185#define U_LOG_XDEV_IFL_HEX(level, cond_level, xdev, data, data_size) \
187 if (cond_level <= level) { \
188 u_log_xdev_hex(__FILE__, __LINE__, __func__, level, xdev, data, data_size); \
200#define U_LOG_CHK_AND_RET(COND_LEVEL, XRET, FUNC_STR) \
202 xrt_result_t _ret = XRET; \
203 if (_ret != XRT_SUCCESS) { \
204 u_log_print_result(COND_LEVEL, __FILE__, __LINE__, __func__, _ret, FUNC_STR); \
218#define U_LOG_CHK_WITH_GOTO(COND_LEVEL, XRET, FUNC_STR, GOTO) \
220 xrt_result_t _ret = XRET; \
221 if (_ret != XRT_SUCCESS) { \
222 u_log_print_result(COND_LEVEL, __FILE__, __LINE__, __func__, _ret, FUNC_STR); \
236#define U_LOG_CHK_WITH_RET(COND_LEVEL, XRET, FUNC_STR, RET) \
238 xrt_result_t _ret = XRET; \
239 if (_ret != XRT_SUCCESS) { \
240 u_log_print_result(COND_LEVEL, __FILE__, __LINE__, __func__, _ret, FUNC_STR); \
253#define U_LOG_CHK_ONLY_PRINT(COND_LEVEL, XRET, FUNC_STR) \
255 xrt_result_t _ret = XRET; \
256 if (_ret != XRT_SUCCESS) { \
257 u_log_print_result(COND_LEVEL, __FILE__, __LINE__, __func__, _ret, FUNC_STR); \
269#define U_LOG_CHK_ALWAYS_RET(COND_LEVEL, XRET, FUNC_STR) \
271 xrt_result_t _ret = XRET; \
272 if (_ret != XRT_SUCCESS) { \
273 u_log_print_result(COND_LEVEL, __FILE__, __LINE__, __func__, _ret, FUNC_STR); \
310 XRT_PRINTF_FORMAT(5, 6);
331 ...) XRT_PRINTF_FORMAT(6, 7);
351 const
size_t data_size);
373 const
size_t data_size);
401 const
char *calling_fn,
403 const
char *called_fn);
430#define U_LOG_T(...) U_LOG_IFL_T(u_log_get_global_level(), __VA_ARGS__)
433#define U_LOG_D(...) U_LOG_IFL_D(u_log_get_global_level(), __VA_ARGS__)
436#define U_LOG_I(...) U_LOG_IFL_I(u_log_get_global_level(), __VA_ARGS__)
439#define U_LOG_W(...) U_LOG_IFL_W(u_log_get_global_level(), __VA_ARGS__)
442#define U_LOG_E(...) U_LOG_IFL_E(u_log_get_global_level(), __VA_ARGS__)
461#define U_LOG_IFL_T(cond_level, ...) U_LOG_IFL(U_LOGGING_TRACE, cond_level, __VA_ARGS__)
463#define U_LOG_IFL_D(cond_level, ...) U_LOG_IFL(U_LOGGING_DEBUG, cond_level, __VA_ARGS__)
465#define U_LOG_IFL_I(cond_level, ...) U_LOG_IFL(U_LOGGING_INFO, cond_level, __VA_ARGS__)
467#define U_LOG_IFL_W(cond_level, ...) U_LOG_IFL(U_LOGGING_WARN, cond_level, __VA_ARGS__)
469#define U_LOG_IFL_E(cond_level, ...) U_LOG_IFL(U_LOGGING_ERROR, cond_level, __VA_ARGS__)
472#define U_LOG_IFL_T_HEX(cond_level, data, data_size) U_LOG_IFL_HEX(U_LOGGING_TRACE, cond_level, data, data_size)
474#define U_LOG_IFL_D_HEX(cond_level, data, data_size) U_LOG_IFL_HEX(U_LOGGING_DEBUG, cond_level, data, data_size)
495#define U_LOG_XDEV_IFL_T(xdev, cond_level, ...) U_LOG_XDEV_IFL(U_LOGGING_TRACE, cond_level, xdev, __VA_ARGS__)
497#define U_LOG_XDEV_IFL_D(xdev, cond_level, ...) U_LOG_XDEV_IFL(U_LOGGING_DEBUG, cond_level, xdev, __VA_ARGS__)
499#define U_LOG_XDEV_IFL_I(xdev, cond_level, ...) U_LOG_XDEV_IFL(U_LOGGING_INFO, cond_level, xdev, __VA_ARGS__)
501#define U_LOG_XDEV_IFL_W(xdev, cond_level, ...) U_LOG_XDEV_IFL(U_LOGGING_WARN, cond_level, xdev, __VA_ARGS__)
503#define U_LOG_XDEV_IFL_E(xdev, cond_level, ...) U_LOG_XDEV_IFL(U_LOGGING_ERROR, cond_level, xdev, __VA_ARGS__)
506#define U_LOG_XDEV_IFL_T_HEX(xdev, cond_level, data, data_size) \
507 U_LOG_XDEV_IFL_HEX(U_LOGGING_TRACE, cond_level, xdev, data, data_size)
509#define U_LOG_XDEV_IFL_D_HEX(xdev, cond_level, data, data_size) \
510 U_LOG_XDEV_IFL_HEX(U_LOGGING_DEBUG, cond_level, xdev, data, data_size)
524#define U_LOG_XDEV_UNSUPPORTED_INPUT(xdev, cond_level, name) \
526 struct u_pp_sink_stack_only sink; \
527 u_pp_delegate_t dg = u_pp_sink_stack_only_init(&sink); \
528 u_pp_xrt_input_name(dg, name); \
529 U_LOG_XDEV_IFL_E(xdev, cond_level, "Unsupported input: %s", sink.buffer); \
532#define U_LOG_XDEV_UNSUPPORTED_OUTPUT(xdev, cond_level, name) \
534 struct u_pp_sink_stack_only sink; \
535 u_pp_delegate_t dg = u_pp_sink_stack_only_init(&sink); \
536 u_pp_xrt_output_name(dg, name); \
537 U_LOG_XDEV_IFL_E(xdev, cond_level, "Unsupported output: %s", sink.buffer); \
555#define U_LOG_XDEV_T(xdev, ...) U_LOG_XDEV(U_LOGGING_TRACE, xdev, __VA_ARGS__)
557#define U_LOG_XDEV_D(xdev, ...) U_LOG_XDEV(U_LOGGING_DEBUG, xdev, __VA_ARGS__)
559#define U_LOG_XDEV_I(xdev, ...) U_LOG_XDEV(U_LOGGING_INFO, xdev, __VA_ARGS__)
561#define U_LOG_XDEV_W(xdev, ...) U_LOG_XDEV(U_LOGGING_WARN, xdev, __VA_ARGS__)
563#define U_LOG_XDEV_E(xdev, ...) U_LOG_XDEV(U_LOGGING_ERROR, xdev, __VA_ARGS__)
u_logging_level
Logging level enum.
Definition: u_logging.h:45
void u_log(const char *file, int line, const char *func, enum u_logging_level level, const char *format,...) XRT_PRINTF_FORMAT(5
Main non-device-related log implementation function: do not call directly, use a macro that wraps it.
bool(* u_log_filter_func_t)(const char *file, int line, const char *func, enum u_logging_level level)
Function typedef for filtering log messages.
Definition: u_logging.h:82
enum u_logging_level u_log_get_global_level(void)
Returns the global logging level, subsystems own logging level take precedence.
Definition: u_logging.c:70
void u_log_print_result(enum u_logging_level cond_level, const char *file, int line, const char *calling_fn, xrt_result_t xret, const char *called_fn)
Helper to print the results of called functions that return xret results, if the result is XRT_SUCCES...
Definition: u_logging.c:469
void(* u_log_sink_func_t)(const char *file, int line, const char *func, enum u_logging_level level, const char *format, va_list args, void *data)
Function typedef for setting the logging sink.
Definition: u_logging.h:65
void u_log_set_output_file(const char *filename)
Sets the output file for the logging instead of stderr, this function is externally synchronized with...
Definition: u_logging.c:85
void void void u_log_hex(const char *file, int line, const char *func, enum u_logging_level level, const uint8_t *data, const size_t data_size)
Log implementation for dumping memory buffers as hex: do not call directly, use a macro that wraps it...
Definition: u_logging.c:175
void void u_log_xdev(const char *file, int line, const char *func, enum u_logging_level level, struct xrt_device *xdev, const char *format,...) XRT_PRINTF_FORMAT(6
Main device-related log implementation function: do not call directly, use a macro that wraps it.
void u_log_set_filter(u_log_filter_func_t filter)
Add function to set the filter.
Definition: u_logging.c:502
void u_log_set_sink(u_log_sink_func_t func, void *data)
Sets the logging sink, log is still passed on to the platform defined output as well as the sink.
Definition: u_logging.c:119
void u_log_xdev_hex(const char *file, int line, const char *func, enum u_logging_level level, struct xrt_device *xdev, const uint8_t *data, const size_t data_size)
Device-related log implementation for dumping memory buffers as hex: do not call directly,...
Definition: u_logging.c:203
@ U_LOGGING_WARN
Warning messages: indicating a potential problem.
Definition: u_logging.h:49
@ U_LOGGING_DEBUG
Debug messages, verbose.
Definition: u_logging.h:47
@ U_LOGGING_TRACE
Trace messages, highly verbose.
Definition: u_logging.h:46
@ U_LOGGING_RAW
Special level for raw printing, prints a new-line.
Definition: u_logging.h:51
@ U_LOGGING_ERROR
Error messages: indicating a problem.
Definition: u_logging.h:50
@ U_LOGGING_INFO
Info messages: not very verbose, not indicating a problem.
Definition: u_logging.h:48
enum xrt_result xrt_result_t
Result type used across Monado.
A single HMD or input device.
Definition: xrt_device.h:284
Pretty printing various Monado things.
Header holding common defines.
Internal result type for XRT.