X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=pv%2Fsession.cpp;h=4d72af3347472d530533ccf08ec78ed576713d94;hb=0fb98cf80d570478f2c4b97adcb3a12318993464;hp=c18575ad415559a8e66fa0fae7a6b65774a53c59;hpb=89914a8657612761ff962ee973721a4872cda8d7;p=pulseview.git diff --git a/pv/session.cpp b/pv/session.cpp index c18575a..4d72af3 100644 --- a/pv/session.cpp +++ b/pv/session.cpp @@ -426,7 +426,7 @@ void Session::set_default_device() // Try and find the demo device and select that by default const auto iter = find_if(devices.begin(), devices.end(), [] (const shared_ptr &d) { - return d->hardware_device()->driver()->name() == "demo"; }); + return d->hardware_device()->driver()->name() == "demo"; }); set_device((iter == devices.end()) ? devices.front() : *iter); } @@ -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(); }