{
connect(&session_, SIGNAL(capture_state_changed(int)),
this, SLOT(on_capture_state_changed(int)));
-
- set_name(tr("Empty decoder signal"));
}
DecodeSignal::~DecodeSignal()
void DecodeSignal::stack_decoder(const srd_decoder *decoder)
{
assert(decoder);
- stack_.push_back(make_shared<decode::Decoder>(decoder));
+ const shared_ptr<Decoder> dec = make_shared<decode::Decoder>(decoder);
+
+ stack_.push_back(dec);
// Set name if this decoder is the first in the list
if (stack_.size() == 1)
// Include the newly created decode channels in the channel lists
update_channel_list();
- auto_assign_signals();
+ auto_assign_signals(dec);
commit_decoder_channels();
begin_decode();
}
return channels_;
}
-void DecodeSignal::auto_assign_signals()
+void DecodeSignal::auto_assign_signals(const shared_ptr<Decoder> dec)
{
bool new_assignment = false;
// Try to auto-select channels that don't have signals assigned yet
for (data::DecodeChannel &ch : channels_) {
+ // If a decoder is given, auto-assign only its channels
+ if (dec && (ch.decoder_ != dec))
+ continue;
+
if (ch.assigned_signal)
continue;
// Include the newly created decode channels in the channel lists
update_channel_list();
+ commit_decoder_channels();
break;
}
}
settings.endGroup();
+ channels_updated();
}
// Restore channel mapping
if (!ch_added) {
// Create new entry without a mapped signal
- data::DecodeChannel ch = {id++, false, nullptr,
+ data::DecodeChannel ch = {id++, 0, false, nullptr,
QString::fromUtf8(pdch->name), QString::fromUtf8(pdch->desc),
SRD_INITIAL_PIN_SAME_AS_SAMPLE0, decoder, pdch};
channels_.push_back(ch);
if (!ch_added) {
// Create new entry without a mapped signal
- data::DecodeChannel ch = {id++, true, nullptr,
+ data::DecodeChannel ch = {id++, 0, true, nullptr,
QString::fromUtf8(pdch->name), QString::fromUtf8(pdch->desc),
SRD_INITIAL_PIN_SAME_AS_SAMPLE0, decoder, pdch};
channels_.push_back(ch);
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);
void DecodeSignal::annotation_callback(srd_proto_data *pdata, void *decode_signal)
{
assert(pdata);
- assert(decoder);
+ assert(decode_signal);
DecodeSignal *const ds = (DecodeSignal*)decode_signal;
assert(ds);