Session: Use Device::read_config to read sample limit
[pulseview.git] / pv / session.cpp
index e187a4d35245aecefe25b344433346595664c1f4..2a4814f807e2be19fe0c4aeef93d5abfb982e13f 100644 (file)
@@ -405,31 +405,13 @@ shared_ptr<view::Signal> Session::signal_from_channel(
        return shared_ptr<view::Signal>();
 }
 
-void Session::read_sample_rate(shared_ptr<sigrok::Device> device)
-{
-       assert(device);
-       map< const ConfigKey*, set<sigrok::Capability> > keys;
-
-       try {
-               keys = device->config_keys(ConfigKey::DEVICE_OPTIONS);
-       } catch (const Error) {}
-
-       const auto iter = keys.find(ConfigKey::SAMPLERATE);
-       cur_samplerate_ = (iter != keys.end() &&
-               (*iter).second.find(sigrok::GET) != (*iter).second.end()) ?
-               VariantBase::cast_dynamic<Variant<guint64>>(
-                       device->config_get(ConfigKey::SAMPLERATE)).get() : 0;
-}
-
 void Session::sample_thread_proc(shared_ptr<devices::Device> device,
        function<void (const QString)> error_handler)
 {
        assert(device);
        assert(error_handler);
 
-       const std::shared_ptr<sigrok::Device> sr_dev = device->device();
-       assert(sr_dev);
-       read_sample_rate(sr_dev);
+       cur_samplerate_ = device_->read_config<uint64_t>(ConfigKey::SAMPLERATE);
 
        try {
                device_->session()->start();
@@ -454,7 +436,7 @@ void Session::sample_thread_proc(shared_ptr<devices::Device> device,
 
 void Session::feed_in_header()
 {
-       read_sample_rate(device_->device());
+       cur_samplerate_ = device_->read_config<uint64_t>(ConfigKey::SAMPLERATE);
 }
 
 void Session::feed_in_meta(shared_ptr<Meta> meta)
@@ -495,18 +477,8 @@ void Session::feed_in_logic(shared_ptr<Logic> logic)
                set_capture_state(Running);
 
                // Get sample limit.
-               assert(device_);
-               const std::shared_ptr<sigrok::Device> device =
-                       device_->device();
-               assert(device);
-               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;
+               const uint64_t sample_limit = device_->read_config<uint64_t>(
+                       ConfigKey::LIMIT_SAMPLES);
 
                // Create a new data segment
                cur_logic_segment_ = shared_ptr<data::LogicSegment>(