]> git.alsa-project.org Git - alsa-gobject.git/commitdiff
seq: add global method to get devnode string for ALSA Sequencer
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/query.c
src/seq/query.h

index 0a34538b206667571e149727032ec3b0aa3ea9f1..00b636fac7e2d926089090e336fbdbbd0697113d 100644 (file)
@@ -17,6 +17,7 @@ ALSA_GOBJECT_0_0_0 {
     "alsaseq_query_subscribe_type_get_type";
 
     "alsaseq_get_seq_sysname";
+    "alsaseq_get_seq_devnode";
   local:
     *;
 };
index db9ed3ae29b904e4c62563e7a98ead3b4657d199..91356e4bdd506e52bba0625c455d13fa14c2e9e3 100644 (file)
@@ -52,3 +52,45 @@ void alsaseq_get_seq_sysname(gchar **sysname, GError **error)
     udev_device_unref(dev);
     udev_unref(ctx);
 }
+
+/**
+ * alsaseq_get_seq_devnode:
+ * @devnode: (out): The devnode of ALSA Sequencer.
+ * @error: A #GError.
+ *
+ * Allocate devnode string for ALSA Sequencer and return it when exists.
+ */
+void alsaseq_get_seq_devnode(gchar **devnode, GError **error)
+{
+    struct udev *ctx;
+    struct udev_device *dev;
+    const char *node;
+
+    ctx = udev_new();
+    if (ctx == NULL) {
+        generate_error(error, errno);
+        return;
+    }
+
+    dev = udev_device_new_from_subsystem_sysname(ctx, "sound", SEQ_SYSNAME);
+    if (dev == NULL) {
+        generate_error(error, ENODEV);
+        udev_unref(ctx);
+        return;
+    }
+
+    node = udev_device_get_devnode(dev);
+    if (node == NULL) {
+        generate_error(error, ENODEV);
+        udev_device_unref(dev);
+        udev_unref(ctx);
+        return;
+    }
+
+    *devnode = strdup(node);
+    if (*devnode == NULL)
+        generate_error(error, ENOMEM);
+
+    udev_device_unref(dev);
+    udev_unref(ctx);
+}
index 98be3742e124e8b63cb3cce335e683531473fc37..1f428f4d4c2792eed1d6ea065965d2c6f9a09fcd 100644 (file)
@@ -9,6 +9,8 @@ G_BEGIN_DECLS
 
 void alsaseq_get_seq_sysname(gchar **sysname, GError **error);
 
+void alsaseq_get_seq_devnode(gchar **devnode, GError **error);
+
 G_END_DECLS
 
 #endif