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); \
515#define U_LOG_XDEV_T(xdev, ...) U_LOG_XDEV(U_LOGGING_TRACE, xdev, __VA_ARGS__)
517#define U_LOG_XDEV_D(xdev, ...) U_LOG_XDEV(U_LOGGING_DEBUG, xdev, __VA_ARGS__)
519#define U_LOG_XDEV_I(xdev, ...) U_LOG_XDEV(U_LOGGING_INFO, xdev, __VA_ARGS__)
521#define U_LOG_XDEV_W(xdev, ...) U_LOG_XDEV(U_LOGGING_WARN, xdev, __VA_ARGS__)
523#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:281
Pretty printing various Monado things.
Header holding common defines.
Internal result type for XRT.