X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=pv%2Fprop%2Fbinding%2Fdeviceoptions.cpp;h=6da16652f2cc0dca814491b46c30e384fa29bc30;hb=19adbc2c342b190161ec1223377a3619974b91f7;hp=e8ae002bae8ba0c0339b2da1fb5f9861d71fb5c3;hpb=117ef0090a0c285369ce48bcc7e01d92faa9f329;p=pulseview.git diff --git a/pv/prop/binding/deviceoptions.cpp b/pv/prop/binding/deviceoptions.cpp index e8ae002..6da1665 100644 --- a/pv/prop/binding/deviceoptions.cpp +++ b/pv/prop/binding/deviceoptions.cpp @@ -27,27 +27,40 @@ #include "deviceoptions.h" +#include #include #include #include #include -using namespace boost; -using namespace std; +#include + +using boost::bind; +using boost::function; +using boost::optional; +using boost::shared_ptr; +using std::make_pair; +using std::pair; +using std::string; +using std::vector; namespace pv { namespace prop { namespace binding { -DeviceOptions::DeviceOptions(struct sr_dev_inst *sdi) : - _sdi(sdi) +DeviceOptions::DeviceOptions(shared_ptr dev_inst, + const sr_probe_group *group) : + _dev_inst(dev_inst), + _group(group) { + assert(dev_inst); + sr_dev_inst *const sdi = dev_inst->dev_inst(); assert(sdi); GVariant *gvar_opts, *gvar_list; gsize num_opts; - if ((sr_config_list(sdi->driver, sdi, NULL, SR_CONF_DEVICE_OPTIONS, + if ((sr_config_list(sdi->driver, sdi, group, SR_CONF_DEVICE_OPTIONS, &gvar_opts) != SR_OK)) /* Driver supports no device instance options. */ return; @@ -63,10 +76,11 @@ DeviceOptions::DeviceOptions(struct sr_dev_inst *sdi) : const int key = info->key; - if (sr_config_list(_sdi->driver, _sdi, NULL, key, &gvar_list) != SR_OK) + if (sr_config_list(sdi->driver, sdi, group, + key, &gvar_list) != SR_OK) gvar_list = NULL; - const QString name(info->name); + const QString name = QString::fromUtf8(info->name); switch(key) { @@ -82,11 +96,14 @@ DeviceOptions::DeviceOptions(struct sr_dev_inst *sdi) : case SR_CONF_PATTERN_MODE: case SR_CONF_BUFFERSIZE: case SR_CONF_TRIGGER_SOURCE: + case SR_CONF_TRIGGER_SLOPE: case SR_CONF_FILTER: case SR_CONF_COUPLING: + case SR_CONF_CLOCK_EDGE: bind_enum(name, key, gvar_list); break; + case SR_CONF_EXTERNAL_CLOCK: case SR_CONF_RLE: bind_bool(name, key); break; @@ -111,10 +128,10 @@ DeviceOptions::DeviceOptions(struct sr_dev_inst *sdi) : } GVariant* DeviceOptions::config_getter( - const struct sr_dev_inst *sdi, int key) + const sr_dev_inst *sdi, const sr_probe_group *group, int key) { GVariant *data = NULL; - if (sr_config_get(sdi->driver, sdi, NULL, key, &data) != SR_OK) { + if (sr_config_get(sdi->driver, sdi, group, key, &data) != SR_OK) { qDebug() << "WARNING: Failed to get value of config id" << key; return NULL; @@ -123,17 +140,21 @@ GVariant* DeviceOptions::config_getter( } void DeviceOptions::config_setter( - const struct sr_dev_inst *sdi, int key, GVariant* value) + const struct sr_dev_inst *sdi, const sr_probe_group *group, int key, + GVariant* value) { - if (sr_config_set(sdi, NULL, key, value) != SR_OK) + if (sr_config_set(sdi, group, key, value) != SR_OK) qDebug() << "WARNING: Failed to set value of sample rate"; } void DeviceOptions::bind_bool(const QString &name, int key) { + sr_dev_inst *const sdi = _dev_inst->dev_inst(); + assert(sdi); + _properties.push_back(shared_ptr( - new Bool(name, bind(config_getter, _sdi, key), - bind(config_setter, _sdi, key, _1)))); + new Bool(name, bind(config_getter, sdi, _group, key), + bind(config_setter, sdi, _group, key, _1)))); } void DeviceOptions::bind_enum(const QString &name, int key, @@ -145,23 +166,29 @@ void DeviceOptions::bind_enum(const QString &name, int key, assert(gvar_list); + sr_dev_inst *const sdi = _dev_inst->dev_inst(); + assert(sdi); + g_variant_iter_init (&iter, gvar_list); while ((gvar = g_variant_iter_next_value (&iter))) values.push_back(make_pair(gvar, printer(gvar))); _properties.push_back(shared_ptr( new Enum(name, values, - bind(config_getter, _sdi, key), - bind(config_setter, _sdi, key, _1)))); + bind(config_getter, sdi, _group, key), + bind(config_setter, sdi, _group, key, _1)))); } void DeviceOptions::bind_int(const QString &name, int key, QString suffix, optional< std::pair > range) { + sr_dev_inst *const sdi = _dev_inst->dev_inst(); + assert(sdi); + _properties.push_back(shared_ptr( new Int(name, suffix, range, - bind(config_getter, _sdi, key), - bind(config_setter, _sdi, key, _1)))); + bind(config_getter, sdi, _group, key), + bind(config_setter, sdi, _group, key, _1)))); } QString DeviceOptions::print_gvariant(GVariant *const gvar) @@ -169,11 +196,11 @@ QString DeviceOptions::print_gvariant(GVariant *const gvar) QString s; if (g_variant_is_of_type(gvar, G_VARIANT_TYPE("s"))) - s = QString(g_variant_get_string(gvar, NULL)); + s = QString::fromUtf8(g_variant_get_string(gvar, NULL)); else { gchar *const text = g_variant_print(gvar, FALSE); - s = QString(text); + s = QString::fromUtf8(text); g_free(text); } @@ -184,14 +211,14 @@ QString DeviceOptions::print_timebase(GVariant *const gvar) { uint64_t p, q; g_variant_get(gvar, "(tt)", &p, &q); - return QString(sr_period_string(p * q)); + return QString::fromUtf8(sr_period_string(p * q)); } QString DeviceOptions::print_vdiv(GVariant *const gvar) { uint64_t p, q; g_variant_get(gvar, "(tt)", &p, &q); - return QString(sr_voltage_string(p, q)); + return QString::fromUtf8(sr_voltage_string(p, q)); } QString DeviceOptions::print_voltage_threshold(GVariant *const gvar) @@ -200,7 +227,7 @@ QString DeviceOptions::print_voltage_threshold(GVariant *const gvar) char buf[64]; g_variant_get(gvar, "(dd)", &lo, &hi); snprintf(buf, sizeof(buf), "L<%.1fV H>%.1fV", lo, hi); - return QString(buf); + return QString::fromUtf8(buf); } } // binding