X-Git-Url: http://git.code-monkey.de/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fbinding%2Fdevice.cpp;h=37c9d43d55248218b4e7e247cd6173fa1696b664;hp=401644fd0672fa616c5c21586f619590e8b1cff1;hb=f4ab4b5c657e5613caba82feaa81a8a400e4f331;hpb=9a267f8dec48c9a28472c1a3bb146c624819e98b diff --git a/pv/binding/device.cpp b/pv/binding/device.cpp index 401644f..37c9d43 100644 --- a/pv/binding/device.cpp +++ b/pv/binding/device.cpp @@ -32,7 +32,6 @@ using boost::optional; using std::function; -using std::make_pair; using std::pair; using std::set; using std::shared_ptr; @@ -69,7 +68,7 @@ Device::Device(shared_ptr configurable) : string name_str; try { name_str = key->description(); - } catch (Error e) { + } catch (Error& e) { name_str = key->name(); } @@ -89,8 +88,7 @@ Device::Device(shared_ptr configurable) : break; case SR_CONF_CAPTURE_RATIO: - bind_int(name, "", "%", pair(0, 100), - get, set); + bind_int(name, "", "%", pair(0, 100), get, set); break; case SR_CONF_PATTERN_MODE: @@ -99,6 +97,8 @@ Device::Device(shared_ptr configurable) : case SR_CONF_TRIGGER_SLOPE: case SR_CONF_COUPLING: case SR_CONF_CLOCK_EDGE: + case SR_CONF_DATA_SOURCE: + case SR_CONF_EXTERNAL_CLOCK_SOURCE: bind_enum(name, "", key, capabilities, get, set); break; @@ -106,6 +106,7 @@ Device::Device(shared_ptr configurable) : case SR_CONF_EXTERNAL_CLOCK: case SR_CONF_RLE: case SR_CONF_POWER_OFF: + case SR_CONF_AVERAGING: bind_bool(name, "", get, set); break; @@ -128,6 +129,13 @@ Device::Device(shared_ptr configurable) : bind_int(name, "", "", pair(1, 500), get, set); break; + case SR_CONF_AVG_SAMPLES: + if (capabilities.count(Capability::LIST)) + bind_enum(name, "", key, capabilities, get, set, print_averages); + else + bind_int(name, "", "", pair(0, INT32_MAX), get, set); + break; + default: break; } @@ -147,20 +155,26 @@ void Device::bind_enum(const QString &name, const QString &desc, Property::Getter getter, Property::Setter setter, function printer) { - Glib::VariantBase gvar; - vector< pair > values; - assert(configurable_); if (!capabilities.count(Capability::LIST)) return; - Glib::VariantIter iter(configurable_->config_list(key)); - while ((iter.next_value(gvar))) - values.push_back(make_pair(gvar, printer(gvar))); + try { + Glib::VariantContainerBase gvar = configurable_->config_list(key); + Glib::VariantIter iter(gvar); + + vector< pair > values; + while ((iter.next_value(gvar))) + values.emplace_back(gvar, printer(gvar)); - properties_.push_back(shared_ptr(new Enum(name, desc, values, - getter, setter))); + properties_.push_back(shared_ptr(new Enum(name, desc, values, + getter, setter))); + + } catch (sigrok::Error& e) { + qDebug() << "Error: Listing device key" << name << "failed!"; + return; + } } void Device::bind_int(const QString &name, const QString &desc, QString suffix, @@ -201,5 +215,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