C++: Expose config key capabilities.
This commit is contained in:
parent
9c51e8ec56
commit
4c7c4194cb
|
@ -352,12 +352,12 @@ Glib::VariantContainerBase Configurable::config_list(const ConfigKey *key)
|
||||||
return Glib::VariantContainerBase(data);
|
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;
|
GVariant *gvar_opts;
|
||||||
gsize num_opts;
|
gsize num_opts;
|
||||||
const uint32_t *opts;
|
const uint32_t *opts;
|
||||||
vector<const ConfigKey *> result;
|
map<const ConfigKey *, set<Capability>> result;
|
||||||
|
|
||||||
check(sr_config_list(
|
check(sr_config_list(
|
||||||
config_driver, config_sdi, config_channel_group,
|
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));
|
gvar_opts, &num_opts, sizeof(uint32_t));
|
||||||
|
|
||||||
for (gsize i = 0; i < num_opts; i++)
|
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);
|
g_variant_unref(gvar_opts);
|
||||||
|
|
||||||
|
|
|
@ -77,6 +77,7 @@ raised, which provides access to the error code and description.
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
#include <set>
|
||||||
|
|
||||||
namespace sigrok
|
namespace sigrok
|
||||||
{
|
{
|
||||||
|
@ -281,6 +282,12 @@ protected:
|
||||||
friend class Driver;
|
friend class Driver;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum Capability {
|
||||||
|
GET = SR_CONF_GET,
|
||||||
|
SET = SR_CONF_SET,
|
||||||
|
LIST = SR_CONF_LIST
|
||||||
|
};
|
||||||
|
|
||||||
/** An object that can be configured. */
|
/** An object that can be configured. */
|
||||||
class SR_API Configurable
|
class SR_API Configurable
|
||||||
{
|
{
|
||||||
|
@ -296,7 +303,7 @@ public:
|
||||||
* @param key ConfigKey to enumerate values for. */
|
* @param key ConfigKey to enumerate values for. */
|
||||||
Glib::VariantContainerBase config_list(const ConfigKey *key);
|
Glib::VariantContainerBase config_list(const ConfigKey *key);
|
||||||
/** Enumerate available keys, according to a given index 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. */
|
/** Check for a key in the list from a given index key. */
|
||||||
bool config_check(const ConfigKey *key, const ConfigKey *index_key);
|
bool config_check(const ConfigKey *key, const ConfigKey *index_key);
|
||||||
protected:
|
protected:
|
||||||
|
|
Loading…
Reference in New Issue