]> git.alsa-project.org Git - alsa-gobject.git/commitdiff
seq: user_client: add APIs to register usage of queue
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Wed, 20 Nov 2019 10:17:28 +0000 (19:17 +0900)
committer坂本 貴史 <o-takashi@sakamocchi.jp>
Tue, 7 Apr 2020 08:08:24 +0000 (17:08 +0900)
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
src/seq/alsaseq.map
src/seq/user-client.c
src/seq/user-client.h
tests/alsaseq-user-client

index 588fcee4e2be200ba7fa983d0e46785ab67338de..ade212c1821502b3816b0b4da90243965d733614 100644 (file)
@@ -55,6 +55,8 @@ ALSA_GOBJECT_0_0_0 {
     "alsaseq_user_client_create_queue";
     "alsaseq_user_client_delete_queue";
     "alsaseq_user_client_update_queue";
+    "alsaseq_user_client_get_queue_usage";
+    "alsaseq_user_client_set_queue_usage";
 
     "alsaseq_addr_get_type";
     "alsaseq_addr_new";
index ebed42f362da22dd16b7bcd5937ae7680e29de83..bfcc030cd603deab1225f380fab0fd1bce7c75ea 100644 (file)
@@ -661,3 +661,60 @@ void alsaseq_user_client_update_queue(ALSASeqUserClient *self,
     if (ioctl(priv->fd, SNDRV_SEQ_IOCTL_CREATE_QUEUE, info) < 0)
         generate_error(error, errno);
 }
+
+/**
+ * alsaseq_user_client_get_queue_usage:
+ * @self: A #ALSASeqUserClient.
+ * @queue_id: The numerical ID of queue, except for entries in
+ *            ALSASeqSpecificQueueId.
+ * @use: (out): Whether the client uses the queue or not.
+ * @error: A #GError.
+ *
+ * Get usage of the queue by the client.
+ */
+void alsaseq_user_client_get_queue_usage(ALSASeqUserClient *self,
+                                         guint queue_id, gboolean *use,
+                                         GError **error)
+{
+    ALSASeqUserClientPrivate *priv;
+    struct snd_seq_queue_client data = {0};
+
+    g_return_if_fail(ALSASEQ_IS_USER_CLIENT(self));
+    priv = alsaseq_user_client_get_instance_private(self);
+
+    data.queue = (int)queue_id;
+    if (ioctl(priv->fd, SNDRV_SEQ_IOCTL_SET_QUEUE_CLIENT, &data) < 0) {
+        generate_error(error, errno);
+        return;
+    }
+
+    *use = data.used;
+}
+
+/**
+ * alsaseq_user_client_set_queue_usage:
+ * @self: A #ALSASeqUserClient.
+ * @queue_id: The numerical ID of queue, except for entries in
+ *            ALSASeqSpecificQueueId.
+ * @use: Whether to use the queue or not.
+ * @error: A #GError.
+ *
+ * Start the queue to use or not.
+ */
+void alsaseq_user_client_set_queue_usage(ALSASeqUserClient *self,
+                                         guint queue_id, gboolean use,
+                                         GError **error)
+{
+    ALSASeqUserClientPrivate *priv;
+    struct snd_seq_queue_client data = {0};
+
+    g_return_if_fail(ALSASEQ_IS_USER_CLIENT(self));
+    priv = alsaseq_user_client_get_instance_private(self);
+
+    data.queue = (int)queue_id;
+    data.client = priv->client_id;
+    data.used = use;
+
+    if (ioctl(priv->fd, SNDRV_SEQ_IOCTL_SET_QUEUE_CLIENT, &data) < 0)
+        generate_error(error, errno);
+}
index 1bff624b2c1b376d665d1f79fe6f8d25c7aaaebe..7d2b2713d28fb54a48ea3c31dd7b7ce87a2f53b3 100644 (file)
@@ -113,6 +113,12 @@ void alsaseq_user_client_delete_queue(ALSASeqUserClient *self,
 void alsaseq_user_client_update_queue(ALSASeqUserClient *self,
                                 ALSASeqQueueInfo *queue_info, GError **error);
 
+void alsaseq_user_client_get_queue_usage(ALSASeqUserClient *self,
+                                         guint queue_id, gboolean *use,
+                                         GError **error);
+void alsaseq_user_client_set_queue_usage(ALSASeqUserClient *self,
+                                         guint queue_id, gboolean use,
+                                         GError **error);
 G_END_DECLS
 
 #endif
index 624ad8bac7d8b37b66498f64dcb5cead5feb0ed8..01e4ce42d34f2b52d698c9a50b18fad455e8f782 100644 (file)
@@ -29,6 +29,8 @@ methods = (
     'create_queue',
     'delete_queue',
     'update_queue',
+    'get_queue_usage',
+    'set_queue_usage',
 )
 signals = ()