]> git.alsa-project.org Git - alsa-gobject.git/commitdiff
rawmidi: stream_pair: add a API to get information of attached substream
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Mon, 18 Nov 2019 04:22:44 +0000 (13:22 +0900)
committer坂本 貴史 <o-takashi@sakamocchi.jp>
Sun, 12 Apr 2020 05:30:33 +0000 (14:30 +0900)
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
src/rawmidi/alsarawmidi.map
src/rawmidi/stream-pair.c
src/rawmidi/stream-pair.h
tests/alsarawmidi-stream-pair

index 6aace36d2ede3729b23092f95c6082b28ad05298..cc7edd7cfb3e2c9c9e09d482f3873abaa7e214a4 100644 (file)
@@ -14,6 +14,7 @@ ALSA_GOBJECT_0_0_0 {
     "alsarawmidi_stream_pair_get_type";
     "alsarawmidi_stream_pair_new";
     "alsarawmidi_stream_pair_open";
+    "alsarawmidi_stream_pair_get_substream_info";
   local:
     *;
 };
index deb0c5f60fcba622c21814383a3b8b61b474d8af..d1f9a073655c7ae6d099c85852a0db8dc096394a 100644 (file)
@@ -9,6 +9,7 @@
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <unistd.h>
+#include <sys/ioctl.h>
 
 struct _ALSARawmidiStreamPairPrivate {
     int fd;
@@ -151,3 +152,34 @@ void alsarawmidi_stream_pair_open(ALSARawmidiStreamPair *self, guint card_id,
 
     priv->devnode = devnode;
 }
+
+/**
+ * alsarawmidi_stream_pair_get_substream_info:
+ * @self: A #ALSARawmidiStreamPair.
+ * @direction: The direction of substream attached to the stream pair.
+ * @substream_info: (out): The information for requested substream.
+ * @error: A #GError.
+ *
+ * Get information of substream attached to the stream pair.
+ */
+void alsarawmidi_stream_pair_get_substream_info(ALSARawmidiStreamPair *self,
+                                ALSARawmidiStreamDirection direction,
+                                ALSARawmidiSubstreamInfo **substream_info,
+                                GError **error)
+{
+    ALSARawmidiStreamPairPrivate *priv;
+    struct snd_rawmidi_info *info;
+
+    g_return_if_fail(ALSARAWMIDI_IS_STREAM_PAIR(self));
+    priv = alsarawmidi_stream_pair_get_instance_private(self);
+
+    *substream_info = g_object_new(ALSARAWMIDI_TYPE_SUBSTREAM_INFO, NULL);
+
+    rawmidi_substream_info_refer_private(*substream_info, &info);
+    info->stream = direction;
+    if (ioctl(priv->fd, SNDRV_RAWMIDI_IOCTL_INFO, info) < 0) {
+        generate_error(error, errno);
+        g_object_unref(*substream_info);
+        return;
+    }
+}
index 46c40809d0edb31bf21e9df3496ec003cd999789..2400fbdbea25d8a35a5e4cc326bc80cab66853c8 100644 (file)
@@ -6,6 +6,7 @@
 #include <glib-object.h>
 
 #include <rawmidi/alsarawmidi-enums.h>
+#include <rawmidi/substream-info.h>
 
 G_BEGIN_DECLS
 
@@ -54,6 +55,11 @@ void alsarawmidi_stream_pair_open(ALSARawmidiStreamPair *self, guint card_id,
                                   ALSARawmidiStreamPairInfoFlag access_modes,
                                  gint open_flag, GError **error);
 
+void alsarawmidi_stream_pair_get_substream_info(ALSARawmidiStreamPair *self,
+                                ALSARawmidiStreamDirection direction,
+                                ALSARawmidiSubstreamInfo **substream_info,
+                                GError **error);
+
 G_END_DECLS
 
 #endif
index 04195396721f46a250085342f838f04432ddaa1a..becebb1ba6506124c87baac5fcc6d51c3283cdef 100644 (file)
@@ -16,6 +16,7 @@ props = (
 methods = (
     'new',
     'open',
+    'get_substream_info',
 )
 signals = ()