X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fsession.cpp;h=31cbb73c19e1fb37fde8955dff2de9e35062f683;hp=42c581d420122fd126fc9e7fb7d51b11f3b34648;hb=bcd64b9b7ae8187a9519c374e2552f6a00904251;hpb=5e6967cb2bcacbfb9e5b627becb6752621949998 diff --git a/pv/session.cpp b/pv/session.cpp index 42c581d4..31cbb73c 100644 --- a/pv/session.cpp +++ b/pv/session.cpp @@ -383,7 +383,7 @@ void Session::set_device(shared_ptr device) device_.reset(); - // Revert name back to default name (e.g. "Untitled-1") as the data is gone + // Revert name back to default name (e.g. "Session 1") as the data is gone name_ = default_name_; name_changed(); @@ -415,16 +415,17 @@ void Session::set_device(shared_ptr device) device_->open(); } catch (const QString &e) { device_.reset(); - device_changed(); - throw; } - device_->session()->add_datafeed_callback([=] - (shared_ptr device, shared_ptr packet) { - data_feed_in(device, packet); - }); + if (device_) { + device_->session()->add_datafeed_callback([=] + (shared_ptr device, shared_ptr packet) { + data_feed_in(device, packet); + }); + + update_signals(); + } - update_signals(); device_changed(); } @@ -532,7 +533,7 @@ void Session::start_capture(function error_handler) for (const shared_ptr d : all_signal_data_) d->clear(); - // Revert name back to default name (e.g. "Untitled-1") as the data is gone + // Revert name back to default name (e.g. "Session 1") as the data is gone name_ = default_name_; name_changed(); @@ -954,7 +955,7 @@ void Session::feed_in_logic(shared_ptr logic) // Create a new data segment cur_logic_segment_ = shared_ptr( - new data::LogicSegment(logic, cur_samplerate_)); + new data::LogicSegment(*logic_data_, logic, cur_samplerate_)); logic_data_->push_segment(cur_logic_segment_); // @todo Putting this here means that only listeners querying @@ -997,11 +998,6 @@ void Session::feed_in_analog(shared_ptr analog) // in the sweep containing this segment. sweep_beginning = true; - // Create a segment, keep it in the maps of channels - segment = shared_ptr( - new data::AnalogSegment(cur_samplerate_)); - cur_analog_segments_[channel] = segment; - // Find the analog data associated with the channel shared_ptr base = signalbase_from_channel(channel); assert(base); @@ -1009,6 +1005,11 @@ void Session::feed_in_analog(shared_ptr analog) shared_ptr data(base->analog_data()); assert(data); + // Create a segment, keep it in the maps of channels + segment = shared_ptr( + new data::AnalogSegment(*data, cur_samplerate_)); + cur_analog_segments_[channel] = segment; + // Push the segment into the analog data. data->push_segment(segment); } @@ -1031,6 +1032,8 @@ void Session::feed_in_analog(shared_ptr analog) void Session::data_feed_in(shared_ptr device, shared_ptr packet) { + static bool frame_began=false; + (void)device; assert(device); @@ -1052,6 +1055,7 @@ void Session::data_feed_in(shared_ptr device, case SR_DF_FRAME_BEGIN: feed_in_frame_begin(); + frame_began = true; break; case SR_DF_LOGIC: @@ -1072,6 +1076,7 @@ void Session::data_feed_in(shared_ptr device, } break; + case SR_DF_FRAME_END: case SR_DF_END: { { @@ -1079,7 +1084,10 @@ void Session::data_feed_in(shared_ptr device, cur_logic_segment_.reset(); cur_analog_segments_.clear(); } - frame_ended(); + if (frame_began) { + frame_began = false; + frame_ended(); + } break; } default: