Пример #1
0
void StoreSession::store_proc(shared_ptr<data::LogicSnapshot> snapshot)
{
	assert(snapshot);

	uint64_t start_sample = 0;

	/// TODO: Wrap this in a std::unique_ptr when we transition to C++11
	uint8_t *const data = new uint8_t[BlockSize];
	assert(data);

	const int unit_size = snapshot->unit_size();
	assert(unit_size != 0);

	{
		lock_guard<mutex> lock(_mutex);
		_unit_count = snapshot->get_sample_count();
	}

	const unsigned int samples_per_block = BlockSize / unit_size;

	while (!boost::this_thread::interruption_requested() &&
		start_sample < _unit_count)
	{
		progress_updated();

		const uint64_t end_sample = min(
			start_sample + samples_per_block, _unit_count);
		snapshot->get_samples(data, start_sample, end_sample);

		if(sr_session_append(_file_name.c_str(), data, unit_size,
			end_sample - start_sample) != SR_OK)
		{
			_error = tr("Error while saving.");
			break;
		}

		start_sample = end_sample;

		{
			lock_guard<mutex> lock(_mutex);
			_units_stored = start_sample;
		}
	}

	progress_updated();

	delete[] data;
}
Пример #2
0
StoreProgress::StoreProgress(const QString &file_name,
    SigSession &session, QWidget *parent) :
	QProgressDialog(tr("Saving..."), tr("Cancel"), 0, 0, parent),
	_session(file_name.toStdString(), session)
{
	connect(&_session, SIGNAL(progress_updated()),
		this, SLOT(on_progress_updated()));
}
Пример #3
0
StoreProgress::StoreProgress(const QString &file_name,
	const shared_ptr<sigrok::OutputFormat> output_format,
	const map<string, VariantBase> &options,
	const pair<uint64_t, uint64_t> sample_range,
	const Session &session, QWidget *parent) :
	QProgressDialog(tr("Saving..."), tr("Cancel"), 0, 0, parent),
	session_(file_name.toStdString(), output_format, options, sample_range,
		session)
{
	connect(&session_, SIGNAL(progress_updated()),
		this, SLOT(on_progress_updated()));
	connect(&session_, SIGNAL(store_successful()),
		&session, SLOT(on_data_saved()));
}