]> git.alsa-project.org Git - alsa-gobject.git/commitdiff
rawmidi: add global method to get information of substream for rawmidi device
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/query.c
src/rawmidi/query.h
src/rawmidi/substream-info.c

index 47d4da97da0ee729e2fdbd5bd29652b3467c1a19..9a384c38bce6118b4daadf24b27b95f40b207a28 100644 (file)
@@ -7,6 +7,7 @@ ALSA_GOBJECT_0_0_0 {
     "alsarawmidi_get_rawmidi_sysname";
     "alsarawmidi_get_rawmidi_devnode";
     "alsarawmidi_get_subdevice_id_list";
+    "alsarawmidi_get_substream_info";
 
     "alsarawmidi_substream_info_get_type";
   local:
index c98b6954a7e62a1d845e03cca7e544db97234f66..9d901ca012707bab46145c081bd5824792060f64 100644 (file)
@@ -7,6 +7,10 @@
 #include <glib.h>
 #include <glib-object.h>
 
+#include "substream-info.h"
+
+#include <sound/asound.h>
+
 G_BEGIN_DECLS
 
 GQuark alsarawmidi_error_quark(void);
@@ -15,6 +19,9 @@ GQuark alsarawmidi_error_quark(void);
     g_set_error(err, alsarawmidi_error_quark(), errno,          \
                 __FILE__ ":%d: %s", __LINE__, strerror(errno))
 
+void rawmidi_substream_info_refer_private(ALSARawmidiSubstreamInfo *self,
+                                          struct snd_rawmidi_info **info);
+
 G_END_DECLS
 
 #endif
index 3abdfb22165ddddcd02ee8e70765db8d190bce8f..7ef4363a1488cf8d26f0842bef60d338fc7847da 100644 (file)
@@ -12,8 +12,6 @@
 
 #include <libudev.h>
 
-#include <sound/asound.h>
-
 // For error reporting.
 G_DEFINE_QUARK("alsarawmidi-error", alsarawmidi_error)
 
@@ -396,3 +394,38 @@ void alsarawmidi_get_subdevice_id_list(guint card, guint device,
         (*entries)[i] = i;
     *entry_count = info.subdevices_count;
 }
+
+/**
+ * alsarawmidi_get_substream_info:
+ * @card_id: The numberical value for sound card to query.
+ * @device_id: The numerical value of rawmidi device to query.
+ * @direction: The direction of stream, one of ALSARawmidiStreamDirection.
+ * @subdevice_id: The numerical value of subdevice in rawmidi device.
+ * @substream_info: (out): The information of substream for the subdevice.
+ * @error: A #GError.
+ */
+void alsarawmidi_get_substream_info(guint card_id, guint device_id,
+                                    ALSARawmidiStreamDirection direction,
+                                    guint subdevice_id,
+                                    ALSARawmidiSubstreamInfo **substream_info,
+                                    GError **error)
+{
+    struct snd_rawmidi_info *info;
+
+    if (substream_info == NULL) {
+        generate_error(error, EINVAL);
+        return;
+    }
+
+    *substream_info = g_object_new(ALSARAWMIDI_TYPE_SUBSTREAM_INFO, NULL);
+
+    rawmidi_substream_info_refer_private(*substream_info, &info);
+    info->device = device_id;
+    info->subdevice = subdevice_id;
+    info->stream = direction;
+    info->card = card_id;
+
+    rawmidi_perform_ctl_ioctl(card_id, SNDRV_CTL_IOCTL_RAWMIDI_INFO, info, error);
+    if (*error != NULL)
+        g_object_unref(*substream_info);
+}
index be5f2c90484940c00d619c4546a0b9dba35a3833..41d948e144ce241577606cee6793fc3d670ab7cf 100644 (file)
@@ -6,6 +6,7 @@
 #include <glib-object.h>
 
 #include <rawmidi/alsarawmidi-enums.h>
+#include <rawmidi/substream-info.h>
 
 G_BEGIN_DECLS
 
@@ -24,6 +25,12 @@ void alsarawmidi_get_subdevice_id_list(guint card, guint device,
                                        guint **entries, gsize *entry_count,
                                        GError **error);
 
+void alsarawmidi_get_substream_info(guint card_id, guint device_id,
+                                    ALSARawmidiStreamDirection direction,
+                                    guint subdevice_id,
+                                    ALSARawmidiSubstreamInfo **substream_info,
+                                    GError **error);
+
 G_END_DECLS
 
 #endif
index 1b218adb2713dea710e013191b8532db02565868..3e8feecbc762f0a6ae44f45d9039e338b443135b 100644 (file)
@@ -1,7 +1,5 @@
 // SPDX-License-Identifier: LGPL-3.0-or-later
-#include "substream-info.h"
-
-#include <sound/asound.h>
+#include "privates.h"
 
 struct _ALSARawmidiSubstreamInfoPrivate {
     struct snd_rawmidi_info info;
@@ -154,3 +152,12 @@ static void alsarawmidi_substream_info_init(ALSARawmidiSubstreamInfo *self)
 {
     return;
 }
+
+void rawmidi_substream_info_refer_private(ALSARawmidiSubstreamInfo *self,
+                                          struct snd_rawmidi_info **info)
+{
+    ALSARawmidiSubstreamInfoPrivate *priv =
+                        alsarawmidi_substream_info_get_instance_private(self);
+
+    *info = &priv->info;
+}