X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=pv%2Fsigsession.cpp;h=cbdbac07c2031d6232af8089bbf51b7f25d403ac;hb=931f20b0dbd480153611493f51fee68f9d29be74;hp=0de7c4a7a3bddec86a758bb3d99cf93db7251b37;hpb=cec48d1618edd0f28f21d5351f53692876222e16;p=pulseview.git diff --git a/pv/sigsession.cpp b/pv/sigsession.cpp index 0de7c4a7..cbdbac07 100644 --- a/pv/sigsession.cpp +++ b/pv/sigsession.cpp @@ -164,8 +164,10 @@ boost::shared_ptr SigSession::get_data() void SigSession::set_capture_state(capture_state state) { lock_guard lock(_sampling_mutex); + const bool changed = _capture_state != state; _capture_state = state; - capture_state_changed(state); + if(changed) + capture_state_changed(state); } /** @@ -304,13 +306,13 @@ void SigSession::update_signals() switch(probe->type) { case SR_PROBE_LOGIC: signal = shared_ptr( - new view::LogicSignal(probe, + new view::LogicSignal(*this, probe, _logic_data)); break; case SR_PROBE_ANALOG: signal = shared_ptr( - new view::AnalogSignal(probe, + new view::AnalogSignal(*this, probe, _analog_data)); break; } @@ -323,6 +325,19 @@ void SigSession::update_signals() signals_changed(); } +bool SigSession::is_trigger_enabled() const +{ + assert(_sdi); + for (const GSList *l = _sdi->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; +} + void SigSession::load_thread_proc(const string name, function error_handler) { @@ -387,7 +402,7 @@ void SigSession::sample_thread_proc(struct sr_dev_inst *sdi, return; } - set_capture_state(Running); + set_capture_state(is_trigger_enabled() ? AwaitingTrigger : Running); sr_session_run(); sr_session_destroy(); @@ -455,6 +470,8 @@ void SigSession::feed_in_logic(const sr_datafeed_logic &logic) if (!_cur_logic_snapshot) { + set_capture_state(Running); + // Create a new data snapshot _cur_logic_snapshot = shared_ptr( new data::LogicSnapshot(logic)); @@ -481,6 +498,8 @@ void SigSession::feed_in_analog(const sr_datafeed_analog &analog) if (!_cur_analog_snapshot) { + set_capture_state(Running); + // Create a new data snapshot _cur_analog_snapshot = shared_ptr( new data::AnalogSnapshot(analog));