From 2ab3feab20d3951bf9f861380bbccf77717ed3d9 Mon Sep 17 00:00:00 2001 From: Takashi Sakamoto Date: Wed, 20 Nov 2019 17:53:41 +0900 Subject: [PATCH] seq: user_client: add APIs to create/delete/update queue Signed-off-by: Takashi Sakamoto --- src/seq/alsaseq.map | 3 ++ src/seq/user-client.c | 73 +++++++++++++++++++++++++++++++++++++++ src/seq/user-client.h | 8 +++++ tests/alsaseq-user-client | 3 ++ 4 files changed, 87 insertions(+) diff --git a/src/seq/alsaseq.map b/src/seq/alsaseq.map index b9286e2..b77f805 100644 --- a/src/seq/alsaseq.map +++ b/src/seq/alsaseq.map @@ -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"; diff --git a/src/seq/user-client.c b/src/seq/user-client.c index 33a1e39..ebed42f 100644 --- a/src/seq/user-client.c +++ b/src/seq/user-client.c @@ -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); +} diff --git a/src/seq/user-client.h b/src/seq/user-client.h index 229e8da..1bff624 100644 --- a/src/seq/user-client.h +++ b/src/seq/user-client.h @@ -12,6 +12,7 @@ #include #include #include +#include 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 diff --git a/tests/alsaseq-user-client b/tests/alsaseq-user-client index 63952e2..624ad8b 100644 --- a/tests/alsaseq-user-client +++ b/tests/alsaseq-user-client @@ -26,6 +26,9 @@ methods = ( 'schedule_event', 'create_source', 'operate_subscription', + 'create_queue', + 'delete_queue', + 'update_queue', ) signals = () -- 2.47.3