X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fsigsession.cpp;h=ac9c052b3bf9b8d50e66adac02efc670359fac4d;hp=5ba2e5da06e1a366990824c7b8989526381f0631;hb=ab973f4729258b729d2aa84abfa14b61609fa35e;hpb=5ab6596d54521dcada4ae03fc593b6733d3735e8 diff --git a/pv/sigsession.cpp b/pv/sigsession.cpp index 5ba2e5da..ac9c052b 100644 --- a/pv/sigsession.cpp +++ b/pv/sigsession.cpp @@ -39,24 +39,22 @@ #include "view/decodetrace.h" #include "view/logicsignal.h" -#include - +#include +#include #include -#include - #include #include -using boost::dynamic_pointer_cast; -using boost::function; -using boost::lock_guard; -using boost::mutex; -using boost::shared_ptr; +using std::dynamic_pointer_cast; +using std::function; +using std::lock_guard; +using std::mutex; using std::list; using std::map; using std::set; +using std::shared_ptr; using std::string; using std::vector; @@ -65,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) @@ -79,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; @@ -100,11 +100,14 @@ void SigSession::set_device( { using pv::device::Device; + if (!dev_inst) + return; + // Ensure we are not capturing before setting the device stop_capture(); if (_dev_inst) { - sr_session_datafeed_callback_remove_all(); + sr_session_datafeed_callback_remove_all(_sr_session); _dev_inst->release(); } @@ -113,7 +116,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); } } @@ -137,7 +140,7 @@ void SigSession::set_default_device() default_device = devices.front(); // Try and find the demo device and select that by default - BOOST_FOREACH (shared_ptr dev, devices) + for (shared_ptr dev : devices) if (strcmp(dev->dev_inst()->driver->name, "demo") == 0) { default_device = dev; @@ -190,17 +193,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()) @@ -211,7 +212,7 @@ set< shared_ptr > SigSession::get_data() const { lock_guard lock(_signals_mutex); set< shared_ptr > data; - BOOST_FOREACH(const shared_ptr sig, _signals) { + for (const shared_ptr sig : _signals) { assert(sig); data.insert(sig->data()); } @@ -247,8 +248,8 @@ bool SigSession::add_decoder(srd_decoder *const dec) all_probes.push_back((const srd_channel*)i->data); // Auto select the initial probes - BOOST_FOREACH(const srd_channel *pdch, all_probes) - BOOST_FOREACH(shared_ptr s, _signals) + for (const srd_channel *pdch : all_probes) + for (shared_ptr s : _signals) { shared_ptr l = dynamic_pointer_cast(s); @@ -290,10 +291,7 @@ vector< shared_ptr > SigSession::get_decode_signals() const void SigSession::remove_decode_signal(view::DecodeTrace *signal) { - for (vector< shared_ptr >::iterator i = - _decode_traces.begin(); - i != _decode_traces.end(); - i++) + for (auto i = _decode_traces.begin(); i != _decode_traces.end(); i++) if ((*i).get() == signal) { _decode_traces.erase(i); @@ -402,7 +400,7 @@ shared_ptr SigSession::signal_from_probe( const sr_channel *probe) const { lock_guard lock(_signals_mutex); - BOOST_FOREACH(shared_ptr sig, _signals) { + for (shared_ptr sig : _signals) { assert(sig); if (sig->probe() == probe) return sig; @@ -431,7 +429,7 @@ void SigSession::read_sample_rate(const sr_dev_inst *const sdi) // Set the sample rate of all data const set< shared_ptr > data_set = get_data(); - BOOST_FOREACH(shared_ptr data, data_set) { + for (shared_ptr data : data_set) { assert(data); data->set_samplerate(sample_rate); } @@ -453,7 +451,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();