X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=pv%2Fsigsession.cpp;h=201892889abf97d05823529d8d3cf7e191eb0a2b;hb=300fc11ea8ec416b31c7dbc3d3d52277af24d1b7;hp=1d13de2a7fad3f786cb7f0e8dce8e30c86138f4f;hpb=f9abf97e78bc4825d80926b0ebc6cbaef40768b1;p=pulseview.git diff --git a/pv/sigsession.cpp b/pv/sigsession.cpp index 1d13de2a..20189288 100644 --- a/pv/sigsession.cpp +++ b/pv/sigsession.cpp @@ -39,18 +39,18 @@ #include "view/decodetrace.h" #include "view/logicsignal.h" -#include - +#include +#include #include #include #include -using boost::function; -using boost::lock_guard; -using boost::mutex; using std::dynamic_pointer_cast; +using std::function; +using std::lock_guard; +using std::mutex; using std::list; using std::map; using std::set; @@ -63,6 +63,9 @@ namespace pv { // TODO: This should not be necessary SigSession* SigSession::_session = NULL; +// TODO: This should not be necessary +struct sr_session *SigSession::_sr_session = NULL; + SigSession::SigSession(DeviceManager &device_manager) : _device_manager(device_manager), _capture_state(Stopped) @@ -77,12 +80,11 @@ SigSession::~SigSession() { using pv::device::Device; + // Stop and join to the thread stop_capture(); - if (_sampling_thread.joinable()) - _sampling_thread.join(); - - _dev_inst->release(); + if (_dev_inst) + _dev_inst->release(); // TODO: This should not be necessary _session = NULL; @@ -102,7 +104,7 @@ void SigSession::set_device( stop_capture(); if (_dev_inst) { - sr_session_datafeed_callback_remove_all(); + sr_session_datafeed_callback_remove_all(_sr_session); _dev_inst->release(); } @@ -111,7 +113,7 @@ void SigSession::set_device( if (dev_inst) { dev_inst->use(this); - sr_session_datafeed_callback_add(data_feed_in_proc, NULL); + sr_session_datafeed_callback_add(_sr_session, data_feed_in_proc, NULL); update_signals(dev_inst); } } @@ -188,17 +190,15 @@ void SigSession::start_capture(function error_handler) } // Begin the session - _sampling_thread = boost::thread( + _sampling_thread = std::thread( &SigSession::sample_thread_proc, this, _dev_inst, error_handler); } void SigSession::stop_capture() { - if (get_capture_state() == Stopped) - return; - - sr_session_stop(); + if (get_capture_state() != Stopped) + sr_session_stop(_sr_session); // Check that sampling stopped if (_sampling_thread.joinable()) @@ -448,7 +448,7 @@ void SigSession::sample_thread_proc(shared_ptr dev_inst, return; } - set_capture_state(dev_inst->is_trigger_enabled() ? + set_capture_state(sr_session_trigger_get(_sr_session) ? AwaitingTrigger : Running); dev_inst->run();