-void Decoder::init_decoder()
-{
- if (!_probes.empty())
- {
- shared_ptr<pv::view::LogicSignal> logic_signal =
- dynamic_pointer_cast<pv::view::LogicSignal>(
- (*_probes.begin()).second);
- if (logic_signal) {
- shared_ptr<pv::data::Logic> data(
- logic_signal->data());
- if (data) {
- _samplerate = data->get_samplerate();
- _start_time = data->get_start_time();
- }
- }
- }
-
- _decoder_inst = srd_inst_new(_decoder->id, NULL);
- assert(_decoder_inst);
-
- _decoder_inst->data_samplerate = _samplerate;
-
- 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> >::
- const_iterator i = _probes.begin();
- i != _probes.end(); i++)
- {
- shared_ptr<view::Signal> signal((*i).second);
- GVariant *const gvar = g_variant_new_int32(
- signal->probe()->index);
- g_variant_ref_sink(gvar);
- g_hash_table_insert(probes, (*i).first->id, gvar);
- }
-
- srd_inst_probe_set_all(_decoder_inst, probes);
-}
-