// Include the newly created decode channels in the channel lists
update_channel_list();
- commit_decoder_channels();
break;
}
}
settings.endGroup();
}
+ // Update the internal structures
+ update_channel_list();
+ commit_decoder_channels();
+
begin_decode();
}
dec->set_channels(channel_list);
}
+
+ // Channel bit IDs must be in sync with the channel's apperance in channels_
+ int id = 0;
+ for (data::DecodeChannel &ch : channels_)
+ if (ch.assigned_signal)
+ ch.bit_id = id++;
}
void DecodeSignal::mux_logic_samples(const int64_t start, const int64_t end)
vector<uint8_t> signal_in_bytepos;
vector<uint8_t> signal_in_bitpos;
- int id = 0;
for (data::DecodeChannel &ch : channels_)
if (ch.assigned_signal) {
- ch.bit_id = id++;
-
const shared_ptr<Logic> logic_data = ch.assigned_signal->logic_data();
const shared_ptr<LogicSegment> segment = logic_data->logic_segments().front();
segments.push_back(segment);
logic_mux_cond_.wait(logic_mux_lock);
}
} while (!logic_mux_interrupt_);
-
- // No more input data and session is stopped, let the decode thread
- // process any pending data, terminate and release the global SRD mutex
- // in order to let other decoders run
- decode_input_cond_.notify_one();
}
void DecodeSignal::query_input_metadata()