+
+ signals_changed();
+}
+
+shared_ptr<view::Signal> Session::signal_from_channel(
+ shared_ptr<Channel> channel) const
+{
+ lock_guard<boost::shared_mutex> lock(signals_mutex_);
+ for (shared_ptr<view::Signal> sig : signals_) {
+ assert(sig);
+ if (sig->channel() == channel)
+ return sig;
+ }
+ return shared_ptr<view::Signal>();
+}
+
+void Session::read_sample_rate(shared_ptr<Device> device)
+{
+ 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();
+ for (shared_ptr<data::SignalData> data : data_set) {
+ assert(data);
+ data->set_samplerate(sample_rate);
+ }
+}
+
+void Session::sample_thread_proc(shared_ptr<Device> device,
+ function<void (const QString)> error_handler)
+{
+ assert(device);
+ assert(error_handler);
+
+ read_sample_rate(device);
+
+ try {
+ session_->start();
+ } catch(Error e) {
+ error_handler(e.what());
+ return;
+ }
+
+ set_capture_state(session_->trigger() ?
+ AwaitingTrigger : Running);
+
+ session_->run();
+ set_capture_state(Stopped);
+
+ // Confirm that SR_DF_END was received
+ if (cur_logic_snapshot_)
+ {
+ qDebug("SR_DF_END was not received.");
+ assert(0);
+ }
+}
+
+void Session::feed_in_header(shared_ptr<Device> device)
+{
+ read_sample_rate(device);