PulseView  0.3.0
A Qt-based sigrok GUI
analogsegment.hpp
Go to the documentation of this file.
1 /*
2  * This file is part of the PulseView project.
3  *
4  * Copyright (C) 2012 Joel Holdsworth <joel@airwebreathe.org.uk>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19  */
20 
21 #ifndef PULSEVIEW_PV_DATA_ANALOGSEGMENT_HPP
22 #define PULSEVIEW_PV_DATA_ANALOGSEGMENT_HPP
23 
24 #include "segment.hpp"
25 
26 #include <utility>
27 #include <vector>
28 
29 namespace AnalogSegmentTest {
30 struct Basic;
31 }
32 
33 namespace pv {
34 namespace data {
35 
36 class AnalogSegment : public Segment
37 {
38 public:
40  {
41  float min;
42  float max;
43  };
44 
46  {
47  uint64_t start;
48  unsigned int scale;
49  uint64_t length;
51  };
52 
53 private:
54  struct Envelope
55  {
56  uint64_t length;
57  uint64_t data_length;
59  };
60 
61 private:
62  static const unsigned int ScaleStepCount = 10;
63  static const int EnvelopeScalePower;
64  static const int EnvelopeScaleFactor;
65  static const float LogEnvelopeScaleFactor;
66  static const uint64_t EnvelopeDataUnit;
67 
68 public:
69  AnalogSegment(uint64_t samplerate, uint64_t expected_num_samples = 0);
70 
71  virtual ~AnalogSegment();
72 
73  void append_interleaved_samples(const float *data,
74  size_t sample_count, size_t stride);
75 
76  const float* get_samples(int64_t start_sample,
77  int64_t end_sample) const;
78 
80  uint64_t start, uint64_t end, float min_length) const;
81 
82 private:
84 
86 
87 private:
88  struct Envelope envelope_levels_[ScaleStepCount];
89 
90  friend struct AnalogSegmentTest::Basic;
91 };
92 
93 } // namespace data
94 } // namespace pv
95 
96 #endif // PULSEVIEW_PV_DATA_ANALOGSEGMENT_HPP
void append_interleaved_samples(const float *data, size_t sample_count, size_t stride)
static const uint64_t EnvelopeDataUnit
const float * get_samples(int64_t start_sample, int64_t end_sample) const
static const unsigned int ScaleStepCount
void get_envelope_section(EnvelopeSection &s, uint64_t start, uint64_t end, float min_length) const
static const int EnvelopeScalePower
double samplerate() const
Definition: segment.cpp:60
void reallocate_envelope(Envelope &l)
AnalogSegment(uint64_t samplerate, uint64_t expected_num_samples=0)
static const int EnvelopeScaleFactor
friend struct AnalogSegmentTest::Basic
struct Envelope envelope_levels_[ScaleStepCount]
static const float LogEnvelopeScaleFactor