X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fbinding%2Fdevice.cpp;h=7bbc1bbf52839618a3e5905a82bf29fb1794689c;hp=a347f784510a6b012fd5abec8873be74cba7b03d;hb=d1b479f74c9d1eb61b56cc4980d7328ec50216df;hpb=9cca8508357758b6ee68f25c998bf4de8822df14 diff --git a/pv/binding/device.cpp b/pv/binding/device.cpp index a347f784..7bbc1bbf 100644 --- a/pv/binding/device.cpp +++ b/pv/binding/device.cpp @@ -59,20 +59,28 @@ Device::Device(shared_ptr configurable) : for (auto key : keys) { + string descr_str; + try { + descr_str = key->description(); + } catch (Error& e) { + descr_str = key->name(); + } + const QString descr = QString::fromStdString(descr_str); + auto capabilities = configurable->config_capabilities(key); if (!capabilities.count(Capability::GET) || - !capabilities.count(Capability::SET)) - continue; + !capabilities.count(Capability::SET)) { - string name_str; - try { - name_str = key->description(); - } catch (Error& e) { - name_str = key->name(); - } + // Ignore common read-only keys + if ((key->id() == SR_CONF_CONTINUOUS) || (key->id() == SR_CONF_TRIGGER_MATCH) || + (key->id() == SR_CONF_CONN) || (key->id() == SR_CONF_SERIALCOMM)) + continue; - const QString name = QString::fromStdString(name_str); + qDebug() << QString(tr("Note for device developers: Ignoring device configuration capability '%1' " \ + "as it is missing GET and/or SET")).arg(descr); + continue; + } const Property::Getter get = [&, key]() { return configurable_->config_get(key); }; @@ -88,7 +96,13 @@ Device::Device(shared_ptr configurable) : break; case SR_CONF_CAPTURE_RATIO: - bind_int(name, "", "%", pair(0, 100), get, set); + bind_int(descr, "", "%", pair(0, 100), get, set); + break; + + case SR_CONF_LIMIT_FRAMES: + // Value 0 means that there is no limit + bind_int(descr, "", "", pair(0, 1000000), get, set, + tr("No Limit")); break; case SR_CONF_PATTERN_MODE: @@ -99,33 +113,41 @@ Device::Device(shared_ptr configurable) : case SR_CONF_CLOCK_EDGE: case SR_CONF_DATA_SOURCE: case SR_CONF_EXTERNAL_CLOCK_SOURCE: - bind_enum(name, "", key, capabilities, get, set); + bind_enum(descr, "", key, capabilities, get, set); break; case SR_CONF_FILTER: case SR_CONF_EXTERNAL_CLOCK: case SR_CONF_RLE: case SR_CONF_POWER_OFF: - bind_bool(name, "", get, set); + case SR_CONF_AVERAGING: + bind_bool(descr, "", get, set); break; case SR_CONF_TIMEBASE: - bind_enum(name, "", key, capabilities, get, set, print_timebase); + bind_enum(descr, "", key, capabilities, get, set, print_timebase); break; case SR_CONF_VDIV: - bind_enum(name, "", key, capabilities, get, set, print_vdiv); + bind_enum(descr, "", key, capabilities, get, set, print_vdiv); break; case SR_CONF_VOLTAGE_THRESHOLD: - bind_enum(name, "", key, capabilities, get, set, print_voltage_threshold); + bind_enum(descr, "", key, capabilities, get, set, print_voltage_threshold); break; case SR_CONF_PROBE_FACTOR: if (capabilities.count(Capability::LIST)) - bind_enum(name, "", key, capabilities, get, set, print_probe_factor); + bind_enum(descr, "", key, capabilities, get, set, print_probe_factor); + else + bind_int(descr, "", "", pair(1, 500), get, set); + break; + + case SR_CONF_AVG_SAMPLES: + if (capabilities.count(Capability::LIST)) + bind_enum(descr, "", key, capabilities, get, set, print_averages); else - bind_int(name, "", "", pair(1, 500), get, set); + bind_int(descr, "", "", pair(0, INT32_MAX), get, set); break; default: @@ -170,13 +192,13 @@ void Device::bind_enum(const QString &name, const QString &desc, } void Device::bind_int(const QString &name, const QString &desc, QString suffix, - optional< pair > range, - Property::Getter getter, Property::Setter setter) + optional< pair > range, Property::Getter getter, + Property::Setter setter, QString special_value_text) { assert(configurable_); properties_.push_back(shared_ptr(new Int(name, desc, suffix, - range, getter, setter))); + range, getter, setter, special_value_text))); } QString Device::print_timebase(Glib::VariantBase gvar) @@ -207,5 +229,12 @@ QString Device::print_probe_factor(Glib::VariantBase gvar) return QString("%1x").arg(factor); } +QString Device::print_averages(Glib::VariantBase gvar) +{ + uint64_t avg; + avg = g_variant_get_uint64(gvar.gobj()); + return QString("%1").arg(avg); +} + } // namespace binding } // namespace pv