From: Takashi Sakamoto Date: Wed, 20 Nov 2019 10:17:28 +0000 (+0900) Subject: seq: user_client: add APIs to register usage of queue X-Git-Tag: v0.1.0~222 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=4198dc4f7854165e3764c962ca1b615e3cb42f9d;p=alsa-gobject.git seq: user_client: add APIs to register usage of queue Signed-off-by: Takashi Sakamoto --- diff --git a/src/seq/alsaseq.map b/src/seq/alsaseq.map index 588fcee..ade212c 100644 --- a/src/seq/alsaseq.map +++ b/src/seq/alsaseq.map @@ -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"; diff --git a/src/seq/user-client.c b/src/seq/user-client.c index ebed42f..bfcc030 100644 --- a/src/seq/user-client.c +++ b/src/seq/user-client.c @@ -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); +} diff --git a/src/seq/user-client.h b/src/seq/user-client.h index 1bff624..7d2b271 100644 --- a/src/seq/user-client.h +++ b/src/seq/user-client.h @@ -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 diff --git a/tests/alsaseq-user-client b/tests/alsaseq-user-client index 624ad8b..01e4ce4 100644 --- a/tests/alsaseq-user-client +++ b/tests/alsaseq-user-client @@ -29,6 +29,8 @@ methods = ( 'create_queue', 'delete_queue', 'update_queue', + 'get_queue_usage', + 'set_queue_usage', ) signals = ()