From: Takashi Sakamoto Date: Wed, 1 Apr 2020 09:13:28 +0000 (+0900) Subject: seq: user_client: add an API to operate subscription between two ports X-Git-Tag: v0.1.0~250 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=ae9ca0e7a81d7a161ba805816ca27fc6c1ace2e4;p=alsa-gobject.git seq: user_client: add an API to operate subscription between two ports Signed-off-by: Takashi Sakamoto --- diff --git a/src/seq/alsaseq.map b/src/seq/alsaseq.map index dbddb71..8448282 100644 --- a/src/seq/alsaseq.map +++ b/src/seq/alsaseq.map @@ -45,6 +45,7 @@ ALSA_GOBJECT_0_0_0 { "alsaseq_user_client_get_pool"; "alsaseq_user_client_schedule_event"; "alsaseq_user_client_create_source"; + "alsaseq_user_client_operate_subscription"; "alsaseq_addr_get_type"; "alsaseq_addr_new"; diff --git a/src/seq/user-client.c b/src/seq/user-client.c index 7aaad93..e862f58 100644 --- a/src/seq/user-client.c +++ b/src/seq/user-client.c @@ -557,3 +557,36 @@ void alsaseq_user_client_create_source(ALSASeqUserClient *self, src->buf = buf; src->buf_len = page_size; } + +/** + * alsaseq_user_client_operate_subscription: + * @self: A #ALSASeqUserClient. + * @subs_data: A #ALSASeqSubscribeData. + * @establish: Whether to establish subscription between two ports, or break it. + * @error: A #GError. + * + * Operate subscription between two ports pointed by the data. + */ +void alsaseq_user_client_operate_subscription(ALSASeqUserClient *self, + ALSASeqSubscribeData *subs_data, + gboolean establish, + GError **error) +{ + ALSASeqUserClientPrivate *priv; + struct snd_seq_port_subscribe *data; + long request; + + g_return_if_fail(ALSASEQ_IS_USER_CLIENT(self)); + g_return_if_fail(ALSASEQ_IS_SUBSCRIBE_DATA(subs_data)); + priv = alsaseq_user_client_get_instance_private(self); + + seq_subscribe_data_refer_private(subs_data, &data); + + if (establish) + request = SNDRV_SEQ_IOCTL_SUBSCRIBE_PORT; + else + request = SNDRV_SEQ_IOCTL_UNSUBSCRIBE_PORT; + + if (ioctl(priv->fd, request, data) < 0) + generate_error(error, errno); +} diff --git a/src/seq/user-client.h b/src/seq/user-client.h index 0997936..6bc9e0a 100644 --- a/src/seq/user-client.h +++ b/src/seq/user-client.h @@ -9,6 +9,7 @@ #include #include #include +#include G_BEGIN_DECLS @@ -97,6 +98,11 @@ void alsaseq_user_client_schedule_event(ALSASeqUserClient *self, void alsaseq_user_client_create_source(ALSASeqUserClient *self, GSource **gsrc, GError **error); +void alsaseq_user_client_operate_subscription(ALSASeqUserClient *self, + ALSASeqSubscribeData *subs_data, + gboolean establish, + GError **error); + G_END_DECLS #endif diff --git a/tests/alsaseq-user-client b/tests/alsaseq-user-client index fd84fc2..63952e2 100644 --- a/tests/alsaseq-user-client +++ b/tests/alsaseq-user-client @@ -25,6 +25,7 @@ methods = ( 'get_pool', 'schedule_event', 'create_source', + 'operate_subscription', ) signals = ()