X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=pv%2Fprop%2Fbinding%2Fdeviceoptions.cpp;h=513fe856599682411a552c5345fde38384b1255c;hb=95237c18d988245fd5f484b70a481891982f5f37;hp=90f474f24935c04616a6871c1dec89df176d17b2;hpb=4d5d5d6aeb7d936fb6b939f6c6531b3f054dac1f;p=pulseview.git diff --git a/pv/prop/binding/deviceoptions.cpp b/pv/prop/binding/deviceoptions.cpp index 90f474f2..513fe856 100644 --- a/pv/prop/binding/deviceoptions.cpp +++ b/pv/prop/binding/deviceoptions.cpp @@ -27,8 +27,10 @@ #include "deviceoptions.h" +#include #include #include +#include using namespace boost; using namespace std; @@ -40,6 +42,8 @@ namespace binding { DeviceOptions::DeviceOptions(struct sr_dev_inst *sdi) : _sdi(sdi) { + assert(sdi); + GVariant *gvar_opts, *gvar_list; gsize num_opts; @@ -54,11 +58,13 @@ DeviceOptions::DeviceOptions(struct sr_dev_inst *sdi) : const struct sr_config_info *const info = sr_config_info_get(options[i]); + if (!info) + continue; + const int key = info->key; - if (!info || sr_config_list(_sdi->driver, key, - &gvar_list, _sdi) != SR_OK) - continue; + if(sr_config_list(_sdi->driver, key, &gvar_list, _sdi) != SR_OK) + gvar_list = NULL; const QString name(info->name); @@ -68,6 +74,10 @@ DeviceOptions::DeviceOptions(struct sr_dev_inst *sdi) : bind_samplerate(name, gvar_list); break; + case SR_CONF_CAPTURE_RATIO: + bind_int(name, key, "%", pair(0, 100)); + break; + case SR_CONF_PATTERN_MODE: case SR_CONF_BUFFERSIZE: case SR_CONF_TRIGGER_SOURCE: @@ -76,6 +86,10 @@ DeviceOptions::DeviceOptions(struct sr_dev_inst *sdi) : bind_enum(name, key, gvar_list); break; + case SR_CONF_RLE: + bind_bool(name, key); + break; + case SR_CONF_TIMEBASE: bind_enum(name, key, gvar_list, print_timebase); break; @@ -83,9 +97,14 @@ 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; } - g_variant_unref(gvar_list); + if (gvar_list) + g_variant_unref(gvar_list); } g_variant_unref(gvar_opts); } @@ -109,6 +128,13 @@ void DeviceOptions::config_setter( 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)))); +} + void DeviceOptions::bind_enum(const QString &name, int key, GVariant *const gvar_list, function printer) { @@ -116,6 +142,8 @@ void DeviceOptions::bind_enum(const QString &name, int key, GVariantIter iter; vector< pair > values; + 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))); @@ -126,6 +154,15 @@ void DeviceOptions::bind_enum(const QString &name, int key, bind(config_setter, _sdi, 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; @@ -147,6 +184,8 @@ void DeviceOptions::bind_samplerate(const QString &name, { GVariant *gvar_list_samplerates; + assert(gvar_list); + if ((gvar_list_samplerates = g_variant_lookup_value(gvar_list, "samplerate-steps", G_VARIANT_TYPE("at")))) { @@ -222,6 +261,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