]> git.alsa-project.org Git - alsa-gobject.git/commitdiff
seq: user_client: add APIs to set/get information as client for ALSA Sequencer
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Wed, 1 Apr 2020 09:13:28 +0000 (18:13 +0900)
committer坂本 貴史 <o-takashi@sakamocchi.jp>
Fri, 3 Apr 2020 13:06:25 +0000 (22:06 +0900)
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
src/seq/alsaseq.map
src/seq/user-client.c
src/seq/user-client.h
tests/alsaseq-user-client

index c536a1fe63cb6511e22c5250b86e4a109e11e32f..aad47fea98b1ef3b03f32963ac0f522f11cf4494 100644 (file)
@@ -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:
     *;
 };
index 8c8b824c53668eeb7499f2b0479791147bcf5ffd..96955eb781ab7f50bde433c2bb9a89179a5f70e2 100644 (file)
@@ -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);
+}
index 1746c61bc15350cd564b2ce97ed30b979a1cf71d..df3013f7d287f4e72541d3152dc981b713bd9365 100644 (file)
@@ -5,6 +5,8 @@
 #include <glib.h>
 #include <glib-object.h>
 
+#include <seq/client-info.h>
+
 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
index 5d108b7b2200e449e42a1cd05f01af5acefa38a0..c21e4a5aae906cd2ca004325e947998d1433faa5 100644 (file)
@@ -16,6 +16,8 @@ props = (
 methods = (
     'new',
     'open',
+    'set_info',
+    'get_info',
 )
 signals = ()