From: Takashi Sakamoto Date: Mon, 18 Nov 2019 04:22:44 +0000 (+0900) Subject: ctl: elem_value: add APIs to set/get values of integer type X-Git-Tag: v0.1.0~384 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=771524f9fed770748de8cd25d9b8aa247df6974d;p=alsa-gobject.git ctl: elem_value: add APIs to set/get values of integer type --- diff --git a/src/ctl/alsactl.map b/src/ctl/alsactl.map index 01b28c3..06c4fa5 100644 --- a/src/ctl/alsactl.map +++ b/src/ctl/alsactl.map @@ -65,6 +65,8 @@ ALSA_GOBJECT_0_0_0 { "alsactl_elem_value_new"; "alsactl_elem_value_set_bool"; "alsactl_elem_value_get_bool"; + "alsactl_elem_value_set_int"; + "alsactl_elem_value_get_int"; local: *; }; diff --git a/src/ctl/elem-value.c b/src/ctl/elem-value.c index 07ff619..33583a8 100644 --- a/src/ctl/elem-value.c +++ b/src/ctl/elem-value.c @@ -120,3 +120,52 @@ void alsactl_elem_value_get_bool(ALSACtlElemValue *self, for (i = 0; i < *value_count; ++i) (*values)[i] = (gboolean)value->value.integer.value[i]; } + +/** + * alsactl_elem_value_set_int: + * @self: A #ALSACtlElemValue. + * @values: (array length=value_count): The array for values of integer type. + * @value_count: The number of values up to 128. + * + * Copy the array for values of integer type into internal storage. + */ +void alsactl_elem_value_set_int(ALSACtlElemValue *self, const gint32 *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_int: + * @self: A #ALSACtlElemValue. + * @values: (array length=value_count)(inout): The array for values of integer + * type. + * @value_count: The number of values up to 128. + * + * Copy the array for values of integer type from internal storage. + */ +void alsactl_elem_value_get_int(ALSACtlElemValue *self, gint32 *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] = (gint32)value->value.integer.value[i]; +} diff --git a/src/ctl/elem-value.h b/src/ctl/elem-value.h index ece6312..4c0afbe 100644 --- a/src/ctl/elem-value.h +++ b/src/ctl/elem-value.h @@ -54,6 +54,11 @@ void alsactl_elem_value_set_bool(ALSACtlElemValue *self, void alsactl_elem_value_get_bool(ALSACtlElemValue *self, gboolean *const *values, gsize *value_count); +void alsactl_elem_value_set_int(ALSACtlElemValue *self, const gint32 *values, + gsize value_count); +void alsactl_elem_value_get_int(ALSACtlElemValue *self, gint32 *const *values, + gsize *value_count); + G_END_DECLS #endif diff --git a/tests/alsactl-elem-value b/tests/alsactl-elem-value index d2623ff..e08f9d4 100644 --- a/tests/alsactl-elem-value +++ b/tests/alsactl-elem-value @@ -17,6 +17,8 @@ props = () methods = ( 'set_bool', 'get_bool', + 'set_int', + 'get_int', ) signals = ()