X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=pv%2Fdata%2Fdecode%2Fdecoder.hpp;h=2c4337478135fdc40d63c82c63316a59617f188e;hb=02078aa15a4747b8ab7a91d54e2e141c3acb5628;hp=3f0f462ba4412b30f0ade603bbc5e160d07969e9;hpb=7a01bd3654ed046216308fa64edfd79be7cd525f;p=pulseview.git diff --git a/pv/data/decode/decoder.hpp b/pv/data/decode/decoder.hpp index 3f0f462b..2c433747 100644 --- a/pv/data/decode/decoder.hpp +++ b/pv/data/decode/decoder.hpp @@ -14,19 +14,30 @@ * 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 . */ #ifndef PULSEVIEW_PV_DATA_DECODE_DECODER_HPP #define PULSEVIEW_PV_DATA_DECODE_DECODER_HPP +#include #include #include #include +#include #include +#include + +#include +#include + +using std::deque; +using std::map; +using std::string; +using std::vector; + struct srd_decoder; struct srd_decoder_inst; struct srd_channel; @@ -34,52 +45,119 @@ struct srd_session; namespace pv { -namespace view { -class LogicSignal; -} - namespace data { class Logic; +class SignalBase; namespace decode { -class Decoder +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; + const QString name, desc; + int initial_pin_state; + const shared_ptr decoder_; + const srd_channel *pdch_; +}; + +struct DecodeBinaryClassInfo +{ + uint32_t bin_class_id; + char* name; + char* description; +}; + + +class Decoder : public QObject { + Q_OBJECT + public: - Decoder(const srd_decoder *const decoder); + 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; - bool shown() const; - void show(bool show = true); + const char* name() const; - const std::map >& channels() const; - void set_channels(std::map > channels); + bool visible() const; + void set_visible(bool visible); - const std::map& options() const; + 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(); + bool have_required_channels() const; - srd_decoder_inst* create_decoder_inst( - srd_session *session, int unit_size) const; + srd_decoder_inst* create_decoder_inst(srd_session *session); + void invalidate_decoder_inst(); + + 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; + +Q_SIGNALS: + void annotation_visibility_changed(); - std::set< std::shared_ptr > get_data(); +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_; - std::map > - channels_; - std::map options_; + vector channels_; + deque rows_; + deque ann_classes_; + vector bin_classes_; + map options_; + srd_decoder_inst *decoder_inst_; }; } // namespace decode