From aca5ae8abccd60718c0d6ad0a6058ac8924f4de6 Mon Sep 17 00:00:00 2001 From: Takashi Sakamoto Date: Sun, 9 Feb 2020 12:20:53 +0900 Subject: [PATCH] timer: user_instance: add an API to get status of instance Signed-off-by: Takashi Sakamoto --- src/timer/alsatimer.map | 1 + src/timer/instance-status.c | 9 +++++++++ src/timer/privates.h | 4 ++++ src/timer/user-instance.c | 27 +++++++++++++++++++++++++++ src/timer/user-instance.h | 5 +++++ tests/alsatimer-user-instance | 1 + 6 files changed, 47 insertions(+) diff --git a/src/timer/alsatimer.map b/src/timer/alsatimer.map index c3939c1..c02c809 100644 --- a/src/timer/alsatimer.map +++ b/src/timer/alsatimer.map @@ -34,6 +34,7 @@ ALSA_GOBJECT_0_0_0 { "alsatimer_user_instance_attach_as_slave"; "alsatimer_user_instance_get_info"; "alsatimer_user_instance_set_params"; + "alsatimer_user_instance_get_status"; "alsatimer_instance_info_get_type"; diff --git a/src/timer/instance-status.c b/src/timer/instance-status.c index 85763cc..d06dbd1 100644 --- a/src/timer/instance-status.c +++ b/src/timer/instance-status.c @@ -109,3 +109,12 @@ void alsatimer_instance_status_get_timestamp(ALSATimerInstanceStatus *self, *tv_nsec = (guint)priv->status.tstamp.tv_nsec; } + +void timer_instance_status_refer_private(ALSATimerInstanceStatus *self, + struct snd_timer_status **status) +{ + ALSATimerInstanceStatusPrivate *priv = + alsatimer_instance_status_get_instance_private(self); + + *status = &priv->status; +} diff --git a/src/timer/privates.h b/src/timer/privates.h index d76ca51..87d3dcc 100644 --- a/src/timer/privates.h +++ b/src/timer/privates.h @@ -7,6 +7,7 @@ #include "device-params.h" #include "instance-info.h" #include "instance-params.h" +#include "instance-status.h" #include @@ -33,6 +34,9 @@ void timer_instance_info_refer_private(ALSATimerInstanceInfo *self, void timer_instance_params_refer_private(ALSATimerInstanceParams *self, struct snd_timer_params **params); +void timer_instance_status_refer_private(ALSATimerInstanceStatus *self, + struct snd_timer_status **status); + G_END_DECLS #endif diff --git a/src/timer/user-instance.c b/src/timer/user-instance.c index 231bd72..f5ff2c1 100644 --- a/src/timer/user-instance.c +++ b/src/timer/user-instance.c @@ -180,3 +180,30 @@ void alsatimer_user_instance_set_params(ALSATimerUserInstance *self, if (ioctl(priv->fd, SNDRV_TIMER_IOCTL_PARAMS, params) < 0) generate_error(error, errno); } + +/** + * alsatimer_user_instance_get_status: + * @self: A #ALSATimerUserInstance. + * @instance_status: (out): A #ALSATimerInstanceStatus. + * @error: A #GError. + * + * Get the latest status of instance. + */ +void alsatimer_user_instance_get_status(ALSATimerUserInstance *self, + ALSATimerInstanceStatus **instance_status, + GError **error) +{ + ALSATimerUserInstancePrivate *priv; + struct snd_timer_status *status; + + g_return_if_fail(ALSATIMER_IS_USER_INSTANCE(self)); + priv = alsatimer_user_instance_get_instance_private(self); + + *instance_status = g_object_new(ALSATIMER_TYPE_INSTANCE_STATUS, NULL); + timer_instance_status_refer_private(*instance_status, &status); + + if (ioctl(priv->fd, SNDRV_TIMER_IOCTL_STATUS, status) < 0) { + generate_error(error, errno); + g_object_unref(*instance_status); + } +} diff --git a/src/timer/user-instance.h b/src/timer/user-instance.h index 6638335..62fb659 100644 --- a/src/timer/user-instance.h +++ b/src/timer/user-instance.h @@ -8,6 +8,7 @@ #include #include #include +#include G_BEGIN_DECLS @@ -70,6 +71,10 @@ void alsatimer_user_instance_set_params(ALSATimerUserInstance *self, ALSATimerInstanceParams *const *instance_params, GError **error); +void alsatimer_user_instance_get_status(ALSATimerUserInstance *self, + ALSATimerInstanceStatus **instance_status, + GError **error); + G_END_DECLS #endif diff --git a/tests/alsatimer-user-instance b/tests/alsatimer-user-instance index 29e9aa4..86a9a39 100644 --- a/tests/alsatimer-user-instance +++ b/tests/alsatimer-user-instance @@ -18,6 +18,7 @@ methods = ( 'attach_as_slave', 'get_info', 'set_params', + 'get_status', ) signals = () -- 2.47.3