X-Git-Url: http://git.code-monkey.de/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fviews%2Ftrace%2Fanalogsignal.cpp;h=0419b03b698eb208496e15b75957c2eb8b6d9663;hp=0994d92ed0eba4e30484abc79af17f8fec9512b0;hb=eeceee9955e7db4ac777d49d1b7a766069476b08;hpb=16a832bc5bb4cce24598537c99e0655edb65c1d0 diff --git a/pv/views/trace/analogsignal.cpp b/pv/views/trace/analogsignal.cpp index 0994d92..0419b03 100644 --- a/pv/views/trace/analogsignal.cpp +++ b/pv/views/trace/analogsignal.cpp @@ -62,6 +62,7 @@ using std::pair; using std::shared_ptr; using std::vector; +using pv::data::LogicSegment; using pv::data::SignalBase; using pv::util::SIPrefix; @@ -109,7 +110,8 @@ AnalogSignal::AnalogSignal( neg_vdivs_(1), resolution_(0), display_type_(DisplayBoth), - autoranging_(true) + autoranging_(true), + value_at_hover_pos_(std::numeric_limits::quiet_NaN()) { axis_pen_ = AxisPen; @@ -762,6 +764,37 @@ void AnalogSignal::update_conversion_widgets() conv_threshold_cb_->blockSignals(false); } +vector AnalogSignal::get_nearest_level_changes(uint64_t sample_pos) +{ + assert(base_); + assert(owner_); + + // Return if there's no logic data or we're showing only the analog trace + if (!base_->logic_data() || (display_type_ == DisplayAnalog)) + return vector(); + + if (sample_pos == 0) + return vector(); + + shared_ptr segment = get_logic_segment_to_paint(); + if (!segment || (segment->get_sample_count() == 0)) + return vector(); + + const View *view = owner_->view(); + assert(view); + const double samples_per_pixel = base_->get_samplerate() * view->scale(); + + vector edges; + + segment->get_surrounding_edges(edges, sample_pos, + samples_per_pixel / LogicSignal::Oversampling, 0); + + if (edges.empty()) + return vector(); + + return edges; +} + void AnalogSignal::perform_autoranging(bool keep_divs, bool force_update) { const deque< shared_ptr > &segments =