]> sigrok.org Git - pulseview.git/blobdiff - pv/sigsession.cpp
Use new probe_groups API
[pulseview.git] / pv / sigsession.cpp
index dacf65e56b55df4c8266d603928c86c0ce02a6fc..b27fd6ec7f80e8d77635e4219a2fed65c4cfde63 100644 (file)
@@ -34,6 +34,8 @@
 
 #include <assert.h>
 
+#include <stdexcept>
+
 #include <sys/stat.h>
 
 #include <QDebug>
@@ -193,20 +195,15 @@ boost::shared_ptr<data::Logic> SigSession::get_data()
        return _logic_data;
 }
 
-void SigSession::add_decoder(srd_decoder *const dec,
+bool SigSession::add_decoder(srd_decoder *const dec,
        std::map<const srd_probe*,
-               boost::shared_ptr<view::Signal> > probes,
+               boost::shared_ptr<view::LogicSignal> > probes,
        GHashTable *options)
 {
+       try
        {
                lock_guard<mutex> lock(_signals_mutex);
 
-               if (!_decode_traces.empty()) {
-                       qDebug("Currently only one decode trace can be added "
-                               "at once");
-                       _decode_traces.clear();
-               }
-
                shared_ptr<data::Decoder> decoder(
                        new data::Decoder(dec, probes, options));
                shared_ptr<view::DecodeSignal> d(
@@ -214,7 +211,14 @@ void SigSession::add_decoder(srd_decoder *const dec,
                                _decode_traces.size()));
                _decode_traces.push_back(d);
        }
+       catch(std::runtime_error e)
+       {
+               return false;
+       }
+
        signals_changed();
+
+       return true;
 }
 
 vector< shared_ptr<view::DecodeSignal> > SigSession::get_decode_signals() const
@@ -378,8 +382,7 @@ void SigSession::update_signals(const sr_dev_inst *const sdi)
 
                if(sdi) {
                        for (const GSList *l = sdi->probes; l; l = l->next) {
-                               const sr_probe *const probe =
-                                       (const sr_probe *)l->data;
+                               sr_probe *const probe = (sr_probe *)l->data;
                                assert(probe);
 
                                switch(probe->type) {
@@ -425,8 +428,8 @@ void SigSession::read_sample_rate(const sr_dev_inst *const sdi)
        // Read out the sample rate
        if(sdi->driver)
        {
-               const int ret = sr_config_get(sdi->driver,
-                       SR_CONF_SAMPLERATE, &gvar, sdi);
+               const int ret = sr_config_get(sdi->driver, sdi, NULL,
+                       SR_CONF_SAMPLERATE, &gvar);
                if (ret != SR_OK) {
                        qDebug("Failed to get samplerate\n");
                        return;
@@ -502,7 +505,7 @@ void SigSession::sample_thread_proc(struct sr_dev_inst *sdi,
        }
 
        // Set the sample limit
-       if (sr_config_set(sdi, SR_CONF_LIMIT_SAMPLES,
+       if (sr_config_set(sdi, NULL, SR_CONF_LIMIT_SAMPLES,
                g_variant_new_uint64(record_length)) != SR_OK) {
                error_handler(tr("Failed to configure "
                        "time-based sample limit."));