75#define U_LOG_RAW(...)                                                                                                 \ 
   77                u_log(__FILE__, __LINE__, __func__, U_LOGGING_RAW, __VA_ARGS__);                                       \ 
   92#define U_LOG(level, ...)                                                                                              \ 
   94                u_log(__FILE__, __LINE__, __func__, level, __VA_ARGS__);                                               \ 
  106#define U_LOG_IFL(level, cond_level, ...)                                                                              \ 
  108                if (cond_level <= level) {                                                                             \ 
  109                        u_log(__FILE__, __LINE__, __func__, level, __VA_ARGS__);                                       \ 
  123#define U_LOG_XDEV(level, xdev, ...)                                                                                   \ 
  125                u_log_xdev(__FILE__, __LINE__, __func__, level, xdev, __VA_ARGS__);                                    \ 
  137#define U_LOG_XDEV_IFL(level, cond_level, xdev, ...)                                                                   \ 
  139                if (cond_level <= level) {                                                                             \ 
  140                        u_log_xdev(__FILE__, __LINE__, __func__, level, xdev, __VA_ARGS__);                            \ 
  155#define U_LOG_IFL_HEX(level, cond_level, data, data_size)                                                              \ 
  157                if (cond_level <= level) {                                                                             \ 
  158                        u_log_hex(__FILE__, __LINE__, __func__, level, data, data_size);                               \ 
  173#define U_LOG_XDEV_IFL_HEX(level, cond_level, xdev, data, data_size)                                                   \ 
  175                if (cond_level <= level) {                                                                             \ 
  176                        u_log_xdev_hex(__FILE__, __LINE__, __func__, level, xdev, data, data_size);                    \ 
  188#define U_LOG_CHK_AND_RET(COND_LEVEL, XRET, FUNC_STR)                                                                  \ 
  190                xrt_result_t _ret = XRET;                                                                              \ 
  191                if (_ret != XRT_SUCCESS) {                                                                             \ 
  192                        u_log_print_result(COND_LEVEL, __FILE__, __LINE__, __func__, _ret, FUNC_STR);                  \ 
  206#define U_LOG_CHK_WITH_GOTO(COND_LEVEL, XRET, FUNC_STR, GOTO)                                                          \ 
  208                xrt_result_t _ret = XRET;                                                                              \ 
  209                if (_ret != XRT_SUCCESS) {                                                                             \ 
  210                        u_log_print_result(COND_LEVEL, __FILE__, __LINE__, __func__, _ret, FUNC_STR);                  \ 
  224#define U_LOG_CHK_WITH_RET(COND_LEVEL, XRET, FUNC_STR, RET)                                                            \ 
  226                xrt_result_t _ret = XRET;                                                                              \ 
  227                if (_ret != XRT_SUCCESS) {                                                                             \ 
  228                        u_log_print_result(COND_LEVEL, __FILE__, __LINE__, __func__, _ret, FUNC_STR);                  \ 
  241#define U_LOG_CHK_ONLY_PRINT(COND_LEVEL, XRET, FUNC_STR)                                                               \ 
  243                xrt_result_t _ret = XRET;                                                                              \ 
  244                if (_ret != XRT_SUCCESS) {                                                                             \ 
  245                        u_log_print_result(COND_LEVEL, __FILE__, __LINE__, __func__, _ret, FUNC_STR);                  \ 
  257#define U_LOG_CHK_ALWAYS_RET(COND_LEVEL, XRET, FUNC_STR)                                                               \ 
  259                xrt_result_t _ret = XRET;                                                                              \ 
  260                if (_ret != XRT_SUCCESS) {                                                                             \ 
  261                        u_log_print_result(COND_LEVEL, __FILE__, __LINE__, __func__, _ret, FUNC_STR);                  \ 
  286    XRT_PRINTF_FORMAT(5, 6);
 
  307           ...) XRT_PRINTF_FORMAT(6, 7);
 
  327          const 
size_t data_size);
 
  349               const 
size_t data_size);
 
  377                   const 
char *calling_fn,
 
  379                   const 
char *called_fn);
 
  398#define U_LOG_T(...) U_LOG_IFL_T(u_log_get_global_level(), __VA_ARGS__) 
  401#define U_LOG_D(...) U_LOG_IFL_D(u_log_get_global_level(), __VA_ARGS__) 
  404#define U_LOG_I(...) U_LOG_IFL_I(u_log_get_global_level(), __VA_ARGS__) 
  407#define U_LOG_W(...) U_LOG_IFL_W(u_log_get_global_level(), __VA_ARGS__) 
  410#define U_LOG_E(...) U_LOG_IFL_E(u_log_get_global_level(), __VA_ARGS__) 
  429#define U_LOG_IFL_T(cond_level, ...) U_LOG_IFL(U_LOGGING_TRACE, cond_level, __VA_ARGS__) 
  431#define U_LOG_IFL_D(cond_level, ...) U_LOG_IFL(U_LOGGING_DEBUG, cond_level, __VA_ARGS__) 
  433#define U_LOG_IFL_I(cond_level, ...) U_LOG_IFL(U_LOGGING_INFO, cond_level, __VA_ARGS__) 
  435#define U_LOG_IFL_W(cond_level, ...) U_LOG_IFL(U_LOGGING_WARN, cond_level, __VA_ARGS__) 
  437#define U_LOG_IFL_E(cond_level, ...) U_LOG_IFL(U_LOGGING_ERROR, cond_level, __VA_ARGS__) 
  440#define U_LOG_IFL_T_HEX(cond_level, data, data_size) U_LOG_IFL_HEX(U_LOGGING_TRACE, cond_level, data, data_size) 
  442#define U_LOG_IFL_D_HEX(cond_level, data, data_size) U_LOG_IFL_HEX(U_LOGGING_DEBUG, cond_level, data, data_size) 
  463#define U_LOG_XDEV_IFL_T(xdev, cond_level, ...) U_LOG_XDEV_IFL(U_LOGGING_TRACE, cond_level, xdev, __VA_ARGS__) 
  465#define U_LOG_XDEV_IFL_D(xdev, cond_level, ...) U_LOG_XDEV_IFL(U_LOGGING_DEBUG, cond_level, xdev, __VA_ARGS__) 
  467#define U_LOG_XDEV_IFL_I(xdev, cond_level, ...) U_LOG_XDEV_IFL(U_LOGGING_INFO, cond_level, xdev, __VA_ARGS__) 
  469#define U_LOG_XDEV_IFL_W(xdev, cond_level, ...) U_LOG_XDEV_IFL(U_LOGGING_WARN, cond_level, xdev, __VA_ARGS__) 
  471#define U_LOG_XDEV_IFL_E(xdev, cond_level, ...) U_LOG_XDEV_IFL(U_LOGGING_ERROR, cond_level, xdev, __VA_ARGS__) 
  474#define U_LOG_XDEV_IFL_T_HEX(xdev, cond_level, data, data_size)                                                        \ 
  475        U_LOG_XDEV_IFL_HEX(U_LOGGING_TRACE, cond_level, xdev, data, data_size) 
  477#define U_LOG_XDEV_IFL_D_HEX(xdev, cond_level, data, data_size)                                                        \ 
  478        U_LOG_XDEV_IFL_HEX(U_LOGGING_DEBUG, cond_level, xdev, data, data_size) 
  492#define U_LOG_XDEV_UNSUPPORTED_INPUT(xdev, cond_level, name)                                                           \ 
  494                struct u_pp_sink_stack_only sink;                                                                      \ 
  495                u_pp_delegate_t dg = u_pp_sink_stack_only_init(&sink);                                                 \ 
  496                u_pp_xrt_input_name(dg, name);                                                                         \ 
  497                U_LOG_XDEV_IFL_E(xdev, cond_level, "Unsupported input: %s", sink.buffer);                              \
 
  500#define U_LOG_XDEV_UNSUPPORTED_OUTPUT(xdev, cond_level, name)                                                          \ 
  502                struct u_pp_sink_stack_only sink;                                                                      \ 
  503                u_pp_delegate_t dg = u_pp_sink_stack_only_init(&sink);                                                 \ 
  504                u_pp_xrt_output_name(dg, name);                                                                        \ 
  505                U_LOG_XDEV_IFL_E(xdev, cond_level, "Unsupported output: %s", sink.buffer);                             \
 
  523#define U_LOG_XDEV_T(xdev, ...) U_LOG_XDEV(U_LOGGING_TRACE, xdev, __VA_ARGS__) 
  525#define U_LOG_XDEV_D(xdev, ...) U_LOG_XDEV(U_LOGGING_DEBUG, xdev, __VA_ARGS__) 
  527#define U_LOG_XDEV_I(xdev, ...) U_LOG_XDEV(U_LOGGING_INFO, xdev, __VA_ARGS__) 
  529#define U_LOG_XDEV_W(xdev, ...) U_LOG_XDEV(U_LOGGING_WARN, xdev, __VA_ARGS__) 
  531#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:44
 
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.
 
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:69
 
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:427
 
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:64
 
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:142
 
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_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:86
 
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:170
 
@ U_LOGGING_WARN
Warning messages: indicating a potential problem.
Definition: u_logging.h:48
 
@ U_LOGGING_DEBUG
Debug messages, verbose.
Definition: u_logging.h:46
 
@ U_LOGGING_TRACE
Trace messages, highly verbose.
Definition: u_logging.h:45
 
@ U_LOGGING_RAW
Special level for raw printing, prints a new-line.
Definition: u_logging.h:50
 
@ U_LOGGING_ERROR
Error messages: indicating a problem.
Definition: u_logging.h:49
 
@ U_LOGGING_INFO
Info messages: not very verbose, not indicating a problem.
Definition: u_logging.h:47
 
enum xrt_result xrt_result_t
Result type used across Monado.
 
A single HMD or input device.
Definition: xrt_device.h:282
 
Pretty printing various Monado things.
 
Header holding common defines.
 
Internal result type for XRT.