projects
/
pulseview.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Use libsigrok C++ bindings (patch version 7).
[pulseview.git]
/
pv
/
data
/
logicsnapshot.cpp
diff --git
a/pv/data/logicsnapshot.cpp
b/pv/data/logicsnapshot.cpp
index a1beafb9c4e4e3e3c50a111077e62fd3c2d261d5..a00a22ede0cd33ee5aa3b43042f51b59c37d8376 100644
(file)
--- a/
pv/data/logicsnapshot.cpp
+++ b/
pv/data/logicsnapshot.cpp
@@
-25,15
+25,19
@@
#include <stdlib.h>
#include <math.h>
#include <stdlib.h>
#include <math.h>
-#include <boost/foreach.hpp>
-
+#include "config.h"
#include "logicsnapshot.h"
#include "logicsnapshot.h"
-using boost::lock_guard;
-using boost::recursive_mutex;
+#include <libsigrok/libsigrok.hpp>
+
+using std::lock_guard;
+using std::recursive_mutex;
using std::max;
using std::min;
using std::pair;
using std::max;
using std::min;
using std::pair;
+using std::shared_ptr;
+
+using sigrok::Logic;
namespace pv {
namespace data {
namespace pv {
namespace data {
@@
-43,9
+47,9
@@
const int LogicSnapshot::MipMapScaleFactor = 1 << MipMapScalePower;
const float LogicSnapshot::LogMipMapScaleFactor = logf(MipMapScaleFactor);
const uint64_t LogicSnapshot::MipMapDataUnit = 64*1024; // bytes
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) :
const uint64_t expected_num_samples) :
- Snapshot(logic
.unitsize
),
+ Snapshot(logic
->unit_size()
),
_last_append_sample(0)
{
set_capacity(expected_num_samples);
_last_append_sample(0)
{
set_capacity(expected_num_samples);
@@
-58,12
+62,15
@@
LogicSnapshot::LogicSnapshot(const sr_datafeed_logic &logic,
LogicSnapshot::~LogicSnapshot()
{
lock_guard<recursive_mutex> lock(_mutex);
LogicSnapshot::~LogicSnapshot()
{
lock_guard<recursive_mutex> lock(_mutex);
-
BOOST_FOREACH(MipMapLevel &l,
_mip_map)
+
for (MipMapLevel &l :
_mip_map)
free(l.data);
}
uint64_t LogicSnapshot::unpack_sample(const uint8_t *ptr) const
{
free(l.data);
}
uint64_t LogicSnapshot::unpack_sample(const uint8_t *ptr) const
{
+#ifdef HAVE_UNALIGNED_LITTLE_ENDIAN_ACCESS
+ return *(uint64_t*)ptr;
+#else
uint64_t value = 0;
switch(_unit_size) {
default:
uint64_t value = 0;
switch(_unit_size) {
default:
@@
-94,10
+101,14
@@
uint64_t LogicSnapshot::unpack_sample(const uint8_t *ptr) const
break;
}
return value;
break;
}
return value;
+#endif
}
void LogicSnapshot::pack_sample(uint8_t *ptr, uint64_t value)
{
}
void LogicSnapshot::pack_sample(uint8_t *ptr, uint64_t value)
{
+#ifdef HAVE_UNALIGNED_LITTLE_ENDIAN_ACCESS
+ *(uint64_t*)ptr = value;
+#else
switch(_unit_size) {
default:
ptr[7] = value >> 56;
switch(_unit_size) {
default:
ptr[7] = value >> 56;
@@
-126,17
+137,18
@@
void LogicSnapshot::pack_sample(uint8_t *ptr, uint64_t value)
case 0:
break;
}
case 0:
break;
}
+#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);
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();
// Generate the first mip-map from the data
append_payload_to_mipmap();
@@
-155,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;
lock_guard<recursive_mutex> lock(_mutex);
const size_t size = (end_sample - start_sample) * _unit_size;
- memcpy(data, (const uint8_t*)_data
+ start_sampl
e, size);
+ memcpy(data, (const uint8_t*)_data
.data() + start_sample * _unit_siz
e, size);
}
void LogicSnapshot::reallocate_mipmap_level(MipMapLevel &m)
}
void LogicSnapshot::reallocate_mipmap_level(MipMapLevel &m)
@@
-194,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
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;
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;)
{
prev_length * _unit_size * MipMapScaleFactor;
src_ptr < end_src_ptr;)
{
@@
-256,10
+268,9
@@
void LogicSnapshot::append_payload_to_mipmap()
uint64_t LogicSnapshot::get_sample(uint64_t index) const
{
uint64_t LogicSnapshot::get_sample(uint64_t index) const
{
- assert(_data);
assert(index < _sample_count);
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(
}
void LogicSnapshot::get_subsampled_edges(