- // Are we setting a session device?
- auto session_device = dynamic_pointer_cast<SessionDevice>(device);
- // Did we have a session device selected previously?
- auto prev_session_device = dynamic_pointer_cast<SessionDevice>(device_);
-
- if (device_) {
- session_->remove_datafeed_callbacks();
- if (!prev_session_device) {
- device_->close();
- session_->remove_devices();
- }
- }
-
- if (session_device)
- session_ = session_device->parent();
-
- decode_traces_.clear();
-
- if (device) {
- if (!session_device)
- {
- session_ = device_manager_.context()->create_session();
-
- 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();
-}
-
-void Session::set_file(const string &name)
-{
- session_ = device_manager_.context()->load_session(name);
- device_ = session_->devices()[0];
- decode_traces_.clear();
- session_->add_datafeed_callback([=]
- (shared_ptr<Device> device, shared_ptr<Packet> packet) {
+ device_ = std::move(device);
+ device_->create();
+ device_->session()->add_datafeed_callback([=]
+ (shared_ptr<sigrok::Device> device, shared_ptr<Packet> packet) {