30 #include <libsigrokcxx/libsigrokcxx.hpp> 32 using boost::optional;
37 using std::shared_ptr;
41 using sigrok::Capability;
42 using sigrok::Configurable;
43 using sigrok::ConfigKey;
55 configurable_(configurable)
58 auto keys = configurable->config_keys();
60 for (
auto key : keys) {
64 descr_str = key->description();
66 descr_str = key->name();
68 const QString descr = QString::fromStdString(descr_str);
70 auto capabilities = configurable->config_capabilities(key);
72 if (!capabilities.count(Capability::GET) ||
73 !capabilities.count(Capability::SET)) {
76 if ((key->id() == SR_CONF_CONTINUOUS) || (key->id() == SR_CONF_TRIGGER_MATCH) ||
77 (key->id() == SR_CONF_CONN) || (key->id() == SR_CONF_SERIALCOMM) || (key->id() == SR_CONF_NUM_LOGIC_CHANNELS) ||
78 (key->id() == SR_CONF_NUM_ANALOG_CHANNELS) || (key->id() == SR_CONF_SESSIONFILE) || (key->id() == SR_CONF_CAPTUREFILE) ||
79 (key->id() == SR_CONF_CAPTURE_UNITSIZE))
82 qDebug() << QString(tr(
"Note for device developers: Ignoring device configuration capability '%1' " \
83 "as it is missing GET and/or SET")).arg(descr);
87 const Property::Getter
get = [&, key]() {
89 const Property::Setter
set = [&, key](Glib::VariantBase
value) {
95 case SR_CONF_SAMPLERATE:
100 case SR_CONF_CAPTURE_RATIO:
101 bind_int(descr,
"",
"%", pair<int64_t, int64_t>(0, 100),
get,
set);
104 case SR_CONF_LIMIT_FRAMES:
106 bind_int(descr,
"",
"", pair<int64_t, int64_t>(0, 1000000),
get,
set,
110 case SR_CONF_PATTERN_MODE:
111 case SR_CONF_BUFFERSIZE:
112 case SR_CONF_TRIGGER_SOURCE:
113 case SR_CONF_TRIGGER_SLOPE:
114 case SR_CONF_COUPLING:
115 case SR_CONF_CLOCK_EDGE:
116 case SR_CONF_DATA_SOURCE:
117 case SR_CONF_EXTERNAL_CLOCK_SOURCE:
118 bind_enum(descr,
"", key, capabilities,
get,
set);
122 case SR_CONF_EXTERNAL_CLOCK:
124 case SR_CONF_POWER_OFF:
125 case SR_CONF_AVERAGING:
126 case SR_CONF_CONTINUOUS:
130 case SR_CONF_TIMEBASE:
138 case SR_CONF_VOLTAGE_THRESHOLD:
142 case SR_CONF_PROBE_FACTOR:
143 if (capabilities.count(Capability::LIST))
146 bind_int(descr,
"",
"", pair<int64_t, int64_t>(1, 500),
get,
set);
149 case SR_CONF_AVG_SAMPLES:
150 if (capabilities.count(Capability::LIST))
153 bind_int(descr,
"",
"", pair<int64_t, int64_t>(0, INT32_MAX),
get,
set);
163 Property::Getter getter, Property::Setter setter)
167 name, desc, getter, setter)));
171 const ConfigKey *key, set<const Capability *> capabilities,
172 Property::Getter getter,
173 Property::Setter setter,
function<QString (Glib::VariantBase)> printer)
177 if (!capabilities.count(Capability::LIST))
181 Glib::VariantContainerBase gvar =
configurable_->config_list(key);
182 Glib::VariantIter iter(gvar);
184 vector< pair<Glib::VariantBase, QString> > values;
185 while ((iter.next_value(gvar)))
186 values.emplace_back(gvar, printer(gvar));
188 properties_.push_back(shared_ptr<Property>(
new Enum(name, desc, values,
191 }
catch (sigrok::Error&
e) {
192 qDebug() <<
"Error: Listing device key" << name <<
"failed!";
198 optional< pair<int64_t, int64_t> > range, Property::Getter getter,
199 Property::Setter setter, QString special_value_text)
203 properties_.push_back(shared_ptr<Property>(
new Int(name, desc, suffix,
204 range, getter, setter, special_value_text)));
210 g_variant_get(gvar.gobj(),
"(tt)", &p, &q);
211 return QString::fromUtf8(sr_period_string(p, q));
217 g_variant_get(gvar.gobj(),
"(tt)", &p, &q);
218 return QString::fromUtf8(sr_voltage_string(p, q));
224 g_variant_get(gvar.gobj(),
"(dd)", &lo, &hi);
225 return QString(
"L<%1V H>%2V").arg(lo, 0,
'f', 1).arg(hi, 0,
'f', 1);
231 factor = g_variant_get_uint64(gvar.gobj());
232 return QString(
"%1x").arg(factor);
238 avg = g_variant_get_uint64(gvar.gobj());
239 return QString(
"%1").arg(avg);
static QString print_probe_factor(Glib::VariantBase gvar)
static QString print_voltage_threshold(Glib::VariantBase gvar)
static QString print_averages(Glib::VariantBase gvar)
shared_ptr< sigrok::Configurable > configurable_
T value(details::expression_node< T > *n)
static QString print_timebase(Glib::VariantBase gvar)
vector< shared_ptr< prop::Property > > properties_
void bind_bool(const QString &name, const QString &desc, prop::Property::Getter getter, prop::Property::Setter setter)
static QString print_vdiv(Glib::VariantBase gvar)
void bind_enum(const QString &name, const QString &desc, const sigrok::ConfigKey *key, set< const sigrok::Capability * > capabilities, prop::Property::Getter getter, prop::Property::Setter setter, function< QString(Glib::VariantBase)> printer=print_gvariant)
manual txt set(MANUAL_OUT_HTML"${CMAKE_CURRENT_BINARY_DIR}/manual.html") set(MANUAL_OUT_PDF"$
Device(shared_ptr< sigrok::Configurable > configurable)
void bind_int(const QString &name, const QString &desc, QString suffix, boost::optional< pair< int64_t, int64_t > > range, prop::Property::Getter getter, prop::Property::Setter setter, QString special_value_text="")