]> sigrok.org Git - pulseview.git/blobdiff - pv/logging.cpp
Fix random clazy warnings
[pulseview.git] / pv / logging.cpp
index ea0798286e6135dc8a57ab0b2b46669d06f28b93..b747ab5452c5f4ee7b2aef633a65fc1e02986f47 100644 (file)
@@ -20,6 +20,8 @@
 #include "logging.hpp"
 #include "globalsettings.hpp"
 
+#include <iostream>
+
 #ifdef ENABLE_DECODE
 #include <libsigrokdecode/libsigrokdecode.h> /* First, so we avoid a _POSIX_C_SOURCE warning. */
 #endif
 
 #include <QApplication>
 
+using std::cout;
+using std::endl;
+using std::lock_guard;
+
 namespace pv {
 
 Logging logging;
 
+const int Logging::MIN_BUFFER_SIZE = 10;
 const int Logging::MAX_BUFFER_SIZE = 50000;
 
+static sr_log_callback prev_sr_log_cb;
+static void *prev_sr_log_cb_data;
+
+#ifdef ENABLE_DECODE
+static srd_log_callback prev_srd_log_cb;
+static void *prev_srd_log_cb_data;
+#endif
+
 Logging::~Logging()
 {
-       qInstallMessageHandler(0);
-       sr_log_callback_set_default();
+       qInstallMessageHandler(nullptr);
+       if (prev_sr_log_cb)
+               sr_log_callback_set(prev_sr_log_cb, prev_sr_log_cb_data);
+       prev_sr_log_cb = nullptr;
+       prev_sr_log_cb_data = nullptr;
 #ifdef ENABLE_DECODE
-       srd_log_callback_set_default();
+       if (prev_srd_log_cb)
+               srd_log_callback_set(prev_srd_log_cb, prev_srd_log_cb_data);
+       prev_srd_log_cb = nullptr;
+       prev_srd_log_cb_data = nullptr;
 #endif
 
        GlobalSettings::remove_change_handler(this);
@@ -55,9 +76,11 @@ void Logging::init()
        buffer_.reserve(buffer_size_);
 
        qInstallMessageHandler(log_pv);
-       sr_log_callback_set(log_libsigrok, nullptr);
+       sr_log_callback_get(&prev_sr_log_cb, &prev_sr_log_cb_data);
+       sr_log_callback_set(log_sr, nullptr);
 #ifdef ENABLE_DECODE
-       srd_log_callback_set(log_libsrd, nullptr);
+       srd_log_callback_get(&prev_srd_log_cb, &prev_srd_log_cb_data);
+       srd_log_callback_set(log_srd, nullptr);
 #endif
 
        GlobalSettings::add_change_handler(this);
@@ -72,7 +95,9 @@ int Logging::get_log_level() const
 void Logging::set_log_level(int level)
 {
        sr_log_loglevel_set(level);
+#ifdef ENABLE_DECODE
        srd_log_loglevel_set(level);
+#endif
 }
 
 QString Logging::get_log() const
@@ -82,6 +107,8 @@ QString Logging::get_log() const
 
 void Logging::log(const QString &text, int source)
 {
+       lock_guard<mutex> log_lock(log_mutex_);
+
        if (buffer_.size() >= buffer_size_)
                buffer_.removeFirst();
 
@@ -99,13 +126,13 @@ void Logging::log(const QString &text, int source)
 
        switch (source) {
        case LogSource_pv:
-               s = QString("pv: ") + text;  // black is default color
+               s = QString("<font color=\"darkMagenta\">pv: %1</font>").arg(text);
                break;
        case LogSource_sr:
-               s = QString("<font color=\"blue\">sr: %1</font>").arg(text);
+               s = QString("<font color=\"darkGreen\">sr: %1</font>").arg(text);
                break;
        case LogSource_srd:
-               s = QString("<font color=\"brown\">srd: %1</font>").arg(text);
+               s = QString("<font color=\"olive\">srd: %1</font>").arg(text);
                break;
        default:
                s = text;
@@ -127,12 +154,20 @@ void Logging::log_pv(QtMsgType type, const QMessageLogContext &context, const QS
        (void)context;
 
        logging.log(msg, LogSource_pv);
+
+       cout << msg.toUtf8().data() << endl;
 }
 
-int Logging::log_libsigrok(void *cb_data, int loglevel, const char *format, va_list args)
+int Logging::log_sr(void *cb_data, int loglevel, const char *format, va_list args)
 {
+       va_list args2;
+
        (void)cb_data;
-       (void)loglevel;
+
+       va_copy(args2, args);
+       if (prev_sr_log_cb)
+               prev_sr_log_cb(prev_sr_log_cb_data, loglevel, format, args2);
+       va_end(args2);
 
        char *text = g_strdup_vprintf(format, args);
        logging.log(QString::fromUtf8(text), LogSource_sr);
@@ -142,10 +177,16 @@ int Logging::log_libsigrok(void *cb_data, int loglevel, const char *format, va_l
 }
 
 #ifdef ENABLE_DECODE
-int Logging::log_libsrd(void *cb_data, int loglevel, const char *format, va_list args)
+int Logging::log_srd(void *cb_data, int loglevel, const char *format, va_list args)
 {
+       va_list args2;
+
        (void)cb_data;
-       (void)loglevel;
+
+       va_copy(args2, args);
+       if (prev_srd_log_cb)
+               prev_srd_log_cb(prev_srd_log_cb_data, loglevel, format, args2);
+       va_end(args2);
 
        char *text = g_strdup_vprintf(format, args);
        logging.log(QString::fromUtf8(text), LogSource_srd);