projects
/
pulseview.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Modified Decode to only use LogicSignals
[pulseview.git]
/
pv
/
data
/
decoder.cpp
diff --git
a/pv/data/decoder.cpp
b/pv/data/decoder.cpp
index 65fc8fff7c858312fa77a902d8df9d33ea3acddd..923140397ef528d02b9bb2ea84f2849f2d8573d0 100644
(file)
--- a/
pv/data/decoder.cpp
+++ b/
pv/data/decoder.cpp
@@
-22,6
+22,8
@@
#include <boost/thread/thread.hpp>
#include <boost/thread/thread.hpp>
+#include <stdexcept>
+
#include <QDebug>
#include "decoder.h"
#include <QDebug>
#include "decoder.h"
@@
-43,7
+45,7
@@
const int64_t Decoder::DecodeChunkLength = 4096;
Decoder::Decoder(const srd_decoder *const dec,
std::map<const srd_probe*,
Decoder::Decoder(const srd_decoder *const dec,
std::map<const srd_probe*,
- boost::shared_ptr<pv::view::Signal> > probes,
+ boost::shared_ptr<pv::view::
Logic
Signal> > probes,
GHashTable *options) :
_decoder(dec),
_probes(probes),
GHashTable *options) :
_decoder(dec),
_probes(probes),
@@
-51,7
+53,9
@@
Decoder::Decoder(const srd_decoder *const dec,
_session(NULL),
_decoder_inst(NULL)
{
_session(NULL),
_decoder_inst(NULL)
{
- init_decoder();
+ if (!init_decoder())
+ throw runtime_error("Failed to initialise decoder.");
+
begin_decode();
}
begin_decode();
}
@@
-61,6
+65,9
@@
Decoder::~Decoder()
_decode_thread.join();
g_hash_table_destroy(_options);
_decode_thread.join();
g_hash_table_destroy(_options);
+
+ if (_session)
+ srd_session_destroy(_session);
}
const srd_decoder* Decoder::get_decoder() const
}
const srd_decoder* Decoder::get_decoder() const
@@
-86,12
+93,9
@@
void Decoder::begin_decode()
// We get the logic data of the first probe in the list.
// This works because we are currently assuming all
// LogicSignals have the same data/snapshot
// We get the logic data of the first probe in the list.
// This works because we are currently assuming all
// LogicSignals have the same data/snapshot
- shared_ptr<pv::view::Signal> sig = (*_probes.begin()).second;
+ shared_ptr<pv::view::
Logic
Signal> sig = (*_probes.begin()).second;
assert(sig);
assert(sig);
- const pv::view::LogicSignal *const l =
- dynamic_cast<pv::view::LogicSignal*>(sig.get());
- assert(l);
- shared_ptr<data::Logic> data = l->data();
+ shared_ptr<data::Logic> data = sig->data();
_decode_thread = boost::thread(&Decoder::decode_proc, this,
data);
_decode_thread = boost::thread(&Decoder::decode_proc, this,
data);
@@
-101,7
+105,7
@@
void Decoder::clear_snapshots()
{
}
{
}
-
void
Decoder::init_decoder()
+
bool
Decoder::init_decoder()
{
if (!_probes.empty())
{
{
if (!_probes.empty())
{
@@
-124,7
+128,7
@@
void Decoder::init_decoder()
_decoder_inst = srd_inst_new(_session, _decoder->id, _options);
if(!_decoder_inst) {
qDebug() << "Failed to initialise decoder";
_decoder_inst = srd_inst_new(_session, _decoder->id, _options);
if(!_decoder_inst) {
qDebug() << "Failed to initialise decoder";
- return;
+ return
false
;
}
_decoder_inst->data_samplerate = _samplerate;
}
_decoder_inst->data_samplerate = _samplerate;
@@
-132,7
+136,7
@@
void Decoder::init_decoder()
GHashTable *probes = g_hash_table_new_full(g_str_hash,
g_str_equal, g_free, (GDestroyNotify)g_variant_unref);
GHashTable *probes = g_hash_table_new_full(g_str_hash,
g_str_equal, g_free, (GDestroyNotify)g_variant_unref);
- for(map<const srd_probe*, shared_ptr<view::Signal> >::
+ for(map<const srd_probe*, shared_ptr<view::
Logic
Signal> >::
const_iterator i = _probes.begin();
i != _probes.end(); i++)
{
const_iterator i = _probes.begin();
i != _probes.end(); i++)
{
@@
-144,6
+148,8
@@
void Decoder::init_decoder()
}
srd_inst_probe_set_all(_decoder_inst, probes);
}
srd_inst_probe_set_all(_decoder_inst, probes);
+
+ return true;
}
void Decoder::decode_proc(shared_ptr<data::Logic> data)
}
void Decoder::decode_proc(shared_ptr<data::Logic> data)