X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=log.c;h=02eb9aa31ad321029f687f996e564768d8fd412d;hb=cb93f8a927e6fb2cb1d89176766c5c9c398db5c3;hp=22dcc107d020fa0a165834a030baff49bf5a0043;hpb=b08024a8363c7a019bebc05a25e2689e774326e8;p=libsigrok.git diff --git a/log.c b/log.c index 22dcc107..02eb9aa3 100644 --- a/log.c +++ b/log.c @@ -23,12 +23,49 @@ #include #include +static int sr_loglevel = SR_LOG_WARN; /* Show errors+warnings per default. */ + +/** + * Set the libsigrok loglevel. + * + * This influences the amount of log messages (debug messages, error messages, + * and so on) libsigrok will output. Using SR_LOG_NONE disables all messages. + * + * @param loglevel The loglevel to set (SR_LOG_NONE, SR_LOG_ERR, SR_LOG_WARN, + * SR_LOG_INFO, SR_LOG_DBG, or SR_LOG_SPEW). + * @return SR_OK upon success, SR_ERR_ARG upon invalid loglevel. + */ +int sr_set_loglevel(int loglevel) +{ + if (loglevel < SR_LOG_NONE || loglevel > SR_LOG_SPEW) { + sr_err("log: %s: invalid loglevel %d", __func__, loglevel); + return SR_ERR_ARG; + } + + sr_loglevel = loglevel; + + sr_dbg("log: %s: libsigrok loglevel set to %d", __func__, loglevel); + + return SR_OK; +} + +/** + * Get the libsigrok loglevel. + * + * @return The currently configured libsigrok loglevel. + */ +int sr_get_loglevel(void) +{ + return sr_loglevel; +} + static int sr_logv(int loglevel, const char *format, va_list args) { int ret; - /* Avoid compiler warnings. */ - loglevel = loglevel; + /* Only output messages of at least the selected loglevel(s). */ + if (loglevel > sr_loglevel) + return SR_OK; /* TODO? */ ret = vfprintf(stderr, format, args); fprintf(stderr, "\n"); @@ -48,6 +85,18 @@ int sr_log(int loglevel, const char *format, ...) return ret; } +int sr_spew(const char *format, ...) +{ + int ret; + va_list args; + + va_start(args, format); + ret = sr_logv(SR_LOG_SPEW, format, args); + va_end(args); + + return ret; +} + int sr_dbg(const char *format, ...) { int ret;