]> sigrok.org Git - pulseview.git/blobdiff - pv/data/signalbase.cpp
MathSignal: Rename sig_sample() to sample()
[pulseview.git] / pv / data / signalbase.cpp
index 274de1a12667350a2acb1ad5ca7f2959958610b3..94e1f6a6c03a8f86318bfaf35d9c14fb572bb290 100644 (file)
@@ -123,7 +123,8 @@ SignalBase::SignalBase(shared_ptr<sigrok::Channel> channel, ChannelType channel_
        group_(nullptr),
        conversion_type_(NoConversion),
        min_value_(0),
-       max_value_(0)
+       max_value_(0),
+       error_message_("")
 {
        if (channel_) {
                internal_name_ = QString::fromStdString(channel_->name());
@@ -258,6 +259,11 @@ QColor SignalBase::bgcolor() const
        return bgcolor_;
 }
 
+QString SignalBase::get_error_message() const
+{
+       return error_message_;
+}
+
 void SignalBase::set_data(shared_ptr<pv::data::SignalData> data)
 {
        if (data_) {
@@ -676,6 +682,7 @@ void SignalBase::convert_single_segment_range(shared_ptr<AnalogSegment> asegment
 
                                lsegment->append_payload(logic->data_pointer(), logic->data_length());
                                samples_added(lsegment->segment_id(), i, i + ConversionBlockSize);
+
                                i += ConversionBlockSize;
                        }
 
@@ -778,6 +785,7 @@ void SignalBase::conversion_thread_proc()
                // Only advance to next segment if the current input segment is complete
                if (asegment->is_complete() &&
                        analog_data->analog_segments().size() > logic_data->logic_segments().size()) {
+
                        // There are more segments to process
                        segment_id++;
 
@@ -794,12 +802,12 @@ void SignalBase::conversion_thread_proc()
                        logic_data->push_segment(new_segment);
 
                        lsegment = logic_data->logic_segments().back();
-               } else {
-                       // No more samples/segments to process, wait for data or interrupt
-                       if (!conversion_interrupt_) {
-                               unique_lock<mutex> input_lock(conversion_input_mutex_);
-                               conversion_input_cond_.wait(input_lock);
-                       }
+               }
+
+               // No more samples/segments to process, wait for data or interrupt
+               if (!conversion_interrupt_) {
+                       unique_lock<mutex> input_lock(conversion_input_mutex_);
+                       conversion_input_cond_.wait(input_lock);
                }
        } while (!conversion_interrupt_);
 }
@@ -815,11 +823,20 @@ void SignalBase::start_conversion(bool delayed_start)
 
        if (converted_data_)
                converted_data_->clear();
+
        samples_cleared();
 
        conversion_interrupt_ = false;
-       conversion_thread_ = std::thread(
-               &SignalBase::conversion_thread_proc, this);
+       conversion_thread_ = std::thread(&SignalBase::conversion_thread_proc, this);
+}
+
+void SignalBase::set_error_message(QString msg)
+{
+       error_message_ = msg;
+       // TODO Emulate noquote()
+       qDebug().nospace() << name() << ": " << msg;
+
+       error_message_changed(msg);
 }
 
 void SignalBase::stop_conversion()