X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=pv%2Fsession.cpp;h=a1a078788c4e49631e7d00df1ab5e82646a6cbe3;hb=12ea3616767553ee0a615f14bbcb8ec614589e34;hp=e84f78042b89593e9cb96adef18ed187067e5b11;hpb=6f925ba9d6faf1077b73c5a5808259576081716a;p=pulseview.git diff --git a/pv/session.cpp b/pv/session.cpp index e84f780..a1a0787 100644 --- a/pv/session.cpp +++ b/pv/session.cpp @@ -89,7 +89,6 @@ using std::vector; using sigrok::Analog; using sigrok::Channel; -using sigrok::ChannelType; using sigrok::ConfigKey; using sigrok::DatafeedCallbackFunction; using sigrok::Error; @@ -621,6 +620,9 @@ const unordered_set< shared_ptr > Session::signalbases() const #ifdef ENABLE_DECODE bool Session::add_decoder(srd_decoder *const dec) { + if (!dec) + return false; + map > channels; shared_ptr decoder_stack; @@ -638,7 +640,7 @@ bool Session::add_decoder(srd_decoder *const dec) // Auto select the initial channels for (const srd_channel *pdch : all_channels) for (shared_ptr b : signalbases_) { - if (b->type() == ChannelType::LOGIC) { + if (b->logic_data()) { if (QString::fromUtf8(pdch->name).toLower(). contains(b->name().toLower())) channels[pdch] = b; @@ -652,7 +654,7 @@ bool Session::add_decoder(srd_decoder *const dec) // Create the decode signal shared_ptr signalbase = - make_shared(nullptr); + make_shared(nullptr, data::SignalBase::DecodeChannel); signalbase->set_decoder_stack(decoder_stack); signalbases_.insert(signalbase); @@ -730,7 +732,7 @@ void Session::update_signals() unsigned int logic_channel_count = count_if( channels.begin(), channels.end(), [] (shared_ptr channel) { - return channel->type() == ChannelType::LOGIC; }); + return channel->type() == sigrok::ChannelType::LOGIC; }); // Create data containers for the logic data segments { @@ -780,11 +782,15 @@ void Session::update_signals() switch(channel->type()->id()) { case SR_CHANNEL_LOGIC: if (!signalbase) { - signalbase = make_shared(channel); + signalbase = make_shared(channel, + data::SignalBase::LogicChannel); signalbases_.insert(signalbase); all_signal_data_.insert(logic_data_); signalbase->set_data(logic_data_); + + connect(this, SIGNAL(capture_state_changed(int)), + signalbase.get(), SLOT(on_capture_state_changed(int))); } signal = shared_ptr( @@ -796,12 +802,16 @@ void Session::update_signals() case SR_CHANNEL_ANALOG: { if (!signalbase) { - signalbase = make_shared(channel); + signalbase = make_shared(channel, + data::SignalBase::AnalogChannel); signalbases_.insert(signalbase); shared_ptr data(new data::Analog()); all_signal_data_.insert(data); signalbase->set_data(data); + + connect(this, SIGNAL(capture_state_changed(int)), + signalbase.get(), SLOT(on_capture_state_changed(int))); } signal = shared_ptr( @@ -961,7 +971,7 @@ void Session::feed_in_logic(shared_ptr logic) // Create a new data segment cur_logic_segment_ = make_shared( - *logic_data_, logic, cur_samplerate_); + *logic_data_, logic->unit_size(), cur_samplerate_); logic_data_->push_segment(cur_logic_segment_); // @todo Putting this here means that only listeners querying @@ -969,11 +979,10 @@ void Session::feed_in_logic(shared_ptr logic) // frame_began is DecoderStack, but in future we need to signal // this after both analog and logic sweeps have begun. frame_began(); - } else { - // Append to the existing data segment - cur_logic_segment_->append_payload(logic); } + cur_logic_segment_->append_payload(logic); + data_received(); }