X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=pv%2Fdevice%2Fdevinst.cpp;h=86595ae79069a9c7e2b9e33700e1c5eee7be8661;hb=ae2d1bc5b5aba9fcdd7fef42ef1bc9069267d6f7;hp=5fe2951756e4b602fca4da0fa4b379f3cfc19ef0;hpb=921b90c0b3ae0cf44247da3d87bd7dc0612e9681;p=pulseview.git diff --git a/pv/device/devinst.cpp b/pv/device/devinst.cpp index 5fe2951..86595ae 100644 --- a/pv/device/devinst.cpp +++ b/pv/device/devinst.cpp @@ -26,31 +26,53 @@ #include "devinst.h" +#include + 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; + } +} + +SigSession* DevInst::owner() const +{ + return _owner; } GVariant* DevInst::get_config(const sr_probe_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) { - 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; } @@ -60,14 +82,20 @@ bool DevInst::set_config(const sr_probe_group *group, int key, GVariant *data) GVariant* DevInst::list_config(const sr_probe_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) { - 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->probes; p; p = p->next) if (probe == p->data) { const_cast(probe)->enabled = enable; config_changed(); @@ -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() != SR_OK) + throw tr("Failed to start session."); +} + +void DevInst::run() +{ + sr_session_run(); +} + } // device } // pv