From 99d16dcb58489fe94c5f65eabd46c24a883aca43 Mon Sep 17 00:00:00 2001 From: Takashi Sakamoto Date: Sun, 9 Feb 2020 12:20:53 +0900 Subject: [PATCH] timer: add global method to get devnode of ALSA Timer Signed-off-by: Takashi Sakamoto --- src/timer/alsatimer.map | 1 + src/timer/query.c | 39 +++++++++++++++++++++++++++++++++++++++ src/timer/query.h | 2 ++ 3 files changed, 42 insertions(+) diff --git a/src/timer/alsatimer.map b/src/timer/alsatimer.map index 5051462..45b0436 100644 --- a/src/timer/alsatimer.map +++ b/src/timer/alsatimer.map @@ -8,6 +8,7 @@ ALSA_GOBJECT_0_0_0 { "alsatimer_event_type_get_type"; "alsatimer_get_sysname"; + "alsatimer_get_devnode"; local: *; }; diff --git a/src/timer/query.c b/src/timer/query.c index 60741cf..2a8f58a 100644 --- a/src/timer/query.c +++ b/src/timer/query.c @@ -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); +} diff --git a/src/timer/query.h b/src/timer/query.h index bc2d12a..a8ec3a7 100644 --- a/src/timer/query.h +++ b/src/timer/query.h @@ -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 -- 2.47.3