]> sigrok.org Git - pulseview.git/blobdiff - pv/data/logicsnapshot.cpp
Added support for save
[pulseview.git] / pv / data / logicsnapshot.cpp
index af6ac0e8c367a097372aeea376cef6c101785e8b..177c66279bf0a1fa079f82b3da0d22a8f537ee86 100644 (file)
 
 #include "logicsnapshot.h"
 
-using namespace boost;
-using namespace std;
+using boost::lock_guard;
+using boost::recursive_mutex;
+using std::max;
+using std::min;
+using std::pair;
 
 namespace pv {
 namespace data {
@@ -70,7 +73,23 @@ void LogicSnapshot::append_payload(
        append_payload_to_mipmap();
 }
 
-void LogicSnapshot::reallocate_mip_map(MipMapLevel &m)
+void LogicSnapshot::get_samples(uint8_t *const data,
+       int64_t start_sample, int64_t end_sample) const
+{
+       assert(data);
+       assert(start_sample >= 0);
+       assert(start_sample <= (int64_t)_sample_count);
+       assert(end_sample >= 0);
+       assert(end_sample <= (int64_t)_sample_count);
+       assert(start_sample <= end_sample);
+
+       lock_guard<recursive_mutex> lock(_mutex);
+
+       const size_t size = (end_sample - start_sample) * _unit_size;
+       memcpy(data, (const uint8_t*)_data + start_sample, size);
+}
+
+void LogicSnapshot::reallocate_mipmap_level(MipMapLevel &m)
 {
        const uint64_t new_data_length = ((m.length + MipMapDataUnit - 1) /
                MipMapDataUnit) * MipMapDataUnit;
@@ -101,14 +120,12 @@ void LogicSnapshot::append_payload_to_mipmap()
        if (m0.length == prev_length)
                return;
 
-       reallocate_mip_map(m0);
+       reallocate_mipmap_level(m0);
 
        dest_ptr = (uint8_t*)m0.data + prev_length * _unit_size;
 
        // Iterate through the samples to populate the first level mipmap
-       accumulator = 0;
-       diff_counter = MipMapScaleFactor;
-       const uint8_t *end_src_ptr = (uint8_t*)_data +
+       const uint8_t *const end_src_ptr = (uint8_t*)_data +
                m0.length * _unit_size * MipMapScaleFactor;
        for (src_ptr = (uint8_t*)_data +
                prev_length * _unit_size * MipMapScaleFactor;
@@ -143,12 +160,12 @@ void LogicSnapshot::append_payload_to_mipmap()
                if (m.length == prev_length)
                        break;
 
-               reallocate_mip_map(m);
+               reallocate_mipmap_level(m);
 
                // Subsample the level lower level
                src_ptr = (uint8_t*)ml.data +
                        _unit_size * prev_length * MipMapScaleFactor;
-               const uint8_t *end_dest_ptr =
+               const uint8_t *const end_dest_ptr =
                        (uint8_t*)m.data + _unit_size * m.length;
                for (dest_ptr = (uint8_t*)m.data +
                        _unit_size * prev_length;
@@ -190,7 +207,7 @@ void LogicSnapshot::get_subsampled_edges(
        assert(start <= end);
        assert(min_length > 0);
        assert(sig_index >= 0);
-       assert(sig_index < SR_MAX_NUM_PROBES);
+       assert(sig_index < 64);
 
        lock_guard<recursive_mutex> lock(_mutex);