From: Takashi Sakamoto Date: Mon, 18 Nov 2019 04:22:44 +0000 (+0900) Subject: ctl: elem_value: add APIs to set/get indexes of enumerated type X-Git-Tag: v0.1.0~383 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=65b0a0d3c558b55aa88a34e6e6d59f7b465c4307;p=alsa-gobject.git ctl: elem_value: add APIs to set/get indexes of enumerated type --- diff --git a/src/ctl/alsactl.map b/src/ctl/alsactl.map index 06c4fa5..90787c2 100644 --- a/src/ctl/alsactl.map +++ b/src/ctl/alsactl.map @@ -67,6 +67,8 @@ ALSA_GOBJECT_0_0_0 { "alsactl_elem_value_get_bool"; "alsactl_elem_value_set_int"; "alsactl_elem_value_get_int"; + "alsactl_elem_value_set_enum"; + "alsactl_elem_value_get_enum"; local: *; }; diff --git a/src/ctl/elem-value.c b/src/ctl/elem-value.c index 33583a8..35de7c7 100644 --- a/src/ctl/elem-value.c +++ b/src/ctl/elem-value.c @@ -169,3 +169,53 @@ void alsactl_elem_value_get_int(ALSACtlElemValue *self, gint32 *const *values, for (i = 0; i < *value_count; ++i) (*values)[i] = (gint32)value->value.integer.value[i]; } + +/** + * alsactl_elem_value_set_enum: + * @self: A #ALSACtlElemValue. + * @values: (array length=value_count): The array for values of enumeration + * index. + * @value_count: The number of values up to 128. + * + * Copy the array for values of enumeration index into internal storage. + */ +void alsactl_elem_value_set_enum(ALSACtlElemValue *self, + const guint32 *values, gsize value_count) +{ + ALSACtlElemValuePrivate *priv; + struct snd_ctl_elem_value *value; + int i; + + g_return_if_fail(ALSACTL_IS_ELEM_VALUE(self)); + priv = alsactl_elem_value_get_instance_private(self); + value = &priv->value; + + value_count = MIN(value_count, G_N_ELEMENTS(value->value.integer.value)); + for (i = 0; i < value_count; ++i) + value->value.integer.value[i] = (long)values[i]; +} + +/** + * alsactl_elem_value_get_enum: + * @self: A #ALSACtlElemValue. + * @values: (array length=value_count)(inout): The array for values of + * enumeration index. + * @value_count: The number of values up to 128. + * + * Copy the array for values of enumeration index from internal storage. + */ +void alsactl_elem_value_get_enum(ALSACtlElemValue *self, + guint32 *const *values, gsize *value_count) +{ + ALSACtlElemValuePrivate *priv; + struct snd_ctl_elem_value *value; + int i; + + g_return_if_fail(ALSACTL_IS_ELEM_VALUE(self)); + priv = alsactl_elem_value_get_instance_private(self); + value = &priv->value; + + *value_count = MIN(*value_count, G_N_ELEMENTS(value->value.integer.value)); + for (i = 0; i < *value_count; ++i) + (*values)[i] = (guint32)value->value.integer.value[i]; +} diff --git a/src/ctl/elem-value.h b/src/ctl/elem-value.h index 4c0afbe..579165c 100644 --- a/src/ctl/elem-value.h +++ b/src/ctl/elem-value.h @@ -59,6 +59,11 @@ void alsactl_elem_value_set_int(ALSACtlElemValue *self, const gint32 *values, void alsactl_elem_value_get_int(ALSACtlElemValue *self, gint32 *const *values, gsize *value_count); +void alsactl_elem_value_set_enum(ALSACtlElemValue *self, + const guint32 *values, gsize value_count); +void alsactl_elem_value_get_enum(ALSACtlElemValue *self, + guint32 *const *values, gsize *value_count); + G_END_DECLS #endif diff --git a/tests/alsactl-elem-value b/tests/alsactl-elem-value index e08f9d4..c78aadb 100644 --- a/tests/alsactl-elem-value +++ b/tests/alsactl-elem-value @@ -19,6 +19,8 @@ methods = ( 'get_bool', 'set_int', 'get_int', + 'set_enum', + 'get_enum', ) signals = ()