X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=pv%2Fdata%2Fdecoderstack.h;fp=pv%2Fdata%2Fdecoderstack.h;h=0000000000000000000000000000000000000000;hb=2acdb232d6bb452cfdfaea3ef5218fb4da592329;hp=c50f3859962d020847ce9166727c1066feaa0bff;hpb=8dbbc7f0b9ea59d0f0d62225772f8a56eee125f5;p=pulseview.git diff --git a/pv/data/decoderstack.h b/pv/data/decoderstack.h deleted file mode 100644 index c50f385..0000000 --- a/pv/data/decoderstack.h +++ /dev/null @@ -1,169 +0,0 @@ -/* - * This file is part of the PulseView project. - * - * Copyright (C) 2012 Joel Holdsworth - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * 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 - */ - -#ifndef PULSEVIEW_PV_DATA_DECODERSTACK_H -#define PULSEVIEW_PV_DATA_DECODERSTACK_H - -#include "signaldata.h" - -#include -#include -#include -#include -#include -#include - -#include - -#include -#include - -#include -#include - -struct srd_decoder; -struct srd_decoder_annotation_row; -struct srd_channel; -struct srd_proto_data; -struct srd_session; - -namespace DecoderStackTest { -struct TwoDecoderStack; -} - -namespace pv { - -class SigSession; - -namespace view { -class LogicSignal; -} - -namespace data { - -class LogicSnapshot; - -namespace decode { -class Annotation; -class Decoder; -} - -class Logic; - -class DecoderStack : public QObject, public SignalData -{ - Q_OBJECT - -private: - static const double DecodeMargin; - static const double DecodeThreshold; - static const int64_t DecodeChunkLength; - static const unsigned int DecodeNotifyPeriod; - -public: - DecoderStack(pv::SigSession &session_, - const srd_decoder *const decoder); - - virtual ~DecoderStack(); - - const std::list< std::shared_ptr >& stack() const; - void push(std::shared_ptr decoder); - void remove(int index); - - int64_t samples_decoded() const; - - std::vector get_visible_rows() const; - - /** - * Extracts sorted annotations between two period into a vector. - */ - void get_annotation_subset( - std::vector &dest, - const decode::Row &row, uint64_t start_sample, - uint64_t end_sample) const; - - QString error_message(); - - void clear(); - - uint64_t get_max_sample_count() const; - - void begin_decode(); - -private: - boost::optional wait_for_data() const; - - void decode_data(const int64_t sample_count, - const unsigned int unit_size, srd_session *const session); - - void decode_proc(); - - static void annotation_callback(srd_proto_data *pdata, - void *decoder); - -private Q_SLOTS: - void on_new_frame(); - - void on_data_received(); - - void on_frame_ended(); - -Q_SIGNALS: - void new_decode_data(); - -private: - pv::SigSession &session_; - - /** - * This mutex prevents more than one decode operation occuring - * concurrently. - * @todo A proper solution should be implemented to allow multiple - * decode operations. - */ - static std::mutex global_decode_mutex_; - - std::list< std::shared_ptr > stack_; - - std::shared_ptr snapshot_; - - mutable std::mutex input_mutex_; - mutable std::condition_variable input_cond_; - int64_t sample_count_; - bool frame_complete_; - - mutable std::mutex output_mutex_; - int64_t samples_decoded_; - - std::map rows_; - - std::map, decode::Row> class_rows_; - - QString error_message_; - - std::thread decode_thread_; - std::atomic interrupt_; - - friend struct DecoderStackTest::TwoDecoderStack; -}; - -} // namespace data -} // namespace pv - -#endif // PULSEVIEW_PV_DATA_DECODERSTACK_H