From: Takashi Sakamoto Date: Sun, 9 Feb 2020 03:20:53 +0000 (+0900) Subject: timer: add global method to get information of timer device X-Git-Tag: v0.1.0~357 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=f77ab3609ea1d7f0de31a8b236ed5e30f08c9ea2;p=alsa-gobject.git timer: add global method to get information of timer device Signed-off-by: Takashi Sakamoto --- diff --git a/src/timer/alsatimer.map b/src/timer/alsatimer.map index 088b9b5..ab4a22a 100644 --- a/src/timer/alsatimer.map +++ b/src/timer/alsatimer.map @@ -10,6 +10,7 @@ ALSA_GOBJECT_0_0_0 { "alsatimer_get_sysname"; "alsatimer_get_devnode"; "alsatimer_get_device_id_list"; + "alsatimer_get_device_info"; "alsatimer_device_id_get_type"; "alsatimer_device_id_new"; diff --git a/src/timer/device-info.c b/src/timer/device-info.c index ba4e149..bd245f4 100644 --- a/src/timer/device-info.c +++ b/src/timer/device-info.c @@ -1,7 +1,5 @@ // SPDX-License-Identifier: LGPL-3.0-or-later -#include "device-info.h" - -#include +#include "privates.h" struct _ALSATimerDeviceInfoPrivate { struct snd_timer_ginfo info; @@ -128,3 +126,12 @@ static void alsatimer_device_info_init(ALSATimerDeviceInfo *self) { return; } + +void timer_device_info_refer_private(ALSATimerDeviceInfo *self, + struct snd_timer_ginfo **info) +{ + ALSATimerDeviceInfoPrivate *priv = + alsatimer_device_info_get_instance_private(self); + + *info = &priv->info; +} diff --git a/src/timer/privates.h b/src/timer/privates.h index 4efb5fb..5785d46 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 "device-info.h" + #include G_BEGIN_DECLS @@ -12,6 +14,9 @@ GQuark alsatimer_error_quark(void); g_set_error(err, alsatimer_error_quark(), errno, \ __FILE__ ":%d: %s", __LINE__, strerror(errno)) +void timer_device_info_refer_private(ALSATimerDeviceInfo *self, + struct snd_timer_ginfo **info); + G_END_DECLS #endif diff --git a/src/timer/query.c b/src/timer/query.c index 6194994..c88a9e5 100644 --- a/src/timer/query.c +++ b/src/timer/query.c @@ -154,3 +154,42 @@ void alsatimer_get_device_id_list(GList **entries, GError **error) close(fd); } + +/** + * alsatimer_get_device_info: + * @device_id: A #ALSATimerDeviceId to identify the timer device. + * @device_info: (out): The information of timer device. + * @error: A #GError. + */ +void alsatimer_get_device_info(ALSATimerDeviceId *device_id, + ALSATimerDeviceInfo **device_info, + GError **error) +{ + char *devnode; + struct snd_timer_ginfo *info; + int fd; + + g_return_if_fail(device_id != 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; + } + + *device_info = g_object_new(ALSATIMER_TYPE_DEVICE_INFO, NULL); + timer_device_info_refer_private(*device_info, &info); + + info->tid = *device_id; + if (ioctl(fd, SNDRV_TIMER_IOCTL_GINFO, info) < 0) { + generate_error(error, errno); + g_object_unref(*device_info); + } + + close(fd); +} diff --git a/src/timer/query.h b/src/timer/query.h index b8fbc68..facf489 100644 --- a/src/timer/query.h +++ b/src/timer/query.h @@ -6,6 +6,7 @@ #include #include +#include #include @@ -17,6 +18,9 @@ void alsatimer_get_devnode(char **devnode, GError **error); void alsatimer_get_device_id_list(GList **entries, GError **error); +void alsatimer_get_device_info(ALSATimerDeviceId *device_id, + ALSATimerDeviceInfo **device_info, + GError **error); G_END_DECLS #endif