From 47b70b6ca81b9addb97f42a614022a0a18efb3aa Mon Sep 17 00:00:00 2001 From: Takashi Sakamoto Date: Mon, 18 Nov 2019 13:22:44 +0900 Subject: [PATCH] ctl: card: add an API to lock element from writing --- src/ctl/alsactl.map | 1 + src/ctl/card.c | 26 ++++++++++++++++++++++++++ src/ctl/card.h | 3 +++ tests/alsactl-card | 1 + 4 files changed, 31 insertions(+) diff --git a/src/ctl/alsactl.map b/src/ctl/alsactl.map index cb1ed2b..9d3f50a 100644 --- a/src/ctl/alsactl.map +++ b/src/ctl/alsactl.map @@ -16,6 +16,7 @@ ALSA_GOBJECT_0_0_0 { "alsactl_card_open"; "alsactl_card_get_info"; "alsactl_card_get_elem_id_list"; + "alsactl_card_lock_elem"; "alsactl_card_info_get_type"; diff --git a/src/ctl/card.c b/src/ctl/card.c index 065d6e1..4d9e08b 100644 --- a/src/ctl/card.c +++ b/src/ctl/card.c @@ -225,3 +225,29 @@ void alsactl_card_get_elem_id_list(ALSACtlCard *self, GList **entries, deallocate_elem_ids(&list); } + +/** + * alsactl_card_lock_elem: + * @self: A #ALSACtlCard. + * @elem_id: A #ALSACtlElemId. + * @lock: whether to lock or unlock the element. + * @error: A #GError. + * + * Lock/Unlock indicated element not to be written by the other processes. + */ +void alsactl_card_lock_elem(ALSACtlCard *self, const ALSACtlElemId *elem_id, + gboolean lock, GError **error) +{ + ALSACtlCardPrivate *priv; + int ret; + + g_return_if_fail(ALSACTL_IS_CARD(self)); + priv = alsactl_card_get_instance_private(self); + + if (lock) + ret = ioctl(priv->fd, SNDRV_CTL_IOCTL_ELEM_LOCK, elem_id); + else + ret = ioctl(priv->fd, SNDRV_CTL_IOCTL_ELEM_UNLOCK, elem_id); + if (ret < 0) + generate_error(error, errno); +} diff --git a/src/ctl/card.h b/src/ctl/card.h index cd1397e..526c917 100644 --- a/src/ctl/card.h +++ b/src/ctl/card.h @@ -58,6 +58,9 @@ void alsactl_card_get_info(ALSACtlCard *self, ALSACtlCardInfo **card_info, void alsactl_card_get_elem_id_list(ALSACtlCard *self, GList **entries, GError **error); +void alsactl_card_lock_elem(ALSACtlCard *self, const ALSACtlElemId *elem_id, + gboolean lock, GError **error); + G_END_DECLS #endif diff --git a/tests/alsactl-card b/tests/alsactl-card index 12f51de..2b550e7 100644 --- a/tests/alsactl-card +++ b/tests/alsactl-card @@ -18,6 +18,7 @@ methods = ( 'open', 'get_info', 'get_elem_id_list', + 'lock_elem', ) signals = () -- 2.47.3