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([=]
(shared_ptr<sigrok::Device> device, shared_ptr<Packet> packet) {
data_feed_in(device, packet);
});
- update_signals();
-
- 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_);
if (iter != cur_analog_segments_.end())
segment = (*iter).second;
else {
- // If no segment was found, this means we havn't
+ // If no segment was found, this means we haven't
// created one yet. i.e. this is the first packet
// in the sweep containing this segment.
sweep_beginning = true;