]> sigrok.org Git - pulseview.git/blobdiff - pv/device/devinst.cpp
Update to new session API.
[pulseview.git] / pv / device / devinst.cpp
index 5fe2951756e4b602fca4da0fa4b379f3cfc19ef0..cb37ceefd51d39b5a5783c4960af9aabbc58f4d0 100644 (file)
 
 #include "devinst.h"
 
+#include <pv/sigsession.h>
+
 namespace pv {
 namespace device {
 
-DevInst::DevInst(sr_dev_inst *sdi) :
-       _sdi(sdi)
+DevInst::DevInst() :
+       _owner(NULL)
 {
-       assert(_sdi);
 }
 
-sr_dev_inst* DevInst::dev_inst() const
+void DevInst::use(SigSession *owner) throw(QString)
 {
-       return _sdi;
+       assert(owner);
+       assert(!_owner);
+       _owner = owner;
+}
+
+void DevInst::release()
+{
+       if (_owner) {
+               _owner->release_device(this);
+               _owner = NULL;
+       }
 }
 
-GVariant* DevInst::get_config(const sr_probe_group *group, int key)
+SigSession* DevInst::owner() const
+{
+       return _owner;
+}
+
+GVariant* DevInst::get_config(const sr_channel_group *group, int key)
 {
        GVariant *data = NULL;
-       if (sr_config_get(_sdi->driver, _sdi, group, key, &data) != SR_OK)
+       assert(_owner);
+       sr_dev_inst *const sdi = dev_inst();
+       assert(sdi);
+       if (sr_config_get(sdi->driver, sdi, group, key, &data) != SR_OK)
                return NULL;
        return data;
 }
 
-bool DevInst::set_config(const sr_probe_group *group, int key, GVariant *data)
+bool DevInst::set_config(const sr_channel_group *group, int key, GVariant *data)
 {
-       if(sr_config_set(_sdi, group, key, data) == SR_OK) {
+       assert(_owner);
+       sr_dev_inst *const sdi = dev_inst();
+       assert(sdi);
+       if(sr_config_set(sdi, group, key, data) == SR_OK) {
                config_changed();
                return true;
        }
        return false;
 }
 
-GVariant* DevInst::list_config(const sr_probe_group *group, int key)
+GVariant* DevInst::list_config(const sr_channel_group *group, int key)
 {
        GVariant *data = NULL;
-       if (sr_config_list(_sdi->driver, _sdi, group, key, &data) != SR_OK)
+       assert(_owner);
+       sr_dev_inst *const sdi = dev_inst();
+       assert(sdi);
+       if (sr_config_list(sdi->driver, sdi, group, key, &data) != SR_OK)
                return NULL;
        return data;
 }
 
-void DevInst::enable_probe(const sr_probe *probe, bool enable)
+void DevInst::enable_probe(const sr_channel *probe, bool enable)
 {
-       for (const GSList *p = _sdi->probes; p; p = p->next)
+       assert(_owner);
+       sr_dev_inst *const sdi = dev_inst();
+       assert(sdi);
+       for (const GSList *p = sdi->channels; p; p = p->next)
                if (probe == p->data) {
-                       const_cast<sr_probe*>(probe)->enabled = enable;
+                       const_cast<sr_channel*>(probe)->enabled = enable;
                        config_changed();
                        return;
                }
@@ -91,5 +119,21 @@ uint64_t DevInst::get_sample_limit()
        return sample_limit;
 }
 
+bool DevInst::is_trigger_enabled() const
+{
+       return false;
+}
+
+void DevInst::start()
+{
+       if (sr_session_start(SigSession::_sr_session) != SR_OK)
+               throw tr("Failed to start session.");
+}
+
+void DevInst::run()
+{
+       sr_session_run(SigSession::_sr_session);
+}
+
 } // device
 } // pv