]> git.alsa-project.org Git - alsa-gobject.git/commitdiff
ctl: card: add an API to lock element from writing
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Mon, 18 Nov 2019 04:22:44 +0000 (13:22 +0900)
committerTakashi Sakamoto <o-takashi@sakamocchi.jp>
Sun, 1 Dec 2019 05:38:54 +0000 (14:38 +0900)
src/ctl/alsactl.map
src/ctl/card.c
src/ctl/card.h
tests/alsactl-card

index cb1ed2b83ab24e1143877cbec3d432f3d2cd6a09..9d3f50a58c12b87611b1dbe671acce7bd97fadbd 100644 (file)
@@ -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";
 
index 065d6e171ec3e9b05476f92cffaabf737e064d33..4d9e08b9571ed89e5a77d65eab77bee0d2af11e3 100644 (file)
@@ -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);
+}
index cd1397e677fef4cb7b76e484896b7ad9c72b0260..526c917d5e0aa32379e961746edb777fc8967400 100644 (file)
@@ -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
index 12f51de4215743cf4633a17ef532d0aadb4394a4..2b550e7952b205a5c86f9d3397797156ab598599 100644 (file)
@@ -18,6 +18,7 @@ methods = (
     'open',
     'get_info',
     'get_elem_id_list',
+    'lock_elem',
 )
 signals = ()