X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fsigsession.cpp;h=b93ecc85952ecc4053169782bd666bdd06cd968f;hp=cbb3192d6d2cffe92b24e97f15037b31d81e8ede;hb=a28c30252fd32d3185c62062dfad74ae659ae383;hpb=d873f4d685e16c708a15fcde12fbbec66650511c diff --git a/pv/sigsession.cpp b/pv/sigsession.cpp index cbb3192d..b93ecc85 100644 --- a/pv/sigsession.cpp +++ b/pv/sigsession.cpp @@ -215,7 +215,7 @@ bool SigSession::add_decoder(srd_decoder *const dec) // Create the decoder decoder_stack = shared_ptr( - new data::DecoderStack(dec)); + new data::DecoderStack(*this, dec)); // Make a list of all the probes std::vector all_probes; @@ -493,6 +493,12 @@ void SigSession::feed_in_meta(const sr_dev_inst *sdi, signals_changed(); } +void SigSession::feed_in_frame_begin() +{ + if (_cur_logic_snapshot || !_cur_analog_snapshots.empty()) + frame_began(); +} + void SigSession::feed_in_logic(const sr_datafeed_logic &logic) { lock_guard lock(_data_mutex); @@ -512,6 +518,12 @@ void SigSession::feed_in_logic(const sr_datafeed_logic &logic) _cur_logic_snapshot = shared_ptr( new data::LogicSnapshot(logic, _dev_inst->get_sample_limit())); _logic_data->push_snapshot(_cur_logic_snapshot); + + // @todo Putting this here means that only listeners querying + // for logic will be notified. Currently the only user of + // frame_began is DecoderStack, but in future we need to signal + // this after both analog and logic sweeps have begun. + frame_began(); } else { @@ -519,7 +531,7 @@ void SigSession::feed_in_logic(const sr_datafeed_logic &logic) _cur_logic_snapshot->append_payload(logic); } - data_updated(); + data_received(); } void SigSession::feed_in_analog(const sr_datafeed_analog &analog) @@ -580,7 +592,7 @@ void SigSession::feed_in_analog(const sr_datafeed_analog &analog) set_capture_state(Running); } - data_updated(); + data_received(); } void SigSession::data_feed_in(const struct sr_dev_inst *sdi, @@ -600,6 +612,10 @@ void SigSession::data_feed_in(const struct sr_dev_inst *sdi, *(const sr_datafeed_meta*)packet->payload); break; + case SR_DF_FRAME_BEGIN: + feed_in_frame_begin(); + break; + case SR_DF_LOGIC: assert(packet->payload); feed_in_logic(*(const sr_datafeed_logic*)packet->payload); @@ -617,7 +633,7 @@ void SigSession::data_feed_in(const struct sr_dev_inst *sdi, _cur_logic_snapshot.reset(); _cur_analog_snapshots.clear(); } - data_updated(); + frame_ended(); break; } }