]> sigrok.org Git - pulseview.git/blobdiff - pv/data/logicsnapshot.cpp
Use libsigrok C++ bindings (patch version 7).
[pulseview.git] / pv / data / logicsnapshot.cpp
index 3bd43c9208182e92bed8d46b8bea108d1e1af4c5..a00a22ede0cd33ee5aa3b43042f51b59c37d8376 100644 (file)
 #include "config.h"
 #include "logicsnapshot.h"
 
+#include <libsigrok/libsigrok.hpp>
+
 using std::lock_guard;
 using std::recursive_mutex;
 using std::max;
 using std::min;
 using std::pair;
+using std::shared_ptr;
+
+using sigrok::Logic;
 
 namespace pv {
 namespace data {
@@ -42,9 +47,9 @@ const int LogicSnapshot::MipMapScaleFactor = 1 << MipMapScalePower;
 const float LogicSnapshot::LogMipMapScaleFactor = logf(MipMapScaleFactor);
 const uint64_t LogicSnapshot::MipMapDataUnit = 64*1024;        // bytes
 
-LogicSnapshot::LogicSnapshot(const sr_datafeed_logic &logic,
+LogicSnapshot::LogicSnapshot(shared_ptr<Logic> logic,
                              const uint64_t expected_num_samples) :
-       Snapshot(logic.unitsize),
+       Snapshot(logic->unit_size()),
        _last_append_sample(0)
 {
        set_capacity(expected_num_samples);
@@ -135,15 +140,15 @@ void LogicSnapshot::pack_sample(uint8_t *ptr, uint64_t value)
 #endif
 }
 
-void LogicSnapshot::append_payload(
-       const sr_datafeed_logic &logic)
+void LogicSnapshot::append_payload(shared_ptr<Logic> logic)
 {
-       assert(_unit_size == logic.unitsize);
-       assert((logic.length % _unit_size) == 0);
+       assert(_unit_size == logic->unit_size());
+       assert((logic->data_length() % _unit_size) == 0);
 
        lock_guard<recursive_mutex> lock(_mutex);
 
-       append_data(logic.data, logic.length / _unit_size);
+       append_data(logic->data_pointer(),
+               logic->data_length() / _unit_size);
 
        // Generate the first mip-map from the data
        append_payload_to_mipmap();
@@ -162,7 +167,7 @@ void LogicSnapshot::get_samples(uint8_t *const data,
        lock_guard<recursive_mutex> lock(_mutex);
 
        const size_t size = (end_sample - start_sample) * _unit_size;
-       memcpy(data, (const uint8_t*)_data + start_sample * _unit_size, size);
+       memcpy(data, (const uint8_t*)_data.data() + start_sample * _unit_size, size);
 }
 
 void LogicSnapshot::reallocate_mipmap_level(MipMapLevel &m)
@@ -201,9 +206,9 @@ void LogicSnapshot::append_payload_to_mipmap()
        dest_ptr = (uint8_t*)m0.data + prev_length * _unit_size;
 
        // Iterate through the samples to populate the first level mipmap
-       const uint8_t *const end_src_ptr = (uint8_t*)_data +
+       const uint8_t *const end_src_ptr = (uint8_t*)_data.data() +
                m0.length * _unit_size * MipMapScaleFactor;
-       for (src_ptr = (uint8_t*)_data +
+       for (src_ptr = (uint8_t*)_data.data() +
                prev_length * _unit_size * MipMapScaleFactor;
                src_ptr < end_src_ptr;)
        {
@@ -263,10 +268,9 @@ void LogicSnapshot::append_payload_to_mipmap()
 
 uint64_t LogicSnapshot::get_sample(uint64_t index) const
 {
-       assert(_data);
        assert(index < _sample_count);
 
-       return unpack_sample((uint8_t*)_data + index * _unit_size);
+       return unpack_sample((uint8_t*)_data.data() + index * _unit_size);
 }
 
 void LogicSnapshot::get_subsampled_edges(