From: Takashi Sakamoto Date: Wed, 20 Nov 2019 10:58:24 +0000 (+0900) Subject: seq: user_client: add APIs to set/get tempo of queue X-Git-Tag: v0.1.0~219 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=6600d59f7a381f3e4d54d0c4221bb048c62c45a1;p=alsa-gobject.git seq: user_client: add APIs to set/get tempo of queue Signed-off-by: Takashi Sakamoto --- diff --git a/src/seq/alsaseq.map b/src/seq/alsaseq.map index 319b234..da80e11 100644 --- a/src/seq/alsaseq.map +++ b/src/seq/alsaseq.map @@ -57,6 +57,8 @@ ALSA_GOBJECT_0_0_0 { "alsaseq_user_client_update_queue"; "alsaseq_user_client_get_queue_usage"; "alsaseq_user_client_set_queue_usage"; + "alsaseq_user_client_set_queue_tempo"; + "alsaseq_user_client_get_queue_tempo"; "alsaseq_addr_get_type"; "alsaseq_addr_new"; diff --git a/src/seq/privates.h b/src/seq/privates.h index eed1e5e..c6b9cd0 100644 --- a/src/seq/privates.h +++ b/src/seq/privates.h @@ -15,6 +15,7 @@ #include "subscribe-data.h" #include "queue-info.h" #include "queue-status.h" +#include "queue-tempo.h" #include @@ -49,6 +50,9 @@ void seq_queue_info_refer_private(ALSASeqQueueInfo *self, void seq_queue_status_refer_private(ALSASeqQueueStatus *self, struct snd_seq_queue_status **status); +void seq_queue_tempo_refer_private(ALSASeqQueueTempo *self, + struct snd_seq_queue_tempo **tempo); + G_END_DECLS #endif diff --git a/src/seq/queue-tempo.c b/src/seq/queue-tempo.c index ac93a7b..6044360 100644 --- a/src/seq/queue-tempo.c +++ b/src/seq/queue-tempo.c @@ -1,7 +1,5 @@ // SPDX-License-Identifier: LGPL-3.0-or-later -#include "queue-tempo.h" - -#include +#include "privates.h" struct _ALSASeqQueueTempoPrivate { struct snd_seq_queue_tempo tempo; @@ -152,3 +150,12 @@ void alsaseq_queue_tempo_set_skew(ALSASeqQueueTempo *self, const guint32 skew[2] priv->tempo.skew_value = skew[0]; priv->tempo.skew_base = skew[1]; } + +void seq_queue_tempo_refer_private(ALSASeqQueueTempo *self, + struct snd_seq_queue_tempo **tempo) +{ + ALSASeqQueueTempoPrivate *priv = + alsaseq_queue_tempo_get_instance_private(self); + + *tempo = &priv->tempo; +} diff --git a/src/seq/user-client.c b/src/seq/user-client.c index bfcc030..d06cba6 100644 --- a/src/seq/user-client.c +++ b/src/seq/user-client.c @@ -718,3 +718,62 @@ void alsaseq_user_client_set_queue_usage(ALSASeqUserClient *self, if (ioctl(priv->fd, SNDRV_SEQ_IOCTL_SET_QUEUE_CLIENT, &data) < 0) generate_error(error, errno); } + +/** + * alsaseq_user_client_set_queue_tempo: + * @self: A #ALSASeqUserClient. + * @queue_id: The numerical ID of queue, except for entries in + * ALSASeqSpecificQueueId. + * @queue_tempo: The data of tempo for queue. + * @error: A #GError. + * + * + * Set the data of tempo to the queue. + */ +void alsaseq_user_client_set_queue_tempo(ALSASeqUserClient *self, + guint queue_id, ALSASeqQueueTempo *queue_tempo, + GError **error) +{ + ALSASeqUserClientPrivate *priv; + struct snd_seq_queue_tempo *tempo; + + g_return_if_fail(ALSASEQ_IS_USER_CLIENT(self)); + g_return_if_fail(ALSASEQ_IS_QUEUE_TEMPO(queue_tempo)); + priv = alsaseq_user_client_get_instance_private(self); + + seq_queue_tempo_refer_private(queue_tempo, &tempo); + tempo->queue = queue_id; + if (ioctl(priv->fd, SNDRV_SEQ_IOCTL_SET_QUEUE_TEMPO, tempo) < 0) + generate_error(error, errno); +} + +/** + * alsaseq_user_client_get_queue_tempo: + * @self: A #ALSASeqUserClient. + * @queue_id: The numerical ID of queue, except for entries in + * ALSASeqSpecificQueueId. + * @queue_tempo: (out): The data of tempo for queue. + * @error: A #GError. + * + * Get the data of tempo for the queue. + */ +void alsaseq_user_client_get_queue_tempo(ALSASeqUserClient *self, + guint queue_id, ALSASeqQueueTempo **queue_tempo, + GError **error) +{ + ALSASeqUserClientPrivate *priv; + struct snd_seq_queue_tempo *tempo; + + g_return_if_fail(ALSASEQ_IS_USER_CLIENT(self)); + g_return_if_fail(queue_tempo != NULL); + priv = alsaseq_user_client_get_instance_private(self); + + *queue_tempo = g_object_new(ALSASEQ_TYPE_QUEUE_TEMPO, NULL); + seq_queue_tempo_refer_private(*queue_tempo, &tempo); + + tempo->queue = queue_id; + if (ioctl(priv->fd, SNDRV_SEQ_IOCTL_GET_QUEUE_TEMPO, tempo) < 0) { + generate_error(error, errno); + g_object_unref(*queue_tempo); + } +} diff --git a/src/seq/user-client.h b/src/seq/user-client.h index 7d2b271..8307d06 100644 --- a/src/seq/user-client.h +++ b/src/seq/user-client.h @@ -13,6 +13,7 @@ #include #include #include +#include G_BEGIN_DECLS @@ -119,6 +120,14 @@ void alsaseq_user_client_get_queue_usage(ALSASeqUserClient *self, void alsaseq_user_client_set_queue_usage(ALSASeqUserClient *self, guint queue_id, gboolean use, GError **error); + +void alsaseq_user_client_set_queue_tempo(ALSASeqUserClient *self, + guint queue_id, ALSASeqQueueTempo *queue_tempo, + GError **error); +void alsaseq_user_client_get_queue_tempo(ALSASeqUserClient *self, + guint queue_id, ALSASeqQueueTempo **queue_tempo, + GError **error); + G_END_DECLS #endif diff --git a/tests/alsaseq-user-client b/tests/alsaseq-user-client index 01e4ce4..64f3004 100644 --- a/tests/alsaseq-user-client +++ b/tests/alsaseq-user-client @@ -31,6 +31,8 @@ methods = ( 'update_queue', 'get_queue_usage', 'set_queue_usage', + 'set_queue_tempo', + 'get_queue_tempo', ) signals = ()