#include <stdarg.h>
#include <stdio.h>
-#include <sigrok.h>
-#include <sigrok-internal.h>
+#include "sigrok.h"
+#include "sigrok-internal.h"
+
+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");
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;