X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=pv%2Fviews%2Ftrace%2Fanalogsignal.cpp;h=0419b03b698eb208496e15b75957c2eb8b6d9663;hb=fb64180193664005567570724d52b685913e15ed;hp=2a2e2305b1b7e9b05c6ab4ed0240c7e61d010bcc;hpb=cc844e861276b56837c345d69975c50f009d57af;p=pulseview.git diff --git a/pv/views/trace/analogsignal.cpp b/pv/views/trace/analogsignal.cpp index 2a2e230..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 = @@ -1013,7 +1046,7 @@ void AnalogSignal::hover_point_changed(const QPoint &hp) } else { try { value_at_hover_pos_ = value_at_pixel_pos_.at(hp.x()); - } catch (out_of_range) { + } catch (out_of_range&) { value_at_hover_pos_ = std::numeric_limits::quiet_NaN(); } }