C++: Expose config key capabilities.

This commit is contained in:
Martin Ling 2014-09-30 11:07:55 +01:00
parent 9c51e8ec56
commit 4c7c4194cb
2 changed files with 21 additions and 4 deletions

View 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);

View 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: