]> sigrok.org Git - pulseview.git/blame - pv/storesession.hpp
Finalize segment decoding
[pulseview.git] / pv / storesession.hpp
CommitLineData
0fbda3c2
JH
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
efdec55a 17 * along with this program; if not, see <http://www.gnu.org/licenses/>.
0fbda3c2
JH
18 */
19
7a01bd36
JH
20#ifndef PULSEVIEW_PV_STORESESSION_HPP
21#define PULSEVIEW_PV_STORESESSION_HPP
0fbda3c2 22
3b68d03d 23#include <atomic>
aca9aa83 24#include <cstdint>
c1035a14 25#include <fstream>
e93f5538 26#include <map>
4764bc4d 27#include <memory>
3b68d03d 28#include <mutex>
0fbda3c2 29#include <string>
3b68d03d 30#include <thread>
0fbda3c2 31
e93f5538
JH
32#include <glibmm/variant.h>
33
0fbda3c2
JH
34#include <QObject>
35
6f925ba9
UH
36using std::atomic;
37using std::string;
38using std::shared_ptr;
39using std::pair;
40using std::map;
41using std::vector;
42using std::thread;
43using std::mutex;
44using std::ofstream;
45
7223eb62
ML
46namespace sigrok {
47class Output;
4764bc4d 48class OutputFormat;
7223eb62
ML
49}
50
0fbda3c2
JH
51namespace pv {
52
2b81ae46 53class Session;
0fbda3c2
JH
54
55namespace data {
bf0edd2b 56class SignalBase;
c51ae0b4 57class AnalogSegment;
f3d66e52 58class LogicSegment;
0fbda3c2
JH
59}
60
61class StoreSession : public QObject
62{
63 Q_OBJECT
64
65private:
66 static const size_t BlockSize;
67
68public:
6f925ba9
UH
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,
2b81ae46 73 const Session &session);
0fbda3c2
JH
74
75 ~StoreSession();
76
6f925ba9 77 pair<int, int> progress() const;
0fbda3c2
JH
78
79 const QString& error() const;
80
81 bool start();
82
83 void wait();
84
85 void cancel();
86
87private:
6f925ba9
UH
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);
0fbda3c2 91
e9213170 92Q_SIGNALS:
0fbda3c2
JH
93 void progress_updated();
94
5ccfc97e
SA
95 void store_successful();
96
0fbda3c2 97private:
6f925ba9
UH
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_;
2b81ae46 102 const Session &session_;
0fbda3c2 103
6f925ba9
UH
104 shared_ptr<sigrok::Output> output_;
105 ofstream output_stream_;
7223eb62 106
8dbbc7f0 107 std::thread thread_;
3b68d03d 108
6f925ba9 109 atomic<bool> interrupt_;
0fbda3c2 110
6f925ba9 111 atomic<int> units_stored_, unit_count_;
b101c41e 112
6f925ba9 113 mutable mutex mutex_;
8dbbc7f0 114 QString error_;
d2fc6be9
SA
115
116 uint64_t start_sample_, sample_count_;
0fbda3c2
JH
117};
118
870ea3db 119} // namespace pv
0fbda3c2 120
7a01bd36 121#endif // PULSEVIEW_PV_STORESESSION_HPP