]> git.alsa-project.org Git - alsa-gobject.git/commitdiff
rawmidi: stream_pair: add an API to get status 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/privates.h
src/rawmidi/stream-pair.c
src/rawmidi/stream-pair.h
src/rawmidi/substream-status.c
tests/alsarawmidi-stream-pair

index 1a0a56dc32d40e6c3d0ec60a4e3944bc7597610e..0a6025b24539c66473a2257e83d217b4118e73b3 100644 (file)
@@ -16,6 +16,7 @@ ALSA_GOBJECT_0_0_0 {
     "alsarawmidi_stream_pair_open";
     "alsarawmidi_stream_pair_get_substream_info";
     "alsarawmidi_stream_pair_set_substream_params";
+    "alsarawmidi_stream_pair_get_substream_status";
 
     "alsarawmidi_substream_params_get_type";
     "alsarawmidi_substream_params_new";
index ae579de769efb0ea84a38d14260a56d263c4aeba..09da0cdb96e610e68fadda98cd84d6cb264d7f3c 100644 (file)
@@ -9,6 +9,7 @@
 
 #include "substream-info.h"
 #include "substream-params.h"
+#include "substream-status.h"
 
 #include <sound/asound.h>
 
@@ -28,6 +29,9 @@ void rawmidi_select_subdevice(guint card_id, guint subdevice_id, GError **error)
 void rawmidi_substream_params_refer_private(ALSARawmidiSubstreamParams *self,
                                             struct snd_rawmidi_params **params);
 
+void rawmidi_substream_status_refer_private(ALSARawmidiSubstreamStatus *self,
+                                            struct snd_rawmidi_status **status);
+
 G_END_DECLS
 
 #endif
index f8875c97623bfd96349d2c86f3c9911dad27f4e8..6276ca98563fd02bb47260dc48a974f0d8dde817 100644 (file)
@@ -211,3 +211,32 @@ void alsarawmidi_stream_pair_set_substream_params(ALSARawmidiStreamPair *self,
     if (ioctl(priv->fd, SNDRV_RAWMIDI_IOCTL_PARAMS, params) < 0)
         generate_error(error, errno);
 }
+
+/**
+ * alsarawmidi_stream_pair_get_substream_status:
+ * @self: A #ALSARawmidiStreamPair.
+ * @direction: The direction of substream attached to the stream pair.
+ * @substream_status: (inout): The status of substream.
+ * @error: A #GError.
+ *
+ * Retrieve status of substream for given direction, which is attached to the
+ * pair of streams.
+ */
+void alsarawmidi_stream_pair_get_substream_status(ALSARawmidiStreamPair *self,
+                            ALSARawmidiStreamDirection direction,
+                            ALSARawmidiSubstreamStatus *const *substream_status,
+                            GError **error)
+{
+    ALSARawmidiStreamPairPrivate *priv;
+    struct snd_rawmidi_status *status;
+
+    g_return_if_fail(ALSARAWMIDI_IS_STREAM_PAIR(self));
+    g_return_if_fail(substream_status != NULL);
+    priv = alsarawmidi_stream_pair_get_instance_private(self);
+
+    rawmidi_substream_status_refer_private(*substream_status, &status);
+
+    status->stream = direction;
+    if (ioctl(priv->fd, SNDRV_RAWMIDI_IOCTL_STATUS, status) < 0)
+        generate_error(error, errno);
+}
index 4cd770f7879906db37ce4568c9c11ee0e6d4f3af..22f4652b6dcad1d037376ace680e9c4d4977306e 100644 (file)
@@ -8,6 +8,7 @@
 #include <rawmidi/alsarawmidi-enums.h>
 #include <rawmidi/substream-info.h>
 #include <rawmidi/substream-params.h>
+#include <rawmidi/substream-status.h>
 
 G_BEGIN_DECLS
 
@@ -66,6 +67,11 @@ void alsarawmidi_stream_pair_set_substream_params(ALSARawmidiStreamPair *self,
                                 ALSARawmidiSubstreamParams *substream_params,
                                 GError **error);
 
+void alsarawmidi_stream_pair_get_substream_status(ALSARawmidiStreamPair *self,
+                            ALSARawmidiStreamDirection direction,
+                            ALSARawmidiSubstreamStatus *const *substream_status,
+                            GError **error);
+
 G_END_DECLS
 
 #endif
index 39ed60b46c846db9277d8561d6543d4533e7de1d..bcebc0aff6409d3c4f664f07b7e62162ef14892b 100644 (file)
@@ -1,7 +1,5 @@
 // SPDX-License-Identifier: LGPL-3.0-or-later
-#include "substream-status.h"
-
-#include <sound/asound.h>
+#include "privates.h"
 
 struct _ALSARawmidiSubstreamStatusPrivate {
     struct snd_rawmidi_status status;
@@ -74,3 +72,12 @@ ALSARawmidiSubstreamStatus *alsarawmidi_substream_status_new()
 {
     return g_object_new(ALSARAWMIDI_TYPE_SUBSTREAM_STATUS, NULL);
 }
+
+void rawmidi_substream_status_refer_private(ALSARawmidiSubstreamStatus *self,
+                                            struct snd_rawmidi_status **status)
+{
+    ALSARawmidiSubstreamStatusPrivate *priv =
+                        alsarawmidi_substream_status_get_instance_private(self);
+
+    *status = &priv->status;
+}
index 3c43f54c35e8dd1004479d7eb259f6482899da85..fb7c33c8b6a9dd50753f4643551a21b8b1550e55 100644 (file)
@@ -18,6 +18,7 @@ methods = (
     'open',
     'get_substream_info',
     'set_substream_params',
+    'get_substream_status',
 )
 signals = ()