20 #ifndef PULSEVIEW_PV_DATA_LOGICSEGMENT_HPP 21 #define PULSEVIEW_PV_DATA_LOGICSEGMENT_HPP 29 using std::enable_shared_from_this;
31 using std::shared_ptr;
58 static const unsigned int ScaleStepCount = 10;
74 unsigned int unit_size, uint64_t samplerate);
84 shared_ptr<const LogicSegment> get_shared_ptr()
const;
86 void append_payload(shared_ptr<sigrok::Logic> logic);
87 void append_payload(
void *
data, uint64_t data_size);
99 void append_subsignal_payload(
unsigned int index,
void *
data,
100 uint64_t data_size, vector<uint8_t>& destination);
102 void get_samples(int64_t start_sample, int64_t end_sample, uint8_t* dest)
const;
114 void get_subsampled_edges(vector<EdgePair> &edges,
115 uint64_t start, uint64_t end,
116 float min_length,
int sig_index,
bool first_change_only =
false);
118 void get_surrounding_edges(vector<EdgePair> &dest,
119 uint64_t origin_sample,
float min_length,
int sig_index);
122 uint64_t unpack_sample(
const uint8_t *ptr)
const;
123 void pack_sample(uint8_t *ptr, uint64_t
value);
127 void append_payload_to_mipmap();
129 uint64_t get_unpacked_sample(uint64_t index)
const;
131 template <
class T>
void downsampleTmain(
const T*&in, T &acc, T &prev);
132 template <
class T>
void downsampleT(
const uint8_t *in, uint8_t *&out, uint64_t len);
133 void downsampleGeneric(
const uint8_t *in, uint8_t *&out, uint64_t len);
136 uint64_t get_subsample(
int level, uint64_t offset)
const;
138 static uint64_t pow2_ceil(uint64_t
x,
unsigned int power);
148 friend struct LogicSegmentTest::Pow2;
149 friend struct LogicSegmentTest::Basic;
150 friend struct LogicSegmentTest::LargeData;
151 friend struct LogicSegmentTest::Pulses;
152 friend struct LogicSegmentTest::LongPulses;
158 #endif // PULSEVIEW_PV_DATA_LOGICSEGMENT_HPP
static const float LogMipMapScaleFactor
static const uint64_t MipMapDataUnit
static const int MipMapScalePower
uint64_t last_append_extra_
T value(details::expression_node< T > *n)
uint64_t last_append_accumulator_
pair< int64_t, bool > EdgePair
static const int MipMapScaleFactor
x y t t *t x y t t t x y t t t x *y t *t t x *y t *t t x y t t t x y t t t x(y+z)
uint64_t last_append_sample_