/* * This file is part of the PulseView project. * * Copyright (C) 2014 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, see . */ #ifndef PULSEVIEW_PV_STORESESSION_HPP #define PULSEVIEW_PV_STORESESSION_HPP #include #include #include #include #include #include #include #include #include #include using std::atomic; using std::string; using std::shared_ptr; using std::pair; using std::map; using std::vector; using std::thread; using std::mutex; using std::ofstream; namespace sigrok { class Output; class OutputFormat; } namespace pv { class Session; namespace data { class SignalBase; class AnalogSegment; class LogicSegment; } class StoreSession : public QObject { Q_OBJECT private: static const size_t BlockSize; public: StoreSession(const string &file_name, const shared_ptr &output_format, const map &options, const pair sample_range, const Session &session); ~StoreSession(); pair progress() const; const QString& error() const; bool start(); void wait(); void cancel(); private: void store_proc(vector< shared_ptr > achannel_list, vector< shared_ptr > asegment_list, shared_ptr lsegment); Q_SIGNALS: void progress_updated(); void store_successful(); private: const string file_name_; const shared_ptr output_format_; const map options_; const pair sample_range_; const Session &session_; shared_ptr output_; ofstream output_stream_; std::thread thread_; atomic interrupt_; atomic units_stored_, unit_count_; mutable mutex mutex_; QString error_; uint64_t start_sample_, sample_count_; }; } // namespace pv #endif // PULSEVIEW_PV_STORESESSION_HPP