24 #include <glib/gprintf.h>
26 #include "libsigrok-internal.h"
28 #define LOG_PREFIX "log"
48 static int sr_logv(
void *cb_data,
int loglevel,
const char *format,
58 static void *sr_log_cb_data = NULL;
61 #define LOGLEVEL_TIMESTAMP SR_LOG_DBG
63 static int64_t sr_log_start_time = 0;
84 if (loglevel < SR_LOG_NONE || loglevel >
SR_LOG_SPEW) {
85 sr_err(
"Invalid loglevel %d.", loglevel);
89 if (loglevel >= LOGLEVEL_TIMESTAMP && sr_log_start_time == 0)
90 sr_log_start_time = g_get_monotonic_time();
92 cur_loglevel = loglevel;
94 sr_dbg(
"libsigrok loglevel set to %d.", loglevel);
129 sr_err(
"%s: cb was NULL", __func__);
136 sr_log_cb_data = cb_data;
157 sr_log_cb_data = NULL;
162 static int sr_logv(
void *cb_data,
int loglevel,
const char *format, va_list args)
164 uint64_t elapsed_us, minutes;
165 unsigned int rest_us, seconds, microseconds;
172 if (loglevel > cur_loglevel)
175 if (cur_loglevel >= LOGLEVEL_TIMESTAMP) {
176 elapsed_us = g_get_monotonic_time() - sr_log_start_time;
178 minutes = elapsed_us / G_TIME_SPAN_MINUTE;
179 rest_us = elapsed_us % G_TIME_SPAN_MINUTE;
180 seconds = rest_us / G_TIME_SPAN_SECOND;
181 microseconds = rest_us % G_TIME_SPAN_SECOND;
183 ret = g_fprintf(stderr,
"sr: [%.2" PRIu64
":%.2u.%.6u] ",
184 minutes, seconds, microseconds);
186 ret = fputs(
"sr: ", stderr);
189 if (ret < 0 || g_vfprintf(stderr, format, args) < 0
190 || putc(
'\n', stderr) < 0)
197 SR_PRIV int sr_log(
int loglevel,
const char *format, ...)
202 va_start(args, format);
203 ret = sr_log_cb(sr_log_cb_data, loglevel, format, args);
int(* sr_log_callback)(void *cb_data, int loglevel, const char *format, va_list args)
The public libsigrok header file to be used by frontends.
Generic/unspecified error.
int sr_log_loglevel_set(int loglevel)
Set the libsigrok loglevel.
int sr_log_loglevel_get(void)
Get the libsigrok loglevel.
int sr_log_callback_set_default(void)
Set the libsigrok log callback to the default built-in one.
int sr_log_callback_set(sr_log_callback cb, void *cb_data)
Set the libsigrok log callback to the specified function.
Output very noisy debug messages.