From: Takashi Sakamoto Date: Sun, 9 Feb 2020 03:20:53 +0000 (+0900) Subject: timer: add global method to get list of available timers X-Git-Tag: v0.1.0~360 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=9e262d6adfdac3648ee941b4b61d89e6ee93c6cd;p=alsa-gobject.git timer: add global method to get list of available timers Signed-off-by: Takashi Sakamoto --- diff --git a/src/timer/alsatimer.map b/src/timer/alsatimer.map index 6d9dcb2..9ae39db 100644 --- a/src/timer/alsatimer.map +++ b/src/timer/alsatimer.map @@ -9,6 +9,7 @@ ALSA_GOBJECT_0_0_0 { "alsatimer_get_sysname"; "alsatimer_get_devnode"; + "alsatimer_get_device_id_list"; "alsatimer_device_id_get_type"; "alsatimer_device_id_new"; diff --git a/src/timer/privates.h b/src/timer/privates.h index 9f5666f..4efb5fb 100644 --- a/src/timer/privates.h +++ b/src/timer/privates.h @@ -2,6 +2,8 @@ #ifndef __ALSA_GOBJECT_ALSATIMER_PRIVATES__H__ #define __ALSA_GOBJECT_ALSATIMER_PRIVATES__H__ +#include + G_BEGIN_DECLS GQuark alsatimer_error_quark(void); diff --git a/src/timer/query.c b/src/timer/query.c index 2a8f58a..6194994 100644 --- a/src/timer/query.c +++ b/src/timer/query.c @@ -4,6 +4,14 @@ #include #include +#include +#include +#include +#include +#include +#include + +#include #include @@ -103,3 +111,46 @@ void alsatimer_get_devnode(char **devnode, GError **error) udev_device_unref(dev); udev_unref(ctx); } + +/** + * alsatimer_get_device_id_list: + * @entries: (element-type ALSATimer.DeviceId)(out): The array with + * entries of ALSATimerId. + * @error: A #GError. + * + */ +void alsatimer_get_device_id_list(GList **entries, GError **error) +{ + struct snd_timer_id id = { + .dev_class = -1, + }; + char *devnode; + int fd; + + g_return_if_fail(entries != NULL); + + alsatimer_get_devnode(&devnode, error); + if (*error != NULL) + return; + + fd = open(devnode, O_RDONLY); + g_free(devnode); + if (fd < 0) { + generate_error(error, errno); + return; + } + + while (true) { + ALSATimerDeviceId *entry; + + if (ioctl(fd, SNDRV_TIMER_IOCTL_NEXT_DEVICE, &id) < 0) + break; + if (id.dev_class == SNDRV_TIMER_CLASS_NONE) + break; + + entry = g_boxed_copy(ALSATIMER_TYPE_DEVICE_ID, &id); + *entries = g_list_append(*entries, entry); + } + + close(fd); +} diff --git a/src/timer/query.h b/src/timer/query.h index a8ec3a7..b8fbc68 100644 --- a/src/timer/query.h +++ b/src/timer/query.h @@ -5,12 +5,18 @@ #include #include +#include + +#include + G_BEGIN_DECLS void alsatimer_get_sysname(char **sysname, GError **error); void alsatimer_get_devnode(char **devnode, GError **error); +void alsatimer_get_device_id_list(GList **entries, GError **error); + G_END_DECLS #endif