]> sigrok.org Git - pulseview.git/blobdiff - pv/sigsession.cpp
Check LIMIT_SAMPLES and SAMPLERATE are available to read before reading them
[pulseview.git] / pv / sigsession.cpp
index a2eba967a0793ede0c2d104d50ed4bad54ab6c2e..80830214877148f38a6100c06dc43bbc56c0a134 100644 (file)
 #include <libsigrokdecode/libsigrokdecode.h>
 #endif
 
-#include "sigsession.h"
+#include "sigsession.hpp"
 
-#include "devicemanager.h"
+#include "devicemanager.hpp"
 
-#include "data/analog.h"
-#include "data/analogsnapshot.h"
-#include "data/decoderstack.h"
-#include "data/logic.h"
-#include "data/logicsnapshot.h"
-#include "data/decode/decoder.h"
+#include "data/analog.hpp"
+#include "data/analogsnapshot.hpp"
+#include "data/decoderstack.hpp"
+#include "data/logic.hpp"
+#include "data/logicsnapshot.hpp"
+#include "data/decode/decoder.hpp"
 
-#include "view/analogsignal.h"
-#include "view/decodetrace.h"
-#include "view/logicsignal.h"
+#include "view/analogsignal.hpp"
+#include "view/decodetrace.hpp"
+#include "view/logicsignal.hpp"
 
 #include <cassert>
 #include <mutex>
@@ -153,6 +153,8 @@ void SigSession::set_device(shared_ptr<Device> device)
                        });
                update_signals(device);
        }
+
+       device_selected();
 }
 
 void SigSession::set_file(const string &name)
@@ -166,6 +168,7 @@ void SigSession::set_file(const string &name)
                });
        device_manager_.update_display_name(device_);
        update_signals(device_);
+       device_selected();
 }
 
 void SigSession::set_default_device()
@@ -418,8 +421,12 @@ shared_ptr<view::Signal> SigSession::signal_from_channel(
 
 void SigSession::read_sample_rate(shared_ptr<Device> device)
 {
-       uint64_t sample_rate = VariantBase::cast_dynamic<Variant<guint64>>(
-               device->config_get(ConfigKey::SAMPLERATE)).get();
+       const auto keys = device_->config_keys(ConfigKey::DEVICE_OPTIONS);
+       const auto iter = keys.find(ConfigKey::SAMPLERATE);
+       const uint64_t sample_rate = (iter != keys.end() &&
+               (*iter).second.find(sigrok::GET) != (*iter).second.end()) ?
+               VariantBase::cast_dynamic<Variant<guint64>>(
+                       device->config_get(ConfigKey::SAMPLERATE)).get() : 0;
 
        // Set the sample rate of all data
        const set< shared_ptr<data::SignalData> > data_set = get_data();
@@ -504,13 +511,14 @@ void SigSession::feed_in_logic(shared_ptr<Logic> logic)
                set_capture_state(Running);
 
                // Get sample limit.
-               uint64_t sample_limit;
-               try {
-                       sample_limit = VariantBase::cast_dynamic<Variant<guint64>>(
-                               device_->config_get(ConfigKey::LIMIT_SAMPLES)).get();
-               } catch (Error) {
-                       sample_limit = 0;
-               }
+               const auto keys = device_->config_keys(
+                       ConfigKey::DEVICE_OPTIONS);
+               const auto iter = keys.find(ConfigKey::LIMIT_SAMPLES);
+               const uint64_t sample_limit = (iter != keys.end() &&
+                       (*iter).second.find(sigrok::GET) !=
+                       (*iter).second.end()) ?
+                       VariantBase::cast_dynamic<Variant<guint64>>(
+                       device_->config_get(ConfigKey::LIMIT_SAMPLES)).get() : 0;
 
                // Create a new data snapshot
                cur_logic_snapshot_ = shared_ptr<data::LogicSnapshot>(