if (device_)
device_->close();
+ device_.reset();
+
+ // Remove all traces
+ signals_.clear();
+ cur_logic_segment_.reset();
+
+ for (auto entry : cur_analog_segments_) {
+ shared_ptr<sigrok::Channel>(entry.first).reset();
+ shared_ptr<data::AnalogSegment>(entry.second).reset();
+ }
+
+ logic_data_.reset();
+ decode_traces_.clear();
+
+ signals_changed();
+
device_ = std::move(device);
device_->open();
device_->session()->add_datafeed_callback([=]
data_feed_in(device, packet);
});
- decode_traces_.clear();
-
update_signals();
device_selected();
}
void Session::update_signals()
{
- assert(device_);
+ if (!device_) {
+ signals_.clear();
+ logic_data_.reset();
+ return;
+ }
lock_guard<recursive_mutex> lock(data_mutex_);