]> sigrok.org Git - pulseview.git/blobdiff - pv/sigsession.cpp
Paint decoder traces
[pulseview.git] / pv / sigsession.cpp
index e9349bba0efb1eae40e3cfa4f93dd5ddd9fc5e92..2ab730aa9a9a7261ab4cc7576452fcac69e50cc2 100644 (file)
 #include "sigsession.h"
 
 #include "devicemanager.h"
+
 #include "data/analog.h"
 #include "data/analogsnapshot.h"
+#include "data/decoder.h"
 #include "data/logic.h"
 #include "data/logicsnapshot.h"
+
 #include "view/analogsignal.h"
+#include "view/decodesignal.h"
 #include "view/logicsignal.h"
 
 #include <assert.h>
@@ -183,7 +187,7 @@ void SigSession::stop_capture()
        _sampling_thread.reset();
 }
 
-vector< shared_ptr<view::Signal> > SigSession::get_signals()
+vector< shared_ptr<view::Signal> > SigSession::get_signals() const
 {
        lock_guard<mutex> lock(_signals_mutex);
        return _signals;
@@ -194,6 +198,27 @@ boost::shared_ptr<data::Logic> SigSession::get_data()
        return _logic_data;
 }
 
+void SigSession::add_decoder(srd_decoder *const dec,
+       std::map<const srd_probe*,
+               boost::shared_ptr<view::Signal> > probes)
+{
+       {
+               lock_guard<mutex> lock(_signals_mutex);
+               shared_ptr<data::Decoder> decoder(
+                       new data::Decoder(dec, probes));
+               shared_ptr<view::DecodeSignal> d(
+                       new view::DecodeSignal(*this, decoder));
+               _decode_traces.push_back(d);
+       }
+       signals_changed();
+}
+
+vector< shared_ptr<view::DecodeSignal> > SigSession::get_decode_signals() const
+{
+       lock_guard<mutex> lock(_signals_mutex);
+       return _decode_traces;
+}
+
 void SigSession::set_capture_state(capture_state state)
 {
        lock_guard<mutex> lock(_sampling_mutex);
@@ -287,6 +312,9 @@ void SigSession::update_signals(const sr_dev_inst *const sdi)
        unsigned int logic_probe_count = 0;
        unsigned int analog_probe_count = 0;
 
+       // Clear the decode traces
+       _decode_traces.clear();
+
        // Detect what data types we will receive
        if(sdi) {
                for (const GSList *l = sdi->probes; l; l = l->next) {
@@ -503,6 +531,8 @@ void SigSession::feed_in_meta(const sr_dev_inst *sdi,
                        break;
                }
        }
+
+       signals_changed();
 }
 
 void SigSession::feed_in_logic(const sr_datafeed_logic &logic)