X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fdata%2Fdecodesignal.hpp;h=cdd061a9769a45484170bd8e69b82a1b131443b7;hp=0f3a0330e3ad9029ad742d796294452d091f91ef;hb=946b52e1f0e0520415c3653cc6ea9d083718f76d;hpb=ecd07c20d34ce940163ac2e7fb26cb7ceac565bb diff --git a/pv/data/decodesignal.hpp b/pv/data/decodesignal.hpp index 0f3a0330..cdd061a9 100644 --- a/pv/data/decodesignal.hpp +++ b/pv/data/decodesignal.hpp @@ -20,6 +20,7 @@ #ifndef PULSEVIEW_PV_DATA_DECODESIGNAL_HPP #define PULSEVIEW_PV_DATA_DECODESIGNAL_HPP +#include #include #include @@ -27,8 +28,10 @@ #include #include +#include using std::list; +using std::unordered_set; using std::vector; using std::shared_ptr; @@ -43,14 +46,27 @@ class Row; class DecoderStack; class Logic; +class SignalBase; class SignalData; +struct DecodeChannel +{ + uint16_t id; // Also 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_; +}; + class DecodeSignal : public SignalBase { Q_OBJECT public: - DecodeSignal(shared_ptr decoder_stack); + DecodeSignal(shared_ptr decoder_stack, + const unordered_set< shared_ptr > &all_signals); virtual ~DecodeSignal(); bool is_decode_signal() const; @@ -61,8 +77,20 @@ public: void remove_decoder(int index); bool toggle_decoder_visibility(int index); + void begin_decode(); QString error_message() const; + const list get_channels() const; + void auto_assign_signals(); + void assign_signal(const uint16_t channel_id, const SignalBase *signal); + + void set_initial_pin_state(const uint16_t channel_id, const int init_state); + + double samplerate() const; + const pv::util::Timestamp& start_time() const; + int64_t sample_count() const; + int64_t samples_decoded() const; + vector visible_rows() const; /** @@ -73,14 +101,20 @@ public: const decode::Row &row, uint64_t start_sample, uint64_t end_sample) const; +private: + void update_channel_list(); + Q_SIGNALS: void new_annotations(); + void channels_updated(); private Q_SLOTS: void on_new_annotations(); private: shared_ptr decoder_stack_; + const unordered_set< shared_ptr > &all_signals_; + list channels_; }; } // namespace data