X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=pv%2Fsigsession.cpp;h=9af7df74e7a5f967023a20a62c4f6e68ed3d8c16;hb=2445d0b3d64ab051d8a686506910224f9f4e45c7;hp=622bf8d2c5b4dedf18143df7e5824282178c4995;hpb=945745012eb57cefa1ef457daf48cfffa99f9ec2;p=pulseview.git diff --git a/pv/sigsession.cpp b/pv/sigsession.cpp index 622bf8d..9af7df7 100644 --- a/pv/sigsession.cpp +++ b/pv/sigsession.cpp @@ -25,7 +25,7 @@ #include "sigsession.h" #include "devicemanager.h" -#include "device/devinst.h" +#include "device/device.h" #include "data/analog.h" #include "data/analogsnapshot.h" @@ -73,13 +73,14 @@ SigSession::SigSession(DeviceManager &device_manager) : SigSession::~SigSession() { + using pv::device::Device; + stop_capture(); if (_sampling_thread.joinable()) _sampling_thread.join(); - if (_dev_inst) - _device_manager.release_device(_dev_inst); + _dev_inst->release(); // TODO: This should not be necessary _session = NULL; @@ -92,20 +93,25 @@ shared_ptr SigSession::get_device() const void SigSession::set_device(shared_ptr dev_inst) { + using pv::device::Device; + // Ensure we are not capturing before setting the device stop_capture(); if (_dev_inst) - _device_manager.release_device(_dev_inst); + _dev_inst->release(); + if (dev_inst) - _device_manager.use_device(dev_inst, this); + dev_inst->use(this); + _dev_inst = dev_inst; update_signals(dev_inst); } -void SigSession::release_device(shared_ptr dev_inst) +void SigSession::release_device(device::DevInst *dev_inst) { (void)dev_inst; + assert(_dev_inst.get() == dev_inst); assert(_capture_state == Stopped); _dev_inst = shared_ptr(); @@ -127,7 +133,7 @@ void SigSession::load_file(const string &name, } shared_ptr dev_inst( - new device::DevInst((sr_dev_inst*)devlist->data)); + new device::Device((sr_dev_inst*)devlist->data)); g_slist_free(devlist); _decode_traces.clear(); @@ -147,7 +153,7 @@ void SigSession::load_file(const string &name, _decode_traces.clear(); update_signals(shared_ptr( - new device::DevInst(in->sdi))); + new device::Device(in->sdi))); read_sample_rate(in->sdi); _sampling_thread = boost::thread( @@ -473,20 +479,6 @@ void SigSession::update_signals(shared_ptr dev_inst) signals_changed(); } -bool SigSession::is_trigger_enabled() const -{ - assert(_dev_inst); - assert(_dev_inst->dev_inst()); - for (const GSList *l = _dev_inst->dev_inst()->probes; l; l = l->next) { - const sr_probe *const p = (const sr_probe *)l->data; - assert(p); - if (p->trigger && p->trigger[0] != '\0') - return true; - } - - return false; -} - shared_ptr SigSession::signal_from_probe( const sr_probe *probe) const { @@ -590,7 +582,8 @@ void SigSession::sample_thread_proc(shared_ptr dev_inst, return; } - set_capture_state(is_trigger_enabled() ? AwaitingTrigger : Running); + set_capture_state(dev_inst->is_trigger_enabled() ? + AwaitingTrigger : Running); sr_session_run(); sr_session_destroy();