X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fsession.cpp;h=ca72e9b0d670fed6a14da47d4c7c2ce79946c078;hp=c18575ad415559a8e66fa0fae7a6b65774a53c59;hb=7ea2a4ff0765fdad34b84e4b4631d6f3f5588714;hpb=89914a8657612761ff962ee973721a4872cda8d7 diff --git a/pv/session.cpp b/pv/session.cpp index c18575ad..ca72e9b0 100644 --- a/pv/session.cpp +++ b/pv/session.cpp @@ -567,6 +567,8 @@ void Session::start_capture(function error_handler) for (const shared_ptr d : all_signal_data_) d->clear(); + trigger_list_.clear(); + // Revert name back to default name (e.g. "Session 1") for real devices // as the (possibly saved) data is gone. File devices keep their name. shared_ptr hw_device = @@ -689,6 +691,17 @@ uint32_t Session::get_segment_count() const return value; } +vector Session::get_triggers(uint32_t segment_id) const +{ + vector result; + + for (pair entry : trigger_list_) + if (entry.first == segment_id) + result.push_back(entry.second); + + return result; +} + const unordered_set< shared_ptr > Session::signalbases() const { return signalbases_; @@ -917,6 +930,7 @@ void Session::sample_thread_proc(function error_handler) cur_analog_segments_.clear(); } highest_segment_id_ = -1; + frame_began_ = false; try { device_->start(); @@ -1066,7 +1080,13 @@ void Session::feed_in_trigger() } } - trigger_event(sample_count / get_samplerate()); + // If no frame began then this is a trigger for a new segment + const uint32_t segment_id = + (frame_began_) ? highest_segment_id_ : (highest_segment_id_ + 1); + + util::Timestamp timestamp = sample_count / get_samplerate(); + trigger_list_.emplace_back(segment_id, timestamp); + trigger_event(segment_id, timestamp); } void Session::feed_in_frame_begin() @@ -1094,8 +1114,7 @@ void Session::feed_in_frame_end() cur_analog_segments_.clear(); } - if (frame_began_) - frame_began_ = false; + frame_began_ = false; signal_segment_completed(); }