X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fprop%2Fbinding%2Fdeviceoptions.cpp;h=26d4ef2a8fabe72dd3047525ca7e7c22112f0e99;hp=513fe856599682411a552c5345fde38384b1255c;hb=5b1994c45194a95069dfcadf637723f3db8249da;hpb=95237c18d988245fd5f484b70a481891982f5f37 diff --git a/pv/prop/binding/deviceoptions.cpp b/pv/prop/binding/deviceoptions.cpp index 513fe856..26d4ef2a 100644 --- a/pv/prop/binding/deviceoptions.cpp +++ b/pv/prop/binding/deviceoptions.cpp @@ -20,35 +20,42 @@ #include -#include -#include - #include #include "deviceoptions.h" +#include #include #include #include #include -using namespace boost; -using namespace std; +#include + +using boost::bind; +using boost::function; +using boost::optional; +using boost::shared_ptr; +using std::make_pair; +using std::pair; +using std::string; +using std::vector; namespace pv { namespace prop { namespace binding { -DeviceOptions::DeviceOptions(struct sr_dev_inst *sdi) : - _sdi(sdi) +DeviceOptions::DeviceOptions(shared_ptr dev_inst, + const sr_probe_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, SR_CONF_DEVICE_OPTIONS, - &gvar_opts, sdi) != SR_OK)) + if (!(gvar_opts = dev_inst->list_config(group, SR_CONF_DEVICE_OPTIONS))) /* Driver supports no device instance options. */ return; @@ -62,16 +69,15 @@ DeviceOptions::DeviceOptions(struct sr_dev_inst *sdi) : continue; const int key = info->key; + GVariant *const gvar_list = dev_inst->list_config(group, key); - if(sr_config_list(_sdi->driver, key, &gvar_list, _sdi) != SR_OK) - gvar_list = NULL; - - const QString name(info->name); + const QString name = QString::fromUtf8(info->name); switch(key) { case SR_CONF_SAMPLERATE: - bind_samplerate(name, gvar_list); + // Sample rate values are not bound because they are shown + // in the SamplingBar break; case SR_CONF_CAPTURE_RATIO: @@ -81,11 +87,14 @@ DeviceOptions::DeviceOptions(struct 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; @@ -109,30 +118,13 @@ DeviceOptions::DeviceOptions(struct sr_dev_inst *sdi) : g_variant_unref(gvar_opts); } -GVariant* DeviceOptions::config_getter( - const struct sr_dev_inst *sdi, int key) -{ - GVariant *data = NULL; - if (sr_config_get(sdi->driver, key, &data, sdi) != 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, int key, GVariant* value) -{ - if (sr_config_set(sdi, 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, key), - bind(config_setter, _sdi, 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, @@ -142,123 +134,41 @@ void DeviceOptions::bind_enum(const QString &name, int key, GVariantIter iter; vector< pair > values; + assert(_dev_inst); assert(gvar_list); 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)))); + _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, key), - bind(config_setter, _sdi, key, _1)))); -} - -QString DeviceOptions::print_gvariant(GVariant *const gvar) -{ - QString s; - - if (g_variant_is_of_type(gvar, G_VARIANT_TYPE("s"))) - s = QString(g_variant_get_string(gvar, NULL)); - else - { - gchar *const text = g_variant_print(gvar, FALSE); - s = QString(text); - g_free(text); - } - - return s; -} - -void DeviceOptions::bind_samplerate(const QString &name, - GVariant *const gvar_list) -{ - GVariant *gvar_list_samplerates; - - assert(gvar_list); - - if ((gvar_list_samplerates = g_variant_lookup_value(gvar_list, - "samplerate-steps", G_VARIANT_TYPE("at")))) - { - gsize num_elements; - const uint64_t *const elements = - (const uint64_t *)g_variant_get_fixed_array( - gvar_list_samplerates, &num_elements, sizeof(uint64_t)); - - assert(num_elements == 3); - - _properties.push_back(shared_ptr( - new Double(name, 0, QObject::tr("Hz"), - make_pair((double)elements[0], (double)elements[1]), - (double)elements[2], - bind(samplerate_double_getter, _sdi), - bind(samplerate_double_setter, _sdi, _1)))); - - g_variant_unref(gvar_list_samplerates); - } - else if ((gvar_list_samplerates = g_variant_lookup_value(gvar_list, - "samplerates", G_VARIANT_TYPE("at")))) - { - bind_enum(name, SR_CONF_SAMPLERATE, - gvar_list_samplerates, print_samplerate); - g_variant_unref(gvar_list_samplerates); - } -} - -QString DeviceOptions::print_samplerate(GVariant *const gvar) -{ - char *const s = sr_samplerate_string( - g_variant_get_uint64(gvar)); - const QString qstring(s); - g_free(s); - return qstring; -} - -GVariant* DeviceOptions::samplerate_double_getter( - const struct sr_dev_inst *sdi) -{ - GVariant *const gvar = config_getter(sdi, SR_CONF_SAMPLERATE); - - if(!gvar) - return NULL; - - GVariant *const gvar_double = g_variant_new_double( - g_variant_get_uint64(gvar)); + assert(_dev_inst); - g_variant_unref(gvar); - - return gvar_double; -} - -void DeviceOptions::samplerate_double_setter( - struct sr_dev_inst *sdi, GVariant *value) -{ - GVariant *const gvar = g_variant_new_uint64( - g_variant_get_double(value)); - config_setter(sdi, SR_CONF_SAMPLERATE, gvar); + _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) { uint64_t p, q; g_variant_get(gvar, "(tt)", &p, &q); - return QString(sr_period_string(p * q)); + return QString::fromUtf8(sr_period_string(p * q)); } QString DeviceOptions::print_vdiv(GVariant *const gvar) { uint64_t p, q; g_variant_get(gvar, "(tt)", &p, &q); - return QString(sr_voltage_string(p, q)); + return QString::fromUtf8(sr_voltage_string(p, q)); } QString DeviceOptions::print_voltage_threshold(GVariant *const gvar) @@ -267,7 +177,7 @@ QString DeviceOptions::print_voltage_threshold(GVariant *const gvar) char buf[64]; g_variant_get(gvar, "(dd)", &lo, &hi); snprintf(buf, sizeof(buf), "L<%.1fV H>%.1fV", lo, hi); - return QString(buf); + return QString::fromUtf8(buf); } } // binding