+
+ signals_changed();
+}
+
+shared_ptr<view::Signal> SigSession::signal_from_channel(
+ shared_ptr<Channel> channel) const
+{
+ lock_guard<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 SigSession::read_sample_rate(shared_ptr<Device> device)
+{
+ uint64_t sample_rate = VariantBase::cast_dynamic<Variant<guint64>>(
+ device->config_get(ConfigKey::SAMPLERATE)).get();
+
+ // 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 SigSession::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 SigSession::feed_in_header(shared_ptr<Device> device)
+{
+ read_sample_rate(device);