From be1eccd364d36c7f98bd6363b0e813402b499dcb Mon Sep 17 00:00:00 2001 From: Takashi Sakamoto Date: Fri, 12 Jun 2020 13:19:45 +0900 Subject: [PATCH] ctl: elem_info: add accessor APIs for triplet data of integer64 element Signed-off-by: Takashi Sakamoto --- src/ctl/alsactl.map | 2 ++ src/ctl/elem-info.c | 62 +++++++++++++++++++++++++++++++++++++++++ src/ctl/elem-info.h | 5 ++++ tests/alsactl-elem-info | 2 ++ 4 files changed, 71 insertions(+) diff --git a/src/ctl/alsactl.map b/src/ctl/alsactl.map index ba51b69..61f463b 100644 --- a/src/ctl/alsactl.map +++ b/src/ctl/alsactl.map @@ -45,6 +45,8 @@ ALSA_GOBJECT_0_0_0 { "alsactl_elem_info_get_type"; "alsactl_elem_info_get_int_data"; "alsactl_elem_info_set_int_data"; + "alsactl_elem_info_get_int64_data"; + "alsactl_elem_info_set_int64_data"; "alsactl_elem_info_bool_get_type"; "alsactl_elem_info_bool_new"; diff --git a/src/ctl/elem-info.c b/src/ctl/elem-info.c index 7e9cbc1..e7e1c0f 100644 --- a/src/ctl/elem-info.c +++ b/src/ctl/elem-info.c @@ -187,6 +187,68 @@ void alsactl_elem_info_set_int_data(ALSACtlElemInfo *self, priv->info.value.integer.step = (long)data[2]; } +/** + * alsactl_elem_info_get_int64_data: + * @self: A #ALSACtlElemInfo. + * @data: (array fixed-size=3)(out)(transfer none): The array with elements for + * the data of integer64 element; minimum value, maximum value, and value + * step in the order. + * @error: A #GError. + * + * Refer to the array with elements for the data of integer64 element; minimum + * value, maximum value, and value step in the order. The call of function is + * successful as long as the information is for integer64 type. + */ +void alsactl_elem_info_get_int64_data(ALSACtlElemInfo *self, + const gint64 *data[3], GError **error) +{ + ALSACtlElemInfoPrivate *priv; + + g_return_if_fail(ALSACTL_IS_ELEM_INFO(self)); + priv = alsactl_elem_info_get_instance_private(self); + + if (priv->info.type != SNDRV_CTL_ELEM_TYPE_INTEGER64) { + generate_error(error, ENXIO); + return; + } + + priv->int_data.min = (gint64)priv->info.value.integer.min; + priv->int_data.max = (gint64)priv->info.value.integer.max; + priv->int_data.step = (gint64)priv->info.value.integer.step; + + *data = (const gint64 *)&priv->info.value.integer64; +} + +/** + * alsactl_elem_info_set_int64_data: + * @self: A #ALSACtlElemInfo. + * @data: (array fixed-size=3)(transfer none): The array with elements for + * the data of integer64 element; minimum value, maximum value, and value + * step in the order. + * @error: A #GError. + * + * Get the array with elements for the data of integer64 element; minimum value, + * maximum value, and value step in the order. The call of function is + * successful as long as the information is for integer64 type. + */ +void alsactl_elem_info_set_int64_data(ALSACtlElemInfo *self, + const gint64 data[3], GError **error) +{ + ALSACtlElemInfoPrivate *priv; + + g_return_if_fail(ALSACTL_IS_ELEM_INFO(self)); + priv = alsactl_elem_info_get_instance_private(self); + + if (priv->info.type != SNDRV_CTL_ELEM_TYPE_INTEGER64) { + generate_error(error, ENXIO); + return; + } + + priv->info.value.integer.min = (long long)data[0]; + priv->info.value.integer.max = (long long)data[1]; + priv->info.value.integer.step = (long long)data[2]; +} + void ctl_elem_info_refer_private(ALSACtlElemInfo *self, struct snd_ctl_elem_info **info) { diff --git a/src/ctl/elem-info.h b/src/ctl/elem-info.h index fef08a7..548e299 100644 --- a/src/ctl/elem-info.h +++ b/src/ctl/elem-info.h @@ -54,6 +54,11 @@ void alsactl_elem_info_get_int_data(ALSACtlElemInfo *self, void alsactl_elem_info_set_int_data(ALSACtlElemInfo *self, const gint32 data[3], GError **error); +void alsactl_elem_info_get_int64_data(ALSACtlElemInfo *self, + const gint64 *data[3], GError **error); +void alsactl_elem_info_set_int64_data(ALSACtlElemInfo *self, + const gint64 data[3], GError **error); + G_END_DECLS #endif diff --git a/tests/alsactl-elem-info b/tests/alsactl-elem-info index 270d3f7..78cebdc 100644 --- a/tests/alsactl-elem-info +++ b/tests/alsactl-elem-info @@ -19,6 +19,8 @@ props = ( methods = ( 'get_int_data', 'set_int_data', + 'get_int64_data', + 'set_int64_data', ) signals = () -- 2.47.3