X-Git-Url: http://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fdevice%2Fdevinst.cpp;fp=pv%2Fdevice%2Fdevinst.cpp;h=a5f96808e55d14161050b5d3e966ca0e847b3c62;hp=0000000000000000000000000000000000000000;hb=945745012eb57cefa1ef457daf48cfffa99f9ec2;hpb=0fc664a99e0d9a444e593123d1db7a47b1657366 diff --git a/pv/device/devinst.cpp b/pv/device/devinst.cpp new file mode 100644 index 00000000..a5f96808 --- /dev/null +++ b/pv/device/devinst.cpp @@ -0,0 +1,124 @@ +/* + * This file is part of the PulseView project. + * + * Copyright (C) 2014 Joel Holdsworth + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include +#include + +#include + +#include + +#include "devinst.h" + +using std::ostringstream; +using std::string; + +namespace pv { +namespace device { + +DevInst::DevInst(sr_dev_inst *sdi) : + _sdi(sdi) +{ + assert(_sdi); +} + +sr_dev_inst* DevInst::dev_inst() const +{ + return _sdi; +} + +string DevInst::format_device_title() const +{ + 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 (_sdi->version && _sdi->version[0]) + s << _sdi->version; + + return s.str(); +} + +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) + 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) { + config_changed(); + return true; + } + return false; +} + +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) + return NULL; + return data; +} + +void DevInst::enable_probe(const sr_probe *probe, bool enable) +{ + for (const GSList *p = _sdi->probes; p; p = p->next) + if (probe == p->data) { + const_cast(probe)->enabled = enable; + config_changed(); + return; + } + + // Probe was not found in the device + assert(0); +} + +uint64_t DevInst::get_sample_limit() +{ + uint64_t sample_limit; + GVariant* gvar = get_config(NULL, SR_CONF_LIMIT_SAMPLES); + if (gvar != NULL) { + sample_limit = g_variant_get_uint64(gvar); + g_variant_unref(gvar); + } else { + sample_limit = 0U; + } + return sample_limit; +} + +} // device +} // pv