X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=pv%2Fprop%2Fbinding%2Fdeviceoptions.cpp;h=6da16652f2cc0dca814491b46c30e384fa29bc30;hb=19adbc2c342b190161ec1223377a3619974b91f7;hp=e661b1952f0588e3534424c6bc32def7e42fe209;hpb=2f779c1bd6a9a74c97be09ee6842a7527e083fa6;p=pulseview.git diff --git a/pv/prop/binding/deviceoptions.cpp b/pv/prop/binding/deviceoptions.cpp index e661b19..6da1665 100644 --- a/pv/prop/binding/deviceoptions.cpp +++ b/pv/prop/binding/deviceoptions.cpp @@ -27,11 +27,14 @@ #include "deviceoptions.h" +#include #include #include #include #include +#include + using boost::bind; using boost::function; using boost::optional; @@ -45,15 +48,19 @@ namespace pv { namespace prop { namespace binding { -DeviceOptions::DeviceOptions(const sr_dev_inst *sdi) : - _sdi(sdi) +DeviceOptions::DeviceOptions(shared_ptr dev_inst, + const sr_probe_group *group) : + _dev_inst(dev_inst), + _group(group) { + assert(dev_inst); + sr_dev_inst *const sdi = dev_inst->dev_inst(); assert(sdi); GVariant *gvar_opts, *gvar_list; gsize num_opts; - if ((sr_config_list(sdi->driver, sdi, NULL, SR_CONF_DEVICE_OPTIONS, + if ((sr_config_list(sdi->driver, sdi, group, SR_CONF_DEVICE_OPTIONS, &gvar_opts) != SR_OK)) /* Driver supports no device instance options. */ return; @@ -69,7 +76,8 @@ DeviceOptions::DeviceOptions(const sr_dev_inst *sdi) : const int key = info->key; - if (sr_config_list(_sdi->driver, _sdi, NULL, key, &gvar_list) != SR_OK) + if (sr_config_list(sdi->driver, sdi, group, + key, &gvar_list) != SR_OK) gvar_list = NULL; const QString name = QString::fromUtf8(info->name); @@ -88,11 +96,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; @@ -117,10 +128,10 @@ DeviceOptions::DeviceOptions(const sr_dev_inst *sdi) : } GVariant* DeviceOptions::config_getter( - const struct sr_dev_inst *sdi, int key) + const sr_dev_inst *sdi, const sr_probe_group *group, int key) { GVariant *data = NULL; - if (sr_config_get(sdi->driver, sdi, NULL, key, &data) != SR_OK) { + if (sr_config_get(sdi->driver, sdi, group, key, &data) != SR_OK) { qDebug() << "WARNING: Failed to get value of config id" << key; return NULL; @@ -129,17 +140,21 @@ GVariant* DeviceOptions::config_getter( } void DeviceOptions::config_setter( - const struct sr_dev_inst *sdi, int key, GVariant* value) + const struct sr_dev_inst *sdi, const sr_probe_group *group, int key, + GVariant* value) { - if (sr_config_set(sdi, NULL, key, value) != SR_OK) + 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) { + sr_dev_inst *const sdi = _dev_inst->dev_inst(); + assert(sdi); + _properties.push_back(shared_ptr( - new Bool(name, bind(config_getter, _sdi, key), - bind(config_setter, _sdi, key, _1)))); + new Bool(name, bind(config_getter, sdi, _group, key), + bind(config_setter, sdi, _group, key, _1)))); } void DeviceOptions::bind_enum(const QString &name, int key, @@ -151,23 +166,29 @@ void DeviceOptions::bind_enum(const QString &name, int key, assert(gvar_list); + sr_dev_inst *const sdi = _dev_inst->dev_inst(); + assert(sdi); + 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, key), - bind(config_setter, _sdi, key, _1)))); + bind(config_getter, sdi, _group, key), + bind(config_setter, sdi, _group, key, _1)))); } void DeviceOptions::bind_int(const QString &name, int key, QString suffix, optional< std::pair > range) { + sr_dev_inst *const sdi = _dev_inst->dev_inst(); + assert(sdi); + _properties.push_back(shared_ptr( new Int(name, suffix, range, - bind(config_getter, _sdi, key), - bind(config_setter, _sdi, key, _1)))); + bind(config_getter, sdi, _group, key), + bind(config_setter, sdi, _group, key, _1)))); } QString DeviceOptions::print_gvariant(GVariant *const gvar)