X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fprop%2Fbinding%2Fdeviceoptions.cpp;h=39e12816fd2e3243c22bfeaaea4ca0410235b179;hp=a5b9dd2365d9e6a4c058979f9a94e3af8f74c50e;hb=d23445348bf04a698e062a3b917360313ecbcaad;hpb=941c1ba74ba3ba6dd44bf23aafee28809138032b diff --git a/pv/prop/binding/deviceoptions.cpp b/pv/prop/binding/deviceoptions.cpp index a5b9dd23..39e12816 100644 --- a/pv/prop/binding/deviceoptions.cpp +++ b/pv/prop/binding/deviceoptions.cpp @@ -20,24 +20,26 @@ #include -#include -#include - #include +#include + #include "deviceoptions.h" +#include #include #include #include #include +#include + using boost::bind; -using boost::function; +using std::function; using boost::optional; -using boost::shared_ptr; using std::make_pair; using std::pair; +using std::shared_ptr; using std::string; using std::vector; @@ -45,18 +47,17 @@ namespace pv { namespace prop { namespace binding { -DeviceOptions::DeviceOptions(const sr_dev_inst *sdi, - const sr_probe_group *group) : - _sdi(sdi), +DeviceOptions::DeviceOptions(shared_ptr dev_inst, + const sr_channel_group *group) : + _dev_inst(dev_inst), _group(group) { - assert(sdi); + assert(dev_inst); - GVariant *gvar_opts, *gvar_list; + GVariant *gvar_opts; gsize num_opts; - if ((sr_config_list(sdi->driver, sdi, group, SR_CONF_DEVICE_OPTIONS, - &gvar_opts) != SR_OK)) + if (!(gvar_opts = dev_inst->list_config(group, SR_CONF_DEVICE_OPTIONS))) /* Driver supports no device instance options. */ return; @@ -70,10 +71,7 @@ DeviceOptions::DeviceOptions(const sr_dev_inst *sdi, continue; const int key = info->key; - - if (sr_config_list(_sdi->driver, _sdi, group, - key, &gvar_list) != SR_OK) - gvar_list = NULL; + GVariant *const gvar_list = dev_inst->list_config(group, key); const QString name = QString::fromUtf8(info->name); @@ -91,11 +89,14 @@ DeviceOptions::DeviceOptions(const sr_dev_inst *sdi, case SR_CONF_PATTERN_MODE: case SR_CONF_BUFFERSIZE: case SR_CONF_TRIGGER_SOURCE: + case SR_CONF_TRIGGER_SLOPE: case SR_CONF_FILTER: case SR_CONF_COUPLING: + case SR_CONF_CLOCK_EDGE: bind_enum(name, key, gvar_list); break; + case SR_CONF_EXTERNAL_CLOCK: case SR_CONF_RLE: bind_bool(name, key); break; @@ -119,31 +120,13 @@ DeviceOptions::DeviceOptions(const sr_dev_inst *sdi, g_variant_unref(gvar_opts); } -GVariant* DeviceOptions::config_getter( - const sr_dev_inst *sdi, const sr_probe_group *group, int key) -{ - GVariant *data = NULL; - if (sr_config_get(sdi->driver, sdi, group, key, &data) != SR_OK) { - qDebug() << - "WARNING: Failed to get value of config id" << key; - return NULL; - } - return data; -} - -void DeviceOptions::config_setter( - const struct sr_dev_inst *sdi, const sr_probe_group *group, int key, - GVariant* value) -{ - if (sr_config_set(sdi, group, key, value) != SR_OK) - qDebug() << "WARNING: Failed to set value of sample rate"; -} - void DeviceOptions::bind_bool(const QString &name, int key) { - _properties.push_back(shared_ptr( - new Bool(name, bind(config_getter, _sdi, _group, key), - bind(config_setter, _sdi, _group, key, _1)))); + assert(_dev_inst); + _properties.push_back(shared_ptr(new Bool(name, + bind(&device::DevInst::get_config, _dev_inst, _group, key), + bind(&device::DevInst::set_config, _dev_inst, + _group, key, _1)))); } void DeviceOptions::bind_enum(const QString &name, int key, @@ -153,41 +136,31 @@ void DeviceOptions::bind_enum(const QString &name, int key, GVariantIter iter; vector< pair > values; - assert(gvar_list); + assert(_dev_inst); + if (!gvar_list) { + qDebug() << "Config key " << key << " was listed, but no " + "options were given"; + return; + } g_variant_iter_init (&iter, gvar_list); while ((gvar = g_variant_iter_next_value (&iter))) values.push_back(make_pair(gvar, printer(gvar))); - _properties.push_back(shared_ptr( - new Enum(name, values, - bind(config_getter, _sdi, _group, key), - bind(config_setter, _sdi, _group, key, _1)))); + _properties.push_back(shared_ptr(new Enum(name, values, + bind(&device::DevInst::get_config, _dev_inst, _group, key), + bind(&device::DevInst::set_config, _dev_inst, + _group, key, _1)))); } void DeviceOptions::bind_int(const QString &name, int key, QString suffix, optional< std::pair > range) { - _properties.push_back(shared_ptr( - new Int(name, suffix, range, - bind(config_getter, _sdi, _group, key), - bind(config_setter, _sdi, _group, key, _1)))); -} - -QString DeviceOptions::print_gvariant(GVariant *const gvar) -{ - QString s; - - if (g_variant_is_of_type(gvar, G_VARIANT_TYPE("s"))) - s = QString::fromUtf8(g_variant_get_string(gvar, NULL)); - else - { - gchar *const text = g_variant_print(gvar, FALSE); - s = QString::fromUtf8(text); - g_free(text); - } + assert(_dev_inst); - return s; + _properties.push_back(shared_ptr(new Int(name, suffix, range, + bind(&device::DevInst::get_config, _dev_inst, _group, key), + bind(&device::DevInst::set_config, _dev_inst, _group, key, _1)))); } QString DeviceOptions::print_timebase(GVariant *const gvar)