From bd6613180de1b94784e2681b15282fae26f0f018 Mon Sep 17 00:00:00 2001 From: Takashi Sakamoto Date: Wed, 1 Apr 2020 18:13:28 +0900 Subject: [PATCH] seq: user_client: add APIs to set/get information as client for ALSA Sequencer Signed-off-by: Takashi Sakamoto --- src/seq/alsaseq.map | 2 ++ src/seq/user-client.c | 52 +++++++++++++++++++++++++++++++++++++++ src/seq/user-client.h | 9 +++++++ tests/alsaseq-user-client | 2 ++ 4 files changed, 65 insertions(+) diff --git a/src/seq/alsaseq.map b/src/seq/alsaseq.map index c536a1f..aad47fe 100644 --- a/src/seq/alsaseq.map +++ b/src/seq/alsaseq.map @@ -32,6 +32,8 @@ ALSA_GOBJECT_0_0_0 { "alsaseq_user_client_get_type"; "alsaseq_user_client_new"; "alsaseq_user_client_open"; + "alsaseq_user_client_set_info"; + "alsaseq_user_client_get_info"; local: *; }; diff --git a/src/seq/user-client.c b/src/seq/user-client.c index 8c8b824..96955eb 100644 --- a/src/seq/user-client.c +++ b/src/seq/user-client.c @@ -122,3 +122,55 @@ void alsaseq_user_client_open(ALSASeqUserClient *self, gint open_flag, priv->fd = -1; } } + +/** + * alsaseq_user_client_set_info: + * @self: A #ALSASeqUserClient. + * @client_info: A #ALSASeqClientInfo. + * @error: A #GError. + * + * Get client information. + */ +void alsaseq_user_client_set_info(ALSASeqUserClient *self, + ALSASeqClientInfo *client_info, + GError **error) +{ + ALSASeqUserClientPrivate *priv; + struct snd_seq_client_info *info; + + g_return_if_fail(ALSASEQ_IS_USER_CLIENT(self)); + g_return_if_fail(ALSASEQ_IS_CLIENT_INFO(client_info)); + priv = alsaseq_user_client_get_instance_private(self); + + seq_client_info_refer_private(client_info, &info); + info->client = priv->client_id; + info->type = USER_CLIENT; + if (ioctl(priv->fd, SNDRV_SEQ_IOCTL_SET_CLIENT_INFO, info) < 0) + generate_error(error, errno); +} + +/** + * alsaseq_user_client_get_info: + * @self: A #ALSASeqUserClient. + * @client_info: (inout): A #ALSASeqClientInfo. + * @error: A #GError. + * + * Set client information. + */ +void alsaseq_user_client_get_info(ALSASeqUserClient *self, + ALSASeqClientInfo *const *client_info, + GError **error) +{ + ALSASeqUserClientPrivate *priv; + struct snd_seq_client_info *info; + + g_return_if_fail(ALSASEQ_IS_USER_CLIENT(self)); + g_return_if_fail(client_info != NULL); + g_return_if_fail(ALSASEQ_IS_CLIENT_INFO(*client_info)); + priv = alsaseq_user_client_get_instance_private(self); + + seq_client_info_refer_private(*client_info, &info); + info->client = priv->client_id; + if (ioctl(priv->fd, SNDRV_SEQ_IOCTL_GET_CLIENT_INFO, info) < 0) + generate_error(error, errno); +} diff --git a/src/seq/user-client.h b/src/seq/user-client.h index 1746c61..df3013f 100644 --- a/src/seq/user-client.h +++ b/src/seq/user-client.h @@ -5,6 +5,8 @@ #include #include +#include + G_BEGIN_DECLS #define ALSASEQ_TYPE_USER_CLIENT (alsaseq_user_client_get_type()) @@ -50,6 +52,13 @@ ALSASeqUserClient *alsaseq_user_client_new(); void alsaseq_user_client_open(ALSASeqUserClient *self, gint open_flag, GError **error); +void alsaseq_user_client_set_info(ALSASeqUserClient *self, + ALSASeqClientInfo *client_info, + GError **error); +void alsaseq_user_client_get_info(ALSASeqUserClient *self, + ALSASeqClientInfo *const *client_info, + GError **error); + G_END_DECLS #endif diff --git a/tests/alsaseq-user-client b/tests/alsaseq-user-client index 5d108b7..c21e4a5 100644 --- a/tests/alsaseq-user-client +++ b/tests/alsaseq-user-client @@ -16,6 +16,8 @@ props = ( methods = ( 'new', 'open', + 'set_info', + 'get_info', ) signals = () -- 2.47.3