#ifdef ENABLE_DECODE
bool Session::add_decoder(srd_decoder *const dec)
{
- map<const srd_channel*, shared_ptr<view::LogicSignal> > channels;
+ map<const srd_channel*, shared_ptr<data::SignalBase> > channels;
shared_ptr<data::DecoderStack> decoder_stack;
try {
// Auto select the initial channels
for (const srd_channel *pdch : all_channels)
- for (shared_ptr<view::Signal> s : signals_) {
- shared_ptr<view::LogicSignal> l =
- dynamic_pointer_cast<view::LogicSignal>(s);
- if (l && QString::fromUtf8(pdch->name).
- toLower().contains(
- s->channel()->name().toLower()))
- channels[pdch] = l;
+ for (shared_ptr<data::SignalBase> b : signalbases_) {
+ if (b->type() == ChannelType::LOGIC) {
+ if (QString::fromUtf8(pdch->name).toLower().
+ contains(b->name().toLower()))
+ channels[pdch] = b;
+ }
}
assert(decoder_stack);
const auto iter = std::find_if(
prev_sigs.cbegin(), prev_sigs.cend(),
[&](const shared_ptr<view::Signal> &s) {
- return s->channel()->channel() == channel;
+ return s->base()->channel() == channel;
});
if (iter != prev_sigs.end()) {
// Copy the signal from the old set to the new
signal = *iter;
- auto logic_signal = dynamic_pointer_cast<
- view::LogicSignal>(signal);
- if (logic_signal)
- logic_signal->set_logic_data(
- logic_data_);
} else {
// Create a new signal
signalbase = shared_ptr<data::SignalBase>(
switch(channel->type()->id()) {
case SR_CHANNEL_LOGIC:
+ signalbase->set_data(logic_data_);
signal = shared_ptr<view::Signal>(
new view::LogicSignal(*this,
- device_, signalbase, logic_data_));
+ device_, signalbase));
all_signal_data_.insert(logic_data_);
signalbases_.insert(signalbase);
break;
case SR_CHANNEL_ANALOG:
{
- shared_ptr<data::Analog> data(
- new data::Analog());
+ shared_ptr<data::Analog> data(new data::Analog());
+ signalbase->set_data(data);
signal = shared_ptr<view::Signal>(
new view::AnalogSignal(
- *this, signalbase, data));
+ *this, signalbase));
all_signal_data_.insert(data);
signalbases_.insert(signalbase);
break;
signals_changed();
}
-shared_ptr<data::SignalBase> Session::signal_from_channel(
+shared_ptr<data::SignalBase> Session::signalbase_from_channel(
shared_ptr<sigrok::Channel> channel) const
{
for (shared_ptr<data::SignalBase> sig : signalbases_) {
cur_analog_segments_[channel] = segment;
// Find the analog data associated with the channel
- shared_ptr<view::AnalogSignal> sig =
- dynamic_pointer_cast<view::AnalogSignal>(
- signal_from_channel(channel));
- assert(sig);
+ shared_ptr<data::SignalBase> base = signalbase_from_channel(channel);
+ assert(base);
- shared_ptr<data::Analog> data(sig->analog_data());
+ shared_ptr<data::Analog> data(base->analog_data());
assert(data);
// Push the segment into the analog data.