]> git.alsa-project.org Git - alsa-gobject.git/commitdiff
rawmidi: stream_pair: add an API to set parameters for 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-params.c
tests/alsarawmidi-stream-pair

index a29d26e08ded8b05fef641f07582e679d5bd0d9a..b9ba3946c12ee54507deb9dba5a2558444a6811b 100644 (file)
@@ -15,6 +15,7 @@ ALSA_GOBJECT_0_0_0 {
     "alsarawmidi_stream_pair_new";
     "alsarawmidi_stream_pair_open";
     "alsarawmidi_stream_pair_get_substream_info";
+    "alsarawmidi_stream_pair_set_substream_params";
 
     "alsarawmidi_substream_params_get_type";
     "alsarawmidi_substream_params_new";
index b0f2674d45b22d13d2ee74dfb1d18c1ee2478b8b..ae579de769efb0ea84a38d14260a56d263c4aeba 100644 (file)
@@ -8,6 +8,7 @@
 #include <glib-object.h>
 
 #include "substream-info.h"
+#include "substream-params.h"
 
 #include <sound/asound.h>
 
@@ -24,6 +25,9 @@ void rawmidi_substream_info_refer_private(ALSARawmidiSubstreamInfo *self,
 
 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);
+
 G_END_DECLS
 
 #endif
index d1f9a073655c7ae6d099c85852a0db8dc096394a..f8875c97623bfd96349d2c86f3c9911dad27f4e8 100644 (file)
@@ -183,3 +183,31 @@ void alsarawmidi_stream_pair_get_substream_info(ALSARawmidiStreamPair *self,
         return;
     }
 }
+
+/**
+ * alsarawmidi_stream_pair_set_substream_params:
+ * @self: A #ALSARawmidiStreamPair.
+ * @direction: The direction of substream attached to the stream pair.
+ * @substream_params: The parameters of substream.
+ * @error: A #GError.
+ *
+ * Set parameters of substream for given direction, which is attached to the
+ * pair of streams.
+ */
+void alsarawmidi_stream_pair_set_substream_params(ALSARawmidiStreamPair *self,
+                                ALSARawmidiStreamDirection direction,
+                                ALSARawmidiSubstreamParams *substream_params,
+                                GError **error)
+{
+    ALSARawmidiStreamPairPrivate *priv;
+    struct snd_rawmidi_params *params;
+
+    g_return_if_fail(ALSARAWMIDI_IS_STREAM_PAIR(self));
+    priv = alsarawmidi_stream_pair_get_instance_private(self);
+
+    rawmidi_substream_params_refer_private(substream_params, &params);
+
+    params->stream = direction;
+    if (ioctl(priv->fd, SNDRV_RAWMIDI_IOCTL_PARAMS, params) < 0)
+        generate_error(error, errno);
+}
index 2400fbdbea25d8a35a5e4cc326bc80cab66853c8..4cd770f7879906db37ce4568c9c11ee0e6d4f3af 100644 (file)
@@ -7,6 +7,7 @@
 
 #include <rawmidi/alsarawmidi-enums.h>
 #include <rawmidi/substream-info.h>
+#include <rawmidi/substream-params.h>
 
 G_BEGIN_DECLS
 
@@ -60,6 +61,11 @@ void alsarawmidi_stream_pair_get_substream_info(ALSARawmidiStreamPair *self,
                                 ALSARawmidiSubstreamInfo **substream_info,
                                 GError **error);
 
+void alsarawmidi_stream_pair_set_substream_params(ALSARawmidiStreamPair *self,
+                                ALSARawmidiStreamDirection direction,
+                                ALSARawmidiSubstreamParams *substream_params,
+                                GError **error);
+
 G_END_DECLS
 
 #endif
index 0f5f0787d7ad036ff87eb1a804edad8587d5cda1..bfeb43d35417ea77599f03efe0df03933e80768b 100644 (file)
@@ -1,10 +1,8 @@
 // SPDX-License-Identifier: LGPL-3.0-or-later
-#include "substream-params.h"
+#include "privates.h"
 
 #include <unistd.h>
 
-#include <sound/asound.h>
-
 struct _ALSARawmidiSubstreamParamsPrivate {
     struct snd_rawmidi_params params;
 };
@@ -113,3 +111,12 @@ ALSARawmidiSubstreamParams *alsarawmidi_substream_params_new()
 {
     return g_object_new(ALSARAWMIDI_TYPE_SUBSTREAM_PARAMS, NULL);
 }
+
+void rawmidi_substream_params_refer_private(ALSARawmidiSubstreamParams *self,
+                                            struct snd_rawmidi_params **params)
+{
+    ALSARawmidiSubstreamParamsPrivate *priv =
+                        alsarawmidi_substream_params_get_instance_private(self);
+
+    *params = &priv->params;
+}
index becebb1ba6506124c87baac5fcc6d51c3283cdef..3c43f54c35e8dd1004479d7eb259f6482899da85 100644 (file)
@@ -17,6 +17,7 @@ methods = (
     'new',
     'open',
     'get_substream_info',
+    'set_substream_params',
 )
 signals = ()