PulseView  unreleased development snapshot
A Qt-based sigrok GUI
storesession.hpp
Go to the documentation of this file.
1 /*
2  * This file is part of the PulseView project.
3  *
4  * Copyright (C) 2014 Joel Holdsworth <joel@airwebreathe.org.uk>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, see <http://www.gnu.org/licenses/>.
18  */
19 
20 #ifndef PULSEVIEW_PV_STORESESSION_HPP
21 #define PULSEVIEW_PV_STORESESSION_HPP
22 
23 #include <atomic>
24 #include <cstdint>
25 #include <fstream>
26 #include <map>
27 #include <memory>
28 #include <mutex>
29 #include <string>
30 #include <thread>
31 
32 #include <glibmm/variant.h>
33 
34 #include <QObject>
35 
36 using std::atomic;
37 using std::string;
38 using std::shared_ptr;
39 using std::pair;
40 using std::map;
41 using std::vector;
42 using std::thread;
43 using std::mutex;
44 using std::ofstream;
45 
46 namespace sigrok {
47 class Output;
48 class OutputFormat;
49 }
50 
51 namespace pv {
52 
53 class Session;
54 
55 namespace data {
56 class SignalBase;
57 class AnalogSegment;
58 class LogicSegment;
59 }
60 
61 class StoreSession : public QObject
62 {
63  Q_OBJECT
64 
65 private:
66  static const size_t BlockSize;
67 
68 public:
69  StoreSession(const string &file_name,
70  const shared_ptr<sigrok::OutputFormat> &output_format,
71  const map<string, Glib::VariantBase> &options,
72  const pair<uint64_t, uint64_t> sample_range,
73  const Session &session);
74 
75  ~StoreSession();
76 
77  pair<int, int> progress() const;
78 
79  const QString& error() const;
80 
81  bool start();
82 
83  void wait();
84 
85  void cancel();
86 
87 private:
88  void store_proc(vector< shared_ptr<data::SignalBase> > achannel_list,
89  vector< shared_ptr<pv::data::AnalogSegment> > asegment_list,
90  shared_ptr<pv::data::LogicSegment> lsegment);
91 
92 Q_SIGNALS:
93  void progress_updated();
94 
95  void store_successful();
96 
97 private:
98  const string file_name_;
99  const shared_ptr<sigrok::OutputFormat> output_format_;
100  const map<string, Glib::VariantBase> options_;
101  const pair<uint64_t, uint64_t> sample_range_;
103 
104  shared_ptr<sigrok::Output> output_;
105  ofstream output_stream_;
106 
107  std::thread thread_;
108 
109  atomic<bool> interrupt_;
110 
111  atomic<int> units_stored_, unit_count_;
112 
113  mutable mutex mutex_;
114  QString error_;
115 
116  uint64_t start_sample_, sample_count_;
117 };
118 
119 } // namespace pv
120 
121 #endif // PULSEVIEW_PV_STORESESSION_HPP
uint64_t start_sample_
atomic< int > units_stored_
static const size_t BlockSize
shared_ptr< sigrok::Output > output_
const pair< uint64_t, uint64_t > sample_range_
ofstream output_stream_
Mac OS X or Android For some we provide binary for others we provide installers and for others we provide AppImage containers that you can run without the need to install anything Check the the usual way to install PulseView is to install the packages provided by your distro s package manager sometimes only outdated packages are made available to you In that you have two options
Definition: installation.txt:2
std::thread thread_
static std::string data()
Definition: exprtk.hpp:39024
const shared_ptr< sigrok::OutputFormat > output_format_
atomic< bool > interrupt_
const string file_name_
const Session & session_
const map< string, Glib::VariantBase > options_