]> git.alsa-project.org Git - alsa-gobject.git/commitdiff
seq: user_client: add APIs to create/delete/update queue
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Wed, 20 Nov 2019 08:53:41 +0000 (17:53 +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 b9286e20017ffe8033f0688ad3c5e2208ffcbaec..b77f805c9632908a03e85c76b061b6b03fd4113b 100644 (file)
@@ -51,6 +51,9 @@ ALSA_GOBJECT_0_0_0 {
     "alsaseq_user_client_schedule_event";
     "alsaseq_user_client_create_source";
     "alsaseq_user_client_operate_subscription";
+    "alsaseq_user_client_create_queue";
+    "alsaseq_user_client_delete_queue";
+    "alsaseq_user_client_update_queue";
 
     "alsaseq_addr_get_type";
     "alsaseq_addr_new";
index 33a1e398b0c11c33be8da4873b669fa693d678c4..ebed42f362da22dd16b7bcd5937ae7680e29de83 100644 (file)
@@ -588,3 +588,76 @@ void alsaseq_user_client_operate_subscription(ALSASeqUserClient *self,
     if (ioctl(priv->fd, request, data) < 0)
         generate_error(error, errno);
 }
+
+/**
+ * alsaseq_user_client_create_queue:
+ * @self: A #ALSASeqUserClient.
+ * @queue_info: The information of queue to add.
+ * @error: A #GError.
+ *
+ * Create a new queue owned by the client. The content of information is updated
+ * if success.
+ */
+void alsaseq_user_client_create_queue(ALSASeqUserClient *self,
+                                ALSASeqQueueInfo *queue_info, GError **error)
+{
+    ALSASeqUserClientPrivate *priv;
+    struct snd_seq_queue_info *info;
+
+    g_return_if_fail(ALSASEQ_IS_USER_CLIENT(self));
+    g_return_if_fail(ALSASEQ_IS_QUEUE_INFO(queue_info));
+    priv = alsaseq_user_client_get_instance_private(self);
+
+    seq_queue_info_refer_private(queue_info, &info);
+
+    if (ioctl(priv->fd, SNDRV_SEQ_IOCTL_CREATE_QUEUE, info) < 0)
+        generate_error(error, errno);
+}
+
+/**
+ * alsaseq_user_client_delete_queue:
+ * @self: A #ALSASeqUserClient.
+ * @queue_id: The numerical ID of queue, except for one of ALSASeqSpecificQueueId.
+ * @error: A #GError.
+ *
+ * Delete the queue owned by the client.
+ */
+void alsaseq_user_client_delete_queue(ALSASeqUserClient *self,
+                                      guint queue_id, GError **error)
+{
+    ALSASeqUserClientPrivate *priv;
+    struct snd_seq_queue_info info = {0};
+
+    g_return_if_fail(ALSASEQ_IS_USER_CLIENT(self));
+    priv = alsaseq_user_client_get_instance_private(self);
+
+    info.queue = (int)queue_id;
+    info.owner = priv->client_id;
+    if (ioctl(priv->fd, SNDRV_SEQ_IOCTL_DELETE_QUEUE, &info) < 0)
+        generate_error(error, errno);
+}
+
+/**
+ * alsaseq_user_client_update_queue:
+ * @self: A #ALSASeqUserClient.
+ * @queue_info: The information of queue to add.
+ * @error: A #GError.
+ *
+ * Update owned queue according to the information.
+ */
+void alsaseq_user_client_update_queue(ALSASeqUserClient *self,
+                                      ALSASeqQueueInfo *queue_info,
+                                      GError **error)
+{
+    ALSASeqUserClientPrivate *priv;
+    struct snd_seq_queue_info *info;
+
+    g_return_if_fail(ALSASEQ_IS_USER_CLIENT(self));
+    g_return_if_fail(ALSASEQ_IS_QUEUE_INFO(queue_info));
+    priv = alsaseq_user_client_get_instance_private(self);
+
+    seq_queue_info_refer_private(queue_info, &info);
+
+    if (ioctl(priv->fd, SNDRV_SEQ_IOCTL_CREATE_QUEUE, info) < 0)
+        generate_error(error, errno);
+}
index 229e8daada880f5764ac56c26ae8f3b4780e8444..1bff624b2c1b376d665d1f79fe6f8d25c7aaaebe 100644 (file)
@@ -12,6 +12,7 @@
 #include <seq/event-fixed.h>
 #include <seq/event-variable.h>
 #include <seq/subscribe-data.h>
+#include <seq/queue-info.h>
 
 G_BEGIN_DECLS
 
@@ -105,6 +106,13 @@ void alsaseq_user_client_operate_subscription(ALSASeqUserClient *self,
                                               gboolean establish,
                                               GError **error);
 
+void alsaseq_user_client_create_queue(ALSASeqUserClient *self,
+                                ALSASeqQueueInfo *queue_info, GError **error);
+void alsaseq_user_client_delete_queue(ALSASeqUserClient *self,
+                                      guint queue_id, GError **error);
+void alsaseq_user_client_update_queue(ALSASeqUserClient *self,
+                                ALSASeqQueueInfo *queue_info, GError **error);
+
 G_END_DECLS
 
 #endif
index 63952e271b576f155e8101d3d35ff0a65ade217f..624ad8bac7d8b37b66498f64dcb5cead5feb0ed8 100644 (file)
@@ -26,6 +26,9 @@ methods = (
     'schedule_event',
     'create_source',
     'operate_subscription',
+    'create_queue',
+    'delete_queue',
+    'update_queue',
 )
 signals = ()