From 02e3869a76ec9ef5a1f178bb9f152a4c351d4141 Mon Sep 17 00:00:00 2001 From: Takashi Sakamoto Date: Mon, 18 Nov 2019 13:22:44 +0900 Subject: [PATCH] ctl: elem_value: add APIs to set/get value of integer64 type --- src/ctl/alsactl.map | 2 ++ src/ctl/elem-value.c | 49 ++++++++++++++++++++++++++++++++++++++++ src/ctl/elem-value.h | 5 ++++ tests/alsactl-elem-value | 2 ++ 4 files changed, 58 insertions(+) diff --git a/src/ctl/alsactl.map b/src/ctl/alsactl.map index 366288f..b88de55 100644 --- a/src/ctl/alsactl.map +++ b/src/ctl/alsactl.map @@ -73,6 +73,8 @@ ALSA_GOBJECT_0_0_0 { "alsactl_elem_value_get_bytes"; "alsactl_elem_value_set_iec60958"; "alsactl_elem_value_get_iec60958"; + "alsactl_elem_value_set_int64"; + "alsactl_elem_value_get_int64"; local: *; }; diff --git a/src/ctl/elem-value.c b/src/ctl/elem-value.c index ae106d9..5c3b638 100644 --- a/src/ctl/elem-value.c +++ b/src/ctl/elem-value.c @@ -349,3 +349,52 @@ void alsactl_elem_value_get_iec60958(ALSACtlElemValue *self, (*user_data)[i] = value->value.iec958.subcode[i]; } } + +/** + * alsactl_elem_value_set_int64: + * @self: A #ALSACtlElemValue. + * @values: (array length=value_count): The array for values of integer64 type. + * @value_count: The number of values up to 64. + * + * Copy the array for values of integer64 type into internal storage. + */ +void alsactl_elem_value_set_int64(ALSACtlElemValue *self, const gint64 *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.integer64.value)); + for (i = 0; i < value_count; ++i) + value->value.integer64.value[i] = (long long)values[i]; +} + +/** + * alsactl_elem_value_get_int64: + * @self: A #ALSACtlElemValue. + * @values: (array length=value_count)(inout): The array for values of integer64 + * type. + * @value_count: The number of values up to 64. + * + * Copy the array for values of integer64 type from internal storage. + */ +void alsactl_elem_value_get_int64(ALSACtlElemValue *self, + gint64 *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.integer64.value)); + for (i = 0; i < *value_count; ++i) + (*values)[i] = (gint64)value->value.integer64.value[i]; +} diff --git a/src/ctl/elem-value.h b/src/ctl/elem-value.h index bbccb2c..fcbd30a 100644 --- a/src/ctl/elem-value.h +++ b/src/ctl/elem-value.h @@ -76,6 +76,11 @@ void alsactl_elem_value_get_iec60958(ALSACtlElemValue *self, guint8 *const *channel_status, gsize *channel_status_length, guint8 *const *user_data, gsize *user_data_length); +void alsactl_elem_value_set_int64(ALSACtlElemValue *self, const gint64 *values, + gsize value_count); +void alsactl_elem_value_get_int64(ALSACtlElemValue *self, + gint64 *const *values, gsize *value_count); + G_END_DECLS #endif diff --git a/tests/alsactl-elem-value b/tests/alsactl-elem-value index 9a59990..62d071e 100644 --- a/tests/alsactl-elem-value +++ b/tests/alsactl-elem-value @@ -25,6 +25,8 @@ methods = ( 'get_bytes', 'set_iec60958', 'get_iec60958', + 'set_int64', + 'get_int64', ) signals = () -- 2.47.3