]> sigrok.org Git - pulseview.git/blobdiff - pv/sigsession.cpp
MainWindow: Handle device selection failure
[pulseview.git] / pv / sigsession.cpp
index 87ba9afa5d484eace490524d5d9247a0ab5061ef..84c75896d42d01f60ee8e0cd1ef2e04b2d28d9f4 100644 (file)
@@ -137,22 +137,30 @@ void Session::set_device(shared_ptr<Device> device)
        if (session_device)
                session_ = session_device->parent();
 
-       device_ = device;
        decode_traces_.clear();
 
        if (device) {
                if (!session_device)
                {
                        session_ = device_manager_.context()->create_session();
-                       device->open();
+
+                       try {
+                               device->open();
+                       } catch(const sigrok::Error &e) {
+                               throw QString(e.what());
+                       }
+
                        session_->add_device(device);
                }
+
+               device_ = device;
                session_->add_datafeed_callback([=]
                        (shared_ptr<Device> device, shared_ptr<Packet> packet) {
                                data_feed_in(device, packet);
                        });
                update_signals(device);
-       }
+       } else
+               device_ = nullptr;
 
        device_selected();
 }