X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=pv%2Fprop%2Fbinding%2Fdeviceoptions.cpp;h=e8ae002bae8ba0c0339b2da1fb5f9861d71fb5c3;hb=117ef0090a0c285369ce48bcc7e01d92faa9f329;hp=f71cbac2a42aeb57a3db42d4377b973346e679d5;hpb=a2b921574b467fd9193d06497bf0ee058e8f7470;p=pulseview.git diff --git a/pv/prop/binding/deviceoptions.cpp b/pv/prop/binding/deviceoptions.cpp index f71cbac2..e8ae002b 100644 --- a/pv/prop/binding/deviceoptions.cpp +++ b/pv/prop/binding/deviceoptions.cpp @@ -42,11 +42,13 @@ namespace binding { DeviceOptions::DeviceOptions(struct sr_dev_inst *sdi) : _sdi(sdi) { + assert(sdi); + GVariant *gvar_opts, *gvar_list; gsize num_opts; - if ((sr_config_list(sdi->driver, SR_CONF_DEVICE_OPTIONS, - &gvar_opts, sdi) != SR_OK)) + if ((sr_config_list(sdi->driver, sdi, NULL, SR_CONF_DEVICE_OPTIONS, + &gvar_opts) != SR_OK)) /* Driver supports no device instance options. */ return; @@ -61,7 +63,7 @@ DeviceOptions::DeviceOptions(struct sr_dev_inst *sdi) : const int key = info->key; - if(sr_config_list(_sdi->driver, key, &gvar_list, _sdi) != SR_OK) + if (sr_config_list(_sdi->driver, _sdi, NULL, key, &gvar_list) != SR_OK) gvar_list = NULL; const QString name(info->name); @@ -69,11 +71,12 @@ DeviceOptions::DeviceOptions(struct sr_dev_inst *sdi) : 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: - bind_int(name, key, "%", make_pair(0L, 100L)); + bind_int(name, key, "%", pair(0, 100)); break; case SR_CONF_PATTERN_MODE: @@ -95,6 +98,10 @@ DeviceOptions::DeviceOptions(struct sr_dev_inst *sdi) : case SR_CONF_VDIV: bind_enum(name, key, gvar_list, print_vdiv); break; + + case SR_CONF_VOLTAGE_THRESHOLD: + bind_enum(name, key, gvar_list, print_voltage_threshold); + break; } if (gvar_list) @@ -107,7 +114,7 @@ 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) { + if (sr_config_get(sdi->driver, sdi, NULL, key, &data) != SR_OK) { qDebug() << "WARNING: Failed to get value of config id" << key; return NULL; @@ -118,7 +125,7 @@ GVariant* DeviceOptions::config_getter( void DeviceOptions::config_setter( const struct sr_dev_inst *sdi, int key, GVariant* value) { - if (sr_config_set(sdi, key, value) != SR_OK) + if (sr_config_set(sdi, NULL, key, value) != SR_OK) qDebug() << "WARNING: Failed to set value of sample rate"; } @@ -173,74 +180,6 @@ QString DeviceOptions::print_gvariant(GVariant *const gvar) 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)); - - 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); -} - QString DeviceOptions::print_timebase(GVariant *const gvar) { uint64_t p, q; @@ -255,6 +194,15 @@ QString DeviceOptions::print_vdiv(GVariant *const gvar) return QString(sr_voltage_string(p, q)); } +QString DeviceOptions::print_voltage_threshold(GVariant *const gvar) +{ + gdouble lo, hi; + char buf[64]; + g_variant_get(gvar, "(dd)", &lo, &hi); + snprintf(buf, sizeof(buf), "L<%.1fV H>%.1fV", lo, hi); + return QString(buf); +} + } // binding } // prop } // pv