PulseView  unreleased development snapshot
A Qt-based sigrok GUI
decoder.hpp
Go to the documentation of this file.
1 /*
2  * This file is part of the PulseView project.
3  *
4  * Copyright (C) 2013 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, see <http://www.gnu.org/licenses/>.
18  */
19 
20 #ifndef PULSEVIEW_PV_DATA_DECODE_DECODER_HPP
21 #define PULSEVIEW_PV_DATA_DECODE_DECODER_HPP
22 
23 #include <deque>
24 #include <map>
25 #include <memory>
26 #include <set>
27 #include <vector>
28 
29 #include <glib.h>
30 
31 #include <QObject>
32 
33 #include <pv/data/decode/row.hpp>
34 
35 using std::deque;
36 using std::map;
37 using std::shared_ptr;
38 using std::string;
39 using std::vector;
40 
41 struct srd_decoder;
42 struct srd_decoder_inst;
43 struct srd_channel;
44 struct srd_session;
45 
46 namespace pv {
47 
48 namespace data {
49 
50 class Logic;
51 class SignalBase;
52 
53 namespace decode {
54 
55 class Decoder;
56 
57 class AnnotationClass: public QObject
58 {
59  Q_OBJECT
60 
61 public:
62  AnnotationClass(size_t _id, char* _name, char* _description, Row* _row);
63 
64  bool visible() const;
65  void set_visible(bool visible);
66 
67 Q_SIGNALS:
68  void visibility_changed();
69 
70 public:
71  size_t id;
72  char* name;
73  char* description;
74  Row* row;
75 
76 private:
77  bool visible_;
78 };
79 
81 {
82  uint16_t id;
83  uint16_t bit_id;
84  const bool is_optional;
85  shared_ptr<const pv::data::SignalBase> assigned_signal;
86  const QString name, desc;
88  const shared_ptr<Decoder> decoder_;
89  const srd_channel *pdch_;
90 };
91 
93  DecoderLogicOutputChannel (QString id, QString desc) :
94  id(id), desc(desc) {};
95  QString id, desc;
96 };
97 
99 {
100  uint32_t bin_class_id;
101  char* name;
102  char* description;
103 };
104 
105 
106 class Decoder : public QObject
107 {
108  Q_OBJECT
109 
110 public:
111  Decoder(const srd_decoder *const dec, uint8_t stack_level);
112 
113  virtual ~Decoder();
114 
115  const srd_decoder* get_srd_decoder() const;
116 
117  uint8_t get_stack_level() const;
118 
119  const char* name() const;
120 
121  bool visible() const;
122  void set_visible(bool visible);
123 
124  const vector<DecodeChannel*>& channels() const;
125  void set_channels(vector<DecodeChannel*> channels);
126 
127  const map<string, GVariant*>& options() const;
128  void set_option(const char *id, GVariant *value);
129 
130  void apply_all_options();
131 
132  bool have_required_channels() const;
133 
134  srd_decoder_inst* create_decoder_inst(srd_session *session);
135  void invalidate_decoder_inst();
136 
137  vector<Row*> get_rows();
138  Row* get_row_by_id(size_t id);
139 
140  vector<const AnnotationClass*> ann_classes() const;
141  vector<AnnotationClass*> ann_classes();
142  AnnotationClass* get_ann_class_by_id(size_t id);
143  const AnnotationClass* get_ann_class_by_id(size_t id) const;
144 
145  uint32_t get_binary_class_count() const;
146  const DecodeBinaryClassInfo* get_binary_class(uint32_t id) const;
147 
148  bool has_logic_output() const;
149  const vector<DecoderLogicOutputChannel> logic_output_channels() const;
150 
151 Q_SIGNALS:
152  void annotation_visibility_changed();
153 
154 private Q_SLOTS:
155  void on_row_visibility_changed();
156  void on_class_visibility_changed();
157 
158 private:
159  const srd_decoder* const srd_decoder_;
160  uint8_t stack_level_;
161 
162  bool visible_;
163 
164  vector<DecodeChannel*> channels_;
165  deque<Row> rows_;
166  deque<AnnotationClass> ann_classes_;
167  vector<DecodeBinaryClassInfo> bin_classes_;
168  map<string, GVariant*> options_;
169  srd_decoder_inst *decoder_inst_;
170 };
171 
172 } // namespace decode
173 } // namespace data
174 } // namespace pv
175 
176 #endif // PULSEVIEW_PV_DATA_DECODE_DECODER_HPP
srd_decoder_inst * decoder_inst_
Definition: decoder.hpp:169
map< string, GVariant * > options_
Definition: decoder.hpp:168
const srd_channel * pdch_
Definition: decoder.hpp:89
const srd_decoder *const srd_decoder_
Definition: decoder.hpp:159
vector< DecodeBinaryClassInfo > bin_classes_
Definition: decoder.hpp:167
vector< DecodeChannel * > channels_
Definition: decoder.hpp:164
T value(details::expression_node< T > *n)
Definition: exprtk.hpp:12358
deque< AnnotationClass > ann_classes_
Definition: decoder.hpp:166
void set_visible(bool visible)
Definition: decoder.cpp:53
Mac OS X or Android For some we provide binary for others we provide installers and for others we provide AppImage containers that you can run without the need to install anything Check the the usual way to install PulseView is to install the packages provided by your distro s package manager sometimes only outdated packages are made available to you In that you have two options
Definition: installation.txt:2
static std::string data()
Definition: exprtk.hpp:39024
DecoderLogicOutputChannel(QString id, QString desc)
Definition: decoder.hpp:93
const shared_ptr< Decoder > decoder_
Definition: decoder.hpp:88
AnnotationClass(size_t _id, char *_name, char *_description, Row *_row)
Definition: decoder.cpp:39
uint16_t bit_id
Tells which bit within a sample represents this channel.
Definition: decoder.hpp:83
uint16_t id
Global numerical ID for the decode channels in the stack.
Definition: decoder.hpp:82
shared_ptr< const pv::data::SignalBase > assigned_signal
Definition: decoder.hpp:85