]> sigrok.org Git - pulseview.git/blobdiff - pv/data/decode/decoder.hpp
TabularDecView: Make the model/view work
[pulseview.git] / pv / data / decode / decoder.hpp
index 2d9fcc639591a5226101f40eb8ded32911447dbf..7b1a20134acaccd7ce4adec6462d11a02c11ffcb 100644 (file)
@@ -14,8 +14,7 @@
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
  */
 
 #ifndef PULSEVIEW_PV_DATA_DECODE_DECODER_HPP
 #include <map>
 #include <memory>
 #include <set>
+#include <vector>
 
 #include <glib.h>
 
+#include <pv/data/signalbase.hpp>
+#include <pv/data/decode/row.hpp>
+
+using std::map;
+using std::string;
+using std::vector;
+
 struct srd_decoder;
 struct srd_decoder_inst;
 struct srd_channel;
@@ -34,52 +41,96 @@ struct srd_session;
 
 namespace pv {
 
-namespace view {
-class LogicSignal;
-}
-
 namespace data {
 
 class Logic;
+class SignalBase;
 
 namespace decode {
 
+class Decoder;
+
+struct AnnotationClass
+{
+       size_t id;
+       char* name;
+       char* description;
+       Row* row;
+       bool visible;
+};
+
+struct DecodeChannel
+{
+       uint16_t id;     ///< Global numerical ID for the decode channels in the stack
+       uint16_t bit_id; ///< Tells which bit within a sample represents this channel
+       const bool is_optional;
+       const pv::data::SignalBase *assigned_signal;
+       const QString name, desc;
+       int initial_pin_state;
+       const shared_ptr<Decoder> decoder_;
+       const srd_channel *pdch_;
+};
+
+struct DecodeBinaryClassInfo
+{
+       uint32_t bin_class_id;
+       char* name;
+       char* description;
+};
+
+
 class Decoder
 {
 public:
-       Decoder(const srd_decoder *const dec);
+       Decoder(const srd_decoder *const dec, uint8_t stack_level);
 
        virtual ~Decoder();
 
-       const srd_decoder* decoder() const;
+       const srd_decoder* get_srd_decoder() const;
 
-       bool shown() const;
-       void show(bool show = true);
+       uint8_t get_stack_level() const;
 
-       const std::map<const srd_channel*,
-               std::shared_ptr<view::LogicSignal> >& channels() const;
-       void set_channels(std::map<const srd_channel*,
-               std::shared_ptr<view::LogicSignal> > channels);
+       const char* name() const;
 
-       const std::map<std::string, GVariant*>& options() const;
+       bool visible() const;
+       void set_visible(bool visible);
 
+       const vector<DecodeChannel*>& channels() const;
+       void set_channels(vector<DecodeChannel*> channels);
+
+       const map<string, GVariant*>& options() const;
        void set_option(const char *id, GVariant *value);
 
+       void apply_all_options();
+
        bool have_required_channels() const;
 
-       srd_decoder_inst* create_decoder_inst(
-               srd_session *session) const;
+       srd_decoder_inst* create_decoder_inst(srd_session *session);
+       void invalidate_decoder_inst();
+
+       vector<Row*> get_rows();
+       Row* get_row_by_id(size_t id);
+
+       vector<const AnnotationClass*> ann_classes() const;
+       vector<AnnotationClass*> ann_classes();
+       AnnotationClass* get_ann_class_by_id(size_t id);
+       const AnnotationClass* get_ann_class_by_id(size_t id) const;
 
-       std::set< std::shared_ptr<pv::data::Logic> > get_data();
+       uint32_t get_binary_class_count() const;
+       const DecodeBinaryClassInfo* get_binary_class(uint32_t id) const;
 
 private:
-       const srd_decoder *const decoder_;
+       const srd_decoder* const srd_decoder_;
+       uint8_t stack_level_;
 
-       bool shown_;
+       bool visible_;
 
-       std::map<const srd_channel*, std::shared_ptr<pv::view::LogicSignal> >
-               channels_;
-       std::map<std::string, GVariant*> options_;
+       vector<DecodeChannel*> channels_;
+       vector<Row> rows_;
+       vector<AnnotationClass> ann_classes_;
+       vector<DecodeBinaryClassInfo> bin_classes_;
+       map<string, GVariant*> options_;
+       srd_decoder_inst *decoder_inst_;
 };
 
 } // namespace decode