]> sigrok.org Git - libsigrok.git/commitdiff
C++: Expose config key capabilities.
authorMartin Ling <redacted>
Tue, 30 Sep 2014 10:07:55 +0000 (11:07 +0100)
committerMartin Ling <redacted>
Tue, 30 Sep 2014 10:07:55 +0000 (11:07 +0100)
bindings/cxx/classes.cpp
bindings/cxx/include/libsigrok/libsigrok.hpp

index 986d4a73086c97d52d6a4e3a353ea14fb1572f4e..549e07b0843d92be6a4cc4de2ae156b370821182 100644 (file)
@@ -352,12 +352,12 @@ Glib::VariantContainerBase Configurable::config_list(const ConfigKey *key)
        return Glib::VariantContainerBase(data);
 }
 
-vector<const ConfigKey *> Configurable::config_keys(const ConfigKey *key)
+map<const ConfigKey *, set<Capability>> Configurable::config_keys(const ConfigKey *key)
 {
        GVariant *gvar_opts;
        gsize num_opts;
        const uint32_t *opts;
-       vector<const ConfigKey *> result;
+       map<const ConfigKey *, set<Capability>> result;
 
        check(sr_config_list(
                config_driver, config_sdi, config_channel_group,
@@ -367,7 +367,17 @@ vector<const ConfigKey *> Configurable::config_keys(const ConfigKey *key)
                gvar_opts, &num_opts, sizeof(uint32_t));
 
        for (gsize i = 0; i < num_opts; i++)
-               result.push_back(ConfigKey::get(opts[i] & SR_CONF_MASK));
+       {
+               auto key = ConfigKey::get(opts[i] & SR_CONF_MASK);
+               set<Capability> capabilities;
+               if (opts[i] & SR_CONF_GET)
+                       capabilities.insert(GET);
+               if (opts[i] & SR_CONF_SET)
+                       capabilities.insert(SET);
+               if (opts[i] & SR_CONF_LIST)
+                       capabilities.insert(LIST);
+               result[key] = capabilities;
+       }
 
        g_variant_unref(gvar_opts);
 
index 9c211837b12b01cc915ce064e1da9dae440bac52..2deb6175b7ae526868ca7765868e128cd6e6fb2d 100644 (file)
@@ -77,6 +77,7 @@ raised, which provides access to the error code and description.
 #include <memory>
 #include <vector>
 #include <map>
+#include <set>
 
 namespace sigrok
 {
@@ -281,6 +282,12 @@ protected:
        friend class Driver;
 };
 
+enum Capability {
+       GET = SR_CONF_GET,
+       SET = SR_CONF_SET,
+       LIST = SR_CONF_LIST
+};
+
 /** An object that can be configured. */
 class SR_API Configurable
 {
@@ -296,7 +303,7 @@ public:
         * @param key ConfigKey to enumerate values for. */
        Glib::VariantContainerBase config_list(const ConfigKey *key);
        /** Enumerate available keys, according to a given index key. */
-       vector<const ConfigKey *> config_keys(const ConfigKey *key);
+       map<const ConfigKey *, set<Capability> > config_keys(const ConfigKey *key);
        /** Check for a key in the list from a given index key. */
        bool config_check(const ConfigKey *key, const ConfigKey *index_key);
 protected: