Add SignalBase::clear_sample_data() and local samplerate values
authorSoeren Apel <soeren@apelpie.net>
Tue, 5 May 2020 16:21:46 +0000 (18:21 +0200)
committerSoeren Apel <soeren@apelpie.net>
Mon, 11 May 2020 19:24:22 +0000 (21:24 +0200)
pv/data/analog.cpp
pv/data/analog.hpp
pv/data/logic.cpp
pv/data/logic.hpp
pv/data/signalbase.cpp
pv/data/signalbase.hpp
pv/data/signaldata.hpp

index f8fe473d3681ebc31f0850d052af2d952d8fbae4..57d09502ae754503c507953e5e413e0102497e4d 100644 (file)
@@ -31,7 +31,8 @@ namespace pv {
 namespace data {
 
 Analog::Analog() :
-       SignalData()
+       SignalData(),
+       samplerate_(1)  // Default is 1 Hz to prevent division-by-zero errors
 {
 }
 
@@ -63,12 +64,14 @@ void Analog::clear()
        samples_cleared();
 }
 
-double Analog::get_samplerate() const
+void Analog::set_samplerate(double value)
 {
-       if (segments_.empty())
-               return 1.0;
+       samplerate_ = value;
+}
 
-       return segments_.front()->samplerate();
+double Analog::get_samplerate() const
+{
+       return samplerate_;
 }
 
 uint64_t Analog::max_sample_count() const
index c0b9a0134d72d9b5028f75b5d19040a71d81c991..026d80463dcd24562507f8ebea6d4b96776cc774 100644 (file)
@@ -53,6 +53,8 @@ public:
 
        void clear();
 
+       void set_samplerate(double value);
+
        double get_samplerate() const;
 
        uint64_t max_sample_count() const;
@@ -71,6 +73,7 @@ Q_SIGNALS:
        void min_max_changed(float min, float max);
 
 private:
+       double samplerate_;
        deque< shared_ptr<AnalogSegment> > segments_;
 };
 
index 516060a0aec9013c139f8597dc0bf9bfd70de6aa..7aefbf5f20f46af4c38736e2e4888f476396eaf1 100644 (file)
@@ -32,6 +32,7 @@ namespace data {
 
 Logic::Logic(unsigned int num_channels) :
        SignalData(),
+       samplerate_(1),  // Default is 1 Hz to prevent division-by-zero errors
        num_channels_(num_channels)
 {
        assert(num_channels_ > 0);
@@ -69,12 +70,14 @@ void Logic::clear()
        samples_cleared();
 }
 
-double Logic::get_samplerate() const
+void Logic::set_samplerate(double value)
 {
-       if (segments_.empty())
-               return 1.0;
+       samplerate_ = value;
+}
 
-       return segments_.front()->samplerate();
+double Logic::get_samplerate() const
+{
+       return samplerate_;
 }
 
 uint64_t Logic::max_sample_count() const
index e0fb7dd14dd05dab2dc93451d999350f0d6dd60f..18622c1e6391f7a4fe39e38a79c4aca2afecddd1 100644 (file)
@@ -54,6 +54,8 @@ public:
 
        void clear();
 
+       void set_samplerate(double value);
+
        double get_samplerate() const;
 
        uint64_t max_sample_count() const;
@@ -68,6 +70,7 @@ Q_SIGNALS:
                uint64_t end_sample);
 
 private:
+       double samplerate_;
        const unsigned int num_channels_;
        deque< shared_ptr<LogicSegment> > segments_;
 };
index fde99e2b4619a3cadf2b2acd01a862759c183d3f..d09615c8fc1130fb95fbf0f05629c50ec8c918a8 100644 (file)
@@ -185,6 +185,15 @@ void SignalBase::set_data(shared_ptr<pv::data::SignalData> data)
        }
 }
 
+void SignalBase::clear_sample_data()
+{
+       if (analog_data())
+               analog_data()->clear();
+
+       if (logic_data())
+               logic_data()->clear();
+}
+
 shared_ptr<data::Analog> SignalBase::analog_data() const
 {
        shared_ptr<Analog> result = nullptr;
index 6decf26e6a96c3af654743f0724b0ec1c2ee7408..d6f11d82929ca40584cfbcaa78b5c154d3188bef 100644 (file)
@@ -171,6 +171,11 @@ public:
         */
        void set_data(shared_ptr<pv::data::SignalData> data);
 
+       /**
+        * Clears all sample data and removes all associated segments.
+        */
+       void clear_sample_data();
+
        /**
         * Get the internal data as analog data object in case of analog type.
         */
index 5168fee8e4b58fb6c75dec7afe26364a4709d47a..6d2283abeaddc962d6529dc1b9150df94a459428 100644 (file)
@@ -51,6 +51,8 @@ public:
 
        virtual uint64_t max_sample_count() const = 0;
 
+       virtual void set_samplerate(double value) = 0;
+
        virtual double get_samplerate() const = 0;
 };