From: Soeren Apel Date: Tue, 1 Aug 2017 19:35:15 +0000 (+0200) Subject: Use identifiers for fixed conversion preset values X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=commitdiff_plain;h=f0f9c8566ba4992e3a3b71afd521da3278f37b7b Use identifiers for fixed conversion preset values --- diff --git a/pv/data/signalbase.cpp b/pv/data/signalbase.cpp index 797bd456..fe7c584b 100644 --- a/pv/data/signalbase.cpp +++ b/pv/data/signalbase.cpp @@ -244,33 +244,33 @@ vector SignalBase::get_conversion_thresholds(const ConversionType t, { vector result; ConversionType conv_type = t; - int preset; + ConversionPreset preset; // Use currently active conversion if no conversion type was supplied if (conv_type == NoConversion) conv_type = conversion_type_; if (always_custom) - preset = -1; + preset = NoPreset; else preset = get_current_conversion_preset(); if (conv_type == A2LConversionByThreshold) { double thr = 0; - if (preset == -1) { + if (preset == NoPreset) { auto thr_iter = conversion_options_.find("threshold_value"); if (thr_iter != conversion_options_.end()) thr = (thr_iter->second).toDouble(); } - if (preset == 0) + if (preset == DynamicPreset) thr = (min_value_ + max_value_) * 0.5; // middle between min and max - if (preset == 1) thr = 0.9; - if (preset == 2) thr = 1.8; - if (preset == 3) thr = 2.5; - if (preset == 4) thr = 1.5; + if ((int)preset == 1) thr = 0.9; + if ((int)preset == 2) thr = 1.8; + if ((int)preset == 3) thr = 2.5; + if ((int)preset == 4) thr = 1.5; result.push_back(thr); } @@ -278,7 +278,7 @@ vector SignalBase::get_conversion_thresholds(const ConversionType t, if (conv_type == A2LConversionBySchmittTrigger) { double thr_lo = 0, thr_hi = 0; - if (preset == -1) { + if (preset == NoPreset) { auto thr_lo_iter = conversion_options_.find("threshold_value_low"); if (thr_lo_iter != conversion_options_.end()) thr_lo = (thr_lo_iter->second).toDouble(); @@ -288,17 +288,17 @@ vector SignalBase::get_conversion_thresholds(const ConversionType t, thr_hi = (thr_hi_iter->second).toDouble(); } - if (preset == 0) { + if (preset == DynamicPreset) { const double amplitude = max_value_ - min_value_; const double center = min_value_ + (amplitude / 2); thr_lo = center - (amplitude * 0.15); // 15% margin thr_hi = center + (amplitude * 0.15); // 15% margin } - if (preset == 1) { thr_lo = 0.3; thr_hi = 1.2; } - if (preset == 2) { thr_lo = 0.7; thr_hi = 2.5; } - if (preset == 3) { thr_lo = 1.3; thr_hi = 3.7; } - if (preset == 4) { thr_lo = 0.8; thr_hi = 2.0; } + if ((int)preset == 1) { thr_lo = 0.3; thr_hi = 1.2; } + if ((int)preset == 2) { thr_lo = 0.7; thr_hi = 2.5; } + if ((int)preset == 3) { thr_lo = 1.3; thr_hi = 3.7; } + if ((int)preset == 4) { thr_lo = 0.8; thr_hi = 2.0; } result.push_back(thr_lo); result.push_back(thr_hi); @@ -332,18 +332,18 @@ vector< pair > SignalBase::get_conversion_presets() const return presets; } -int SignalBase::get_current_conversion_preset() const +SignalBase::ConversionPreset SignalBase::get_current_conversion_preset() const { auto preset = conversion_options_.find("preset"); if (preset != conversion_options_.end()) - return (preset->second).toInt(); + return (ConversionPreset)((preset->second).toInt()); - return -1; + return NoPreset; } -void SignalBase::set_conversion_preset(int id) +void SignalBase::set_conversion_preset(ConversionPreset id) { - conversion_options_["preset"] = id; + conversion_options_["preset"] = (int)id; } #ifdef ENABLE_DECODE @@ -581,9 +581,9 @@ void SignalBase::on_min_max_changed(float min, float max) (void)min; (void)max; - // Restart conversion if one is enabled and uses an automatic threshold + // Restart conversion if one is enabled and uses a calculated threshold if ((conversion_type_ != NoConversion) && - (get_current_conversion_preset() == 0)) + (get_current_conversion_preset() == DynamicPreset)) start_conversion(); } diff --git a/pv/data/signalbase.hpp b/pv/data/signalbase.hpp index 32085a43..1675ed0a 100644 --- a/pv/data/signalbase.hpp +++ b/pv/data/signalbase.hpp @@ -73,6 +73,16 @@ public: A2LConversionBySchmittTrigger = 2 }; + /** + * Conversion presets range from -1 to n, where 1..n are dependent on + * the conversion these presets apply to. -1 and 0 have fixed meanings, + * however. + */ + enum ConversionPreset { + NoPreset = -1, ///< Conversion uses custom values + DynamicPreset = 0 ///< Conversion uses calculated values + }; + private: static const int ColourBGAlpha; static const uint64_t ConversionBlockSize; @@ -227,7 +237,7 @@ public: * @return the ID of the currently used conversion preset. -1 if no preset * is used. In that case, a user setting is used instead. */ - int get_current_conversion_preset() const; + ConversionPreset get_current_conversion_preset() const; /** * Sets the conversion preset to be used. @@ -236,7 +246,7 @@ public: * * @param id the id of the preset to use */ - void set_conversion_preset(int id); + void set_conversion_preset(ConversionPreset id); #ifdef ENABLE_DECODE bool is_decode_signal() const; diff --git a/pv/views/trace/analogsignal.cpp b/pv/views/trace/analogsignal.cpp index 323a2434..2ea5ffc5 100644 --- a/pv/views/trace/analogsignal.cpp +++ b/pv/views/trace/analogsignal.cpp @@ -1050,7 +1050,7 @@ void AnalogSignal::on_conv_threshold_changed(int index) delayed_conversion_starter_.start(); } - base_->set_conversion_preset(index); + base_->set_conversion_preset((SignalBase::ConversionPreset)index); // Immediately start the conversion if we're not asking for a delayed reaction if (!delayed_conversion_starter_.isActive())