{
stop_capture();
- if (_sampling_thread.get())
- _sampling_thread->join();
- _sampling_thread.reset();
+ _sampling_thread.join();
if (_sdi)
_device_manager.release_device(_sdi);
update_signals(sdi);
read_sample_rate(sdi);
- _sampling_thread.reset(new boost::thread(
+ _sampling_thread = boost::thread(
&SigSession::load_session_thread_proc, this,
- error_handler));
+ error_handler);
} else {
sr_input *in = NULL;
update_signals(in->sdi);
read_sample_rate(in->sdi);
- _sampling_thread.reset(new boost::thread(
+ _sampling_thread = boost::thread(
&SigSession::load_input_thread_proc, this,
- name, in, error_handler));
+ name, in, error_handler);
}
-
}
SigSession::capture_state SigSession::get_capture_state() const
}
// Begin the session
- _sampling_thread.reset(new boost::thread(
+ _sampling_thread = boost::thread(
&SigSession::sample_thread_proc, this, _sdi,
- record_length, error_handler));
+ record_length, error_handler);
}
void SigSession::stop_capture()
sr_session_stop();
// Check that sampling stopped
- if (_sampling_thread.get())
- _sampling_thread->join();
- _sampling_thread.reset();
+ _sampling_thread.join();
}
-vector< shared_ptr<view::Signal> > SigSession::get_signals()
+vector< shared_ptr<view::Signal> > SigSession::get_signals() const
{
lock_guard<mutex> lock(_signals_mutex);
return _signals;
void SigSession::add_decoder(srd_decoder *const dec,
std::map<const srd_probe*,
- boost::shared_ptr<view::Signal> > probes)
+ boost::shared_ptr<view::Signal> > probes,
+ GHashTable *options)
{
{
lock_guard<mutex> lock(_signals_mutex);
+
shared_ptr<data::Decoder> decoder(
- new data::Decoder(dec, probes));
+ new data::Decoder(dec, probes, options));
shared_ptr<view::DecodeSignal> d(
- new view::DecodeSignal(*this, decoder));
+ new view::DecodeSignal(*this, decoder,
+ _decode_traces.size()));
_decode_traces.push_back(d);
}
signals_changed();
}
+vector< shared_ptr<view::DecodeSignal> > SigSession::get_decode_signals() const
+{
+ lock_guard<mutex> lock(_signals_mutex);
+ return _decode_traces;
+}
+
+void SigSession::remove_decode_signal(view::DecodeSignal *signal)
+{
+ for (vector< shared_ptr<view::DecodeSignal> >::iterator i =
+ _decode_traces.begin();
+ i != _decode_traces.end();
+ i++)
+ if ((*i).get() == signal)
+ {
+ _decode_traces.erase(i);
+ signals_changed();
+ return;
+ }
+}
+
void SigSession::set_capture_state(capture_state state)
{
lock_guard<mutex> lock(_sampling_mutex);
if(sdi) {
for (const GSList *l = sdi->probes; l; l = l->next) {
- const sr_probe *const probe =
- (const sr_probe *)l->data;
+ sr_probe *const probe = (sr_probe *)l->data;
assert(probe);
switch(probe->type) {