Added a reference to the SigSession in DecoderStack
[pulseview.git] / pv / sigsession.cpp
index 5cc999829f7bd1748aeb07b2732eed883f5d438c..92118b4816711f32d06b314c56e211b327ff7e25 100644 (file)
@@ -54,6 +54,7 @@ using boost::function;
 using boost::lock_guard;
 using boost::mutex;
 using boost::shared_ptr;
+using std::list;
 using std::map;
 using std::set;
 using std::string;
@@ -70,6 +71,8 @@ SigSession::SigSession(DeviceManager &device_manager) :
 {
        // TODO: This should not be necessary
        _session = this;
+
+       set_default_device();
 }
 
 SigSession::~SigSession()
@@ -212,7 +215,7 @@ bool SigSession::add_decoder(srd_decoder *const dec)
 
                // Create the decoder
                decoder_stack = shared_ptr<data::DecoderStack>(
-                       new data::DecoderStack(dec));
+                       new data::DecoderStack(*this, dec));
 
                // Make a list of all the probes
                std::vector<const srd_probe*> all_probes;
@@ -287,6 +290,28 @@ void SigSession::set_capture_state(capture_state state)
                capture_state_changed(state);
 }
 
+void SigSession::set_default_device()
+{
+       shared_ptr<pv::device::DevInst> default_device;
+       const list< shared_ptr<device::Device> > &devices =
+               _device_manager.devices();
+
+       if (!devices.empty()) {
+               // Fall back to the first device in the list.
+               default_device = devices.front();
+
+               // Try and find the demo device and select that by default
+               BOOST_FOREACH (shared_ptr<pv::device::Device> dev, devices)
+                       if (strcmp(dev->dev_inst()->driver->name,
+                               "demo") == 0) {
+                               default_device = dev;
+                               break;
+                       }
+       }
+
+       set_device(default_device);
+}
+
 void SigSession::update_signals(shared_ptr<device::DevInst> dev_inst)
 {
        assert(dev_inst);