]> git.alsa-project.org Git - alsa-gobject.git/commitdiff
timer: add global method to get devnode of ALSA Timer
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Sun, 9 Feb 2020 03:20:53 +0000 (12:20 +0900)
committer坂本 貴史 <o-takashi@sakamocchi.jp>
Tue, 11 Feb 2020 04:28:18 +0000 (13:28 +0900)
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
src/timer/alsatimer.map
src/timer/query.c
src/timer/query.h

index 5051462ce252bd268355481794782b6618519583..45b0436aee79951b4eed01b13e79dc92a661702d 100644 (file)
@@ -8,6 +8,7 @@ ALSA_GOBJECT_0_0_0 {
     "alsatimer_event_type_get_type";
 
     "alsatimer_get_sysname";
+    "alsatimer_get_devnode";
   local:
     *;
 };
index 60741cfb807133d0914b69e6bb3f1e0a28af2237..2a8f58ab0735529bcdaf5c1fb07005e11e8ca28a 100644 (file)
@@ -64,3 +64,42 @@ void alsatimer_get_sysname(char **sysname, GError **error)
 
     *sysname = name;
 }
+
+/**
+ * alsatimer_get_devnode:
+ * @devnode: (out): The string for devnode of ALSA Timer.
+ * @error: A #GError.
+ *
+ * Allocate string of devnode for ALSA Timer and return it if exists.
+ */
+void alsatimer_get_devnode(char **devnode, GError **error)
+{
+    struct udev *ctx;
+    struct udev_device *dev;
+    const char *node;
+
+    g_return_if_fail(devnode != NULL);
+
+    ctx = udev_new();
+    if (ctx == NULL) {
+        generate_error(error, errno);
+        return;
+    }
+
+    dev = udev_device_new_from_subsystem_sysname(ctx, "sound",
+                                                 TIMER_SYSNAME_TEMPLATE);
+    if (dev == NULL) {
+        generate_error(error, ENODEV);
+        udev_unref(ctx);
+        return;
+    }
+
+    node = udev_device_get_devnode(dev);
+    if (node != NULL)
+        *devnode = strdup(node);
+    else
+        generate_error(error, ENODEV);
+
+    udev_device_unref(dev);
+    udev_unref(ctx);
+}
index bc2d12a44bfb7a705596c25641d4df9798b3e22f..a8ec3a76f0d671a00e208b143c86dd7e1b9b2da1 100644 (file)
@@ -9,6 +9,8 @@ G_BEGIN_DECLS
 
 void alsatimer_get_sysname(char **sysname, GError **error);
 
+void alsatimer_get_devnode(char **devnode, GError **error);
+
 G_END_DECLS
 
 #endif