X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fdevice%2Fdevinst.cpp;h=44c1a83154f1f5b046290353a0ddbc4beb36b2da;hp=a5f96808e55d14161050b5d3e966ca0e847b3c62;hb=29efe92a807a93572b44369d2703f572778ebb15;hpb=945745012eb57cefa1ef457daf48cfffa99f9ec2 diff --git a/pv/device/devinst.cpp b/pv/device/devinst.cpp index a5f96808..44c1a831 100644 --- a/pv/device/devinst.cpp +++ b/pv/device/devinst.cpp @@ -19,7 +19,6 @@ */ #include -#include #include @@ -27,59 +26,53 @@ #include "devinst.h" -using std::ostringstream; -using std::string; +#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) { - return _sdi; + assert(owner); + assert(!_owner); + _owner = owner; + sr_dev_open(dev_inst()); } -string DevInst::format_device_title() const +void DevInst::release() { - ostringstream s; - - assert(_sdi); - - if (_sdi->vendor && _sdi->vendor[0]) { - s << _sdi->vendor; - if ((_sdi->model && _sdi->model[0]) || - (_sdi->version && _sdi->version[0])) - s << ' '; - } - - if (_sdi->model && _sdi->model[0]) { - s << _sdi->model; - if (_sdi->version && _sdi->version[0]) - s << ' '; + if (_owner) { + _owner->release_device(this); + _owner = NULL; + sr_dev_close(dev_inst()); } +} - if (_sdi->version && _sdi->version[0]) - s << _sdi->version; - - return s.str(); +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) + 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) { + sr_dev_inst *const sdi = dev_inst(); + assert(sdi); + if(sr_config_set(sdi, group, key, data) == SR_OK) { config_changed(); return true; } @@ -89,14 +82,18 @@ 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) + 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) + 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();