]> git.alsa-project.org Git - alsa-gobject.git/commitdiff
seq: user_client: add APIs to create/delete port for client
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 afef3a678eb6fee71fa03516abc5dbe736600acd..3e4ee3643008d0381bc67219e1b728e65e9a32e0 100644 (file)
@@ -36,6 +36,9 @@ ALSA_GOBJECT_0_0_0 {
     "alsaseq_user_client_open";
     "alsaseq_user_client_set_info";
     "alsaseq_user_client_get_info";
+    "alsaseq_user_client_create_port";
+    "alsaseq_user_client_update_port";
+    "alsaseq_user_client_delete_port";
 
     "alsaseq_addr_get_type";
     "alsaseq_addr_new";
index 96955eb781ab7f50bde433c2bb9a89179a5f70e2..d33bd444db67804003c83bba85db1db68baf9775 100644 (file)
@@ -174,3 +174,90 @@ void alsaseq_user_client_get_info(ALSASeqUserClient *self,
     if (ioctl(priv->fd, SNDRV_SEQ_IOCTL_GET_CLIENT_INFO, info) < 0)
         generate_error(error, errno);
 }
+
+/**
+ * alsaseq_user_client_create_port:
+ * @self: A #ALSASeqUserClient.
+ * @port_info: A #ALSASeqPortInfo.
+ * @port_id: (nullable): The numerical ID of port if specified.
+ * @error: A #GError.
+ *
+ * Create a port into the client.
+ */
+void alsaseq_user_client_create_port(ALSASeqUserClient *self,
+                                     ALSASeqPortInfo *port_info,
+                                     guint8 *port_id, GError **error)
+{
+    ALSASeqUserClientPrivate *priv;
+    struct snd_seq_port_info *info;
+
+    g_return_if_fail(ALSASEQ_IS_USER_CLIENT(self));
+    g_return_if_fail(ALSASEQ_IS_PORT_INFO(port_info));
+    priv = alsaseq_user_client_get_instance_private(self);
+
+    seq_port_info_refer_private(port_info, &info);
+
+    info->addr.client = priv->client_id;
+    if (port_id != NULL) {
+        info->addr.port = *port_id;
+        info->flags |= SNDRV_SEQ_PORT_FLG_GIVEN_PORT;
+    }
+    if (ioctl(priv->fd, SNDRV_SEQ_IOCTL_CREATE_PORT, info) < 0)
+        generate_error(error, errno);
+}
+
+/**
+ * alsaseq_user_client_update_port:
+ * @self: A #ALSASeqUserClient.
+ * @port_info: A #ALSASeqPortInfo.
+ * @port_id: The numerical ID of port.
+ * @error: A #GError.
+ *
+ */
+void alsaseq_user_client_update_port(ALSASeqUserClient *self,
+                                     ALSASeqPortInfo *port_info,
+                                     guint8 port_id, GError **error)
+{
+    ALSASeqUserClientPrivate *priv;
+    struct snd_seq_port_info *info;
+
+    g_return_if_fail(ALSASEQ_IS_USER_CLIENT(self));
+    g_return_if_fail(ALSASEQ_IS_PORT_INFO(port_info));
+    priv = alsaseq_user_client_get_instance_private(self);
+
+    seq_port_info_refer_private(port_info, &info);
+
+    info->addr.client = priv->client_id;
+    info->addr.port = port_id;
+
+    if (ioctl(priv->fd, SNDRV_SEQ_IOCTL_SET_PORT_INFO, info) < 0)
+        generate_error(error, errno);
+}
+
+/**
+ * alsaseq_user_client_delete_port:
+ * @self: A #ALSASeqUserClient.
+ * @port_info: A #ALSASeqPortInfo.
+ * @port_id: The numerical ID of port.
+ * @error: A #GError.
+ *
+ * Delete a port from the client.
+ */
+void alsaseq_user_client_delete_port(ALSASeqUserClient *self,
+                                     ALSASeqPortInfo *port_info,
+                                     guint8 port_id, GError **error)
+{
+    ALSASeqUserClientPrivate *priv;
+    struct snd_seq_port_info *info;
+
+    g_return_if_fail(ALSASEQ_IS_USER_CLIENT(self));
+    g_return_if_fail(ALSASEQ_IS_PORT_INFO(port_info));
+    priv = alsaseq_user_client_get_instance_private(self);
+
+    seq_port_info_refer_private(port_info, &info);
+
+    info->addr.client = priv->client_id;
+    info->addr.port = port_id;
+    if (ioctl(priv->fd, SNDRV_SEQ_IOCTL_DELETE_PORT, info) < 0)
+        generate_error(error, errno);
+}
index df3013f7d287f4e72541d3152dc981b713bd9365..1bbe191b052a2a7f93bea5c8091d557d79378cb4 100644 (file)
@@ -6,6 +6,7 @@
 #include <glib-object.h>
 
 #include <seq/client-info.h>
+#include <seq/port-info.h>
 
 G_BEGIN_DECLS
 
@@ -59,6 +60,18 @@ void alsaseq_user_client_get_info(ALSASeqUserClient *self,
                                   ALSASeqClientInfo *const *client_info,
                                   GError **error);
 
+void alsaseq_user_client_create_port(ALSASeqUserClient *self,
+                                     ALSASeqPortInfo *port_info,
+                                     guint8 *port_id, GError **error);
+
+void alsaseq_user_client_update_port(ALSASeqUserClient *self,
+                                     ALSASeqPortInfo *port_info,
+                                     guint8 port_id, GError **error);
+
+void alsaseq_user_client_delete_port(ALSASeqUserClient *self,
+                                     ALSASeqPortInfo *port_info,
+                                     guint8 port_id, GError **error);
+
 G_END_DECLS
 
 #endif
index c21e4a5aae906cd2ca004325e947998d1433faa5..72d79005e890f00f847cb74a0264742cdfb60989 100644 (file)
@@ -18,6 +18,9 @@ methods = (
     'open',
     'set_info',
     'get_info',
+    'create_port',
+    'update_port',
+    'delete_port',
 )
 signals = ()