X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fdata%2Fdecodesignal.cpp;h=a557e1c16ebd601f8d2c65bd189ab544e0250faa;hp=5b2bb31d75e1217e7567d634f289eaab0985bd03;hb=946b52e1f0e0520415c3653cc6ea9d083718f76d;hpb=132a5c6d4b3c220d1cb6d942bf9d7e8b180ab1c3 diff --git a/pv/data/decodesignal.cpp b/pv/data/decodesignal.cpp index 5b2bb31d..a557e1c1 100644 --- a/pv/data/decodesignal.cpp +++ b/pv/data/decodesignal.cpp @@ -110,6 +110,11 @@ bool DecodeSignal::toggle_decoder_visibility(int index) return state; } +void DecodeSignal::begin_decode() +{ + decoder_stack_->begin_decode(); +} + QString DecodeSignal::error_message() const { return decoder_stack_->error_message(); @@ -155,6 +160,44 @@ void DecodeSignal::set_initial_pin_state(const uint16_t channel_id, const int in decoder_stack_->begin_decode(); } +int64_t DecodeSignal::sample_count() const +{ + shared_ptr data; + shared_ptr signalbase; + + // We get the logic data of the first channel in the list. + // This works because we are currently assuming all + // LogicSignals have the same data/segment + for (const shared_ptr &dec : decoder_stack_->stack()) + if (dec && !dec->channels().empty() && + ((signalbase = (*dec->channels().begin()).second)) && + ((data = signalbase->logic_data()))) + break; + + if (!data || data->logic_segments().empty()) + return 0; + + const shared_ptr segment = data->logic_segments().front(); + assert(segment); + + return (int64_t)segment->get_sample_count(); +} + +double DecodeSignal::samplerate() const +{ + return decoder_stack_->samplerate(); +} + +const pv::util::Timestamp& DecodeSignal::start_time() const +{ + return decoder_stack_->start_time(); +} + +int64_t DecodeSignal::samples_decoded() const +{ + return decoder_stack_->samples_decoded(); +} + vector DecodeSignal::visible_rows() const { return decoder_stack_->get_visible_rows();