X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=pv%2Fdata%2Fsignalbase.cpp;h=3c0305a533b343f79c13627eecb52a35403119af;hb=d3feec232211b3acec6a323ca3b8008ed8b2faa0;hp=09e4400e20a9d1584ca88dc6caa7d8974ddd3bb4;hpb=27a3f09baf61c7f9b8c07630d34df75ddfdd476b;p=pulseview.git diff --git a/pv/data/signalbase.cpp b/pv/data/signalbase.cpp index 09e4400..3c0305a 100644 --- a/pv/data/signalbase.cpp +++ b/pv/data/signalbase.cpp @@ -181,10 +181,18 @@ void SignalBase::set_conversion_type(ConversionType t) // Discard converted data converted_data_.reset(); + samples_cleared(); } conversion_type_ = t; + // Re-create an empty container + // so that the signal is recognized as providing logic data + // and thus can be assigned to a decoder + if (conversion_is_a2l()) + if (!converted_data_) + converted_data_ = make_shared(1); // Contains only one channel + start_conversion(); conversion_type_changed(t); @@ -229,6 +237,13 @@ uint8_t SignalBase::convert_a2l_schmitt_trigger(float lo_thr, float hi_thr, return state; } +bool SignalBase::conversion_is_a2l() const +{ + return ((channel_type_ == AnalogChannel) && + ((conversion_type_ == A2LConversionByTreshold) || + (conversion_type_ == A2LConversionBySchmittTrigger))); +} + void SignalBase::conversion_thread_proc(QObject* segment) { // TODO Support for multiple segments is missing @@ -237,19 +252,11 @@ void SignalBase::conversion_thread_proc(QObject* segment) start_sample = end_sample = 0; do { - if ((channel_type_ == AnalogChannel) && - ((conversion_type_ == A2LConversionByTreshold) || - (conversion_type_ == A2LConversionBySchmittTrigger))) { + if (conversion_is_a2l()) { AnalogSegment *asegment = qobject_cast(segment); - // Create the logic data container if needed - shared_ptr logic_data; - if (!converted_data_) { - logic_data = make_shared(1); // Contains only one channel - converted_data_ = logic_data; - } else - logic_data = dynamic_pointer_cast(converted_data_); + const shared_ptr logic_data = dynamic_pointer_cast(converted_data_); // Create the initial logic data segment if needed if (logic_data->segments().size() == 0) { @@ -339,10 +346,7 @@ void SignalBase::start_conversion() { stop_conversion(); - if ((channel_type_ == AnalogChannel) && - ((conversion_type_ == A2LConversionByTreshold) || - (conversion_type_ == A2LConversionBySchmittTrigger))) { - + if (conversion_is_a2l()) { shared_ptr analog_data = dynamic_pointer_cast(data_); if (analog_data->analog_segments().size() > 0) {