+ lock_guard<mutex> lock(_sampling_mutex);
+ return _capture_state;
+}
+
+void SigSession::start_capture(uint64_t record_length,
+ function<void (const QString)> error_handler)
+{
+ stop_capture();
+
+ // Check that a device instance has been selected.
+ if (!_sdi) {
+ qDebug() << "No device selected";
+ return;
+ }
+
+ // Check that at least one probe is enabled
+ const GSList *l;
+ for (l = _sdi->probes; l; l = l->next) {
+ sr_probe *const probe = (sr_probe*)l->data;
+ assert(probe);
+ if (probe->enabled)
+ break;
+ }
+
+ if (!l) {
+ error_handler(tr("No probes enabled."));
+ return;
+ }
+
+ // Begin the session
+ _sampling_thread.reset(new boost::thread(
+ &SigSession::sample_thread_proc, this, _sdi,
+ record_length, error_handler));
+}
+
+void SigSession::stop_capture()
+{
+ if (get_capture_state() == Stopped)
+ return;
+
+ sr_session_stop();
+
+ // Check that sampling stopped
+ if (_sampling_thread.get())
+ _sampling_thread->join();
+ _sampling_thread.reset();
+}
+
+vector< shared_ptr<view::Signal> > SigSession::get_signals()
+{
+ lock_guard<mutex> lock(_signals_mutex);