X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fdata%2Fdecode%2Fdecoder.hpp;h=e86deccdcfc1a38c1097f1c2f7b886259687e160;hp=2a7ef11ea14365fe8947e41154d493a3d46d9425;hb=04b0467582d8dfa989bb38fe18bfb1be20cea456;hpb=e77de61fbc19633c77cc196332ae79c26d9ca35d diff --git a/pv/data/decode/decoder.hpp b/pv/data/decode/decoder.hpp index 2a7ef11e..e86deccd 100644 --- a/pv/data/decode/decoder.hpp +++ b/pv/data/decode/decoder.hpp @@ -20,6 +20,7 @@ #ifndef PULSEVIEW_PV_DATA_DECODE_DECODER_HPP #define PULSEVIEW_PV_DATA_DECODE_DECODER_HPP +#include #include #include #include @@ -27,9 +28,13 @@ #include -#include +#include +#include + +using std::deque; using std::map; +using std::shared_ptr; using std::string; using std::vector; @@ -49,45 +54,78 @@ namespace decode { class Decoder; +class AnnotationClass: public QObject +{ + Q_OBJECT + +public: + AnnotationClass(size_t _id, char* _name, char* _description, Row* _row); + + bool visible() const; + void set_visible(bool visible); + +Q_SIGNALS: + void visibility_changed(); + +public: + size_t id; + char* name; + char* description; + Row* row; + +private: + 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; + shared_ptr assigned_signal; const QString name, desc; int initial_pin_state; const shared_ptr decoder_; const srd_channel *pdch_; }; +struct DecoderLogicOutputChannel { + DecoderLogicOutputChannel (QString id, QString desc, uint64_t sr) : + id(id), desc(desc), samplerate(sr) {}; + QString id, desc; + uint64_t samplerate; +}; + struct DecodeBinaryClassInfo { - uint8_t bin_class_id; + uint32_t bin_class_id; char* name; char* description; }; -class Decoder +class Decoder : public QObject { + Q_OBJECT + 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; + + uint8_t get_stack_level() const; const char* name() const; - bool shown() const; - void show(bool show = true); + bool visible() const; + void set_visible(bool visible); const vector& channels() const; void set_channels(vector channels); const map& options() const; - void set_option(const char *id, GVariant *value); void apply_all_options(); @@ -97,15 +135,36 @@ public: srd_decoder_inst* create_decoder_inst(srd_session *session); void invalidate_decoder_inst(); - uint8_t get_binary_class_count() const; - const DecodeBinaryClassInfo* get_binary_class(uint8_t id) const; + vector get_rows(); + Row* get_row_by_id(size_t id); + + vector ann_classes() const; + vector ann_classes(); + AnnotationClass* get_ann_class_by_id(size_t id); + const AnnotationClass* get_ann_class_by_id(size_t id) const; + + uint32_t get_binary_class_count() const; + const DecodeBinaryClassInfo* get_binary_class(uint32_t id) const; + + bool has_logic_output() const; + const vector logic_output_channels() const; + +Q_SIGNALS: + void annotation_visibility_changed(); + +private Q_SLOTS: + void on_row_visibility_changed(); + void on_class_visibility_changed(); private: - const srd_decoder *const decoder_; + const srd_decoder* const srd_decoder_; + uint8_t stack_level_; - bool shown_; + bool visible_; vector channels_; + deque rows_; + deque ann_classes_; vector bin_classes_; map options_; srd_decoder_inst *decoder_inst_;