From: Takashi Sakamoto Date: Mon, 18 Nov 2019 04:22:44 +0000 (+0900) Subject: ctl: elem_value: add APIs to set/get values of bytes type X-Git-Tag: v0.1.0~382 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=0fa1e17e3f968b1765fd39dc9436ea5b96ebb97d;p=alsa-gobject.git ctl: elem_value: add APIs to set/get values of bytes type --- diff --git a/src/ctl/alsactl.map b/src/ctl/alsactl.map index 90787c2..6b367a9 100644 --- a/src/ctl/alsactl.map +++ b/src/ctl/alsactl.map @@ -69,6 +69,8 @@ ALSA_GOBJECT_0_0_0 { "alsactl_elem_value_get_int"; "alsactl_elem_value_set_enum"; "alsactl_elem_value_get_enum"; + "alsactl_elem_value_set_bytes"; + "alsactl_elem_value_get_bytes"; local: *; }; diff --git a/src/ctl/elem-value.c b/src/ctl/elem-value.c index 35de7c7..5bd458b 100644 --- a/src/ctl/elem-value.c +++ b/src/ctl/elem-value.c @@ -219,3 +219,51 @@ void alsactl_elem_value_get_enum(ALSACtlElemValue *self, for (i = 0; i < *value_count; ++i) (*values)[i] = (guint32)value->value.integer.value[i]; } + +/** + * alsactl_elem_value_set_bytes: + * @self: A #ALSACtlElemValue. + * @values: (array length=value_count): The array for values of bytes type. + * @value_count: The number of values up to 512. + * + * Copy the array for values of bytes type into internal storage. + */ +void alsactl_elem_value_set_bytes(ALSACtlElemValue *self, + const guint8 *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.bytes.data)); + for (i = 0; i < value_count; ++i) + value->value.bytes.data[i] = (long)values[i]; +} + +/** + * alsactl_elem_value_get_bytes: + * @self: A #ALSACtlElemValue. + * @values: (array length=value_count)(inout): The array for values of bytes type. + * @value_count: The number of values up to 512. + * + * Copy the array for values of bytes type into internal storage. + */ +void alsactl_elem_value_get_bytes(ALSACtlElemValue *self, + guint8 *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.bytes.data)); + for (i = 0; i < *value_count; ++i) + (*values)[i] = (guint8)value->value.bytes.data[i]; +} diff --git a/src/ctl/elem-value.h b/src/ctl/elem-value.h index 579165c..ddf91b2 100644 --- a/src/ctl/elem-value.h +++ b/src/ctl/elem-value.h @@ -64,6 +64,11 @@ void alsactl_elem_value_set_enum(ALSACtlElemValue *self, void alsactl_elem_value_get_enum(ALSACtlElemValue *self, guint32 *const *values, gsize *value_count); +void alsactl_elem_value_set_bytes(ALSACtlElemValue *self, + const guint8 *values, gsize value_count); +void alsactl_elem_value_get_bytes(ALSACtlElemValue *self, + guint8 *const *values, gsize *value_count); + G_END_DECLS #endif diff --git a/tests/alsactl-elem-value b/tests/alsactl-elem-value index c78aadb..c6be061 100644 --- a/tests/alsactl-elem-value +++ b/tests/alsactl-elem-value @@ -21,6 +21,8 @@ methods = ( 'get_int', 'set_enum', 'get_enum', + 'set_bytes', + 'get_bytes', ) signals = ()