From ebc918809d706b5f5d90e6cd994dd160643e8203 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 configure instance Signed-off-by: Takashi Sakamoto --- src/timer/alsatimer.map | 1 + src/timer/instance-params.c | 9 +++++++++ src/timer/privates.h | 4 ++++ src/timer/user-instance.c | 24 ++++++++++++++++++++++++ src/timer/user-instance.h | 5 +++++ tests/alsatimer-user-instance | 1 + 6 files changed, 44 insertions(+) diff --git a/src/timer/alsatimer.map b/src/timer/alsatimer.map index ea0dab5..f99a2bc 100644 --- a/src/timer/alsatimer.map +++ b/src/timer/alsatimer.map @@ -33,6 +33,7 @@ ALSA_GOBJECT_0_0_0 { "alsatimer_user_instance_attach"; "alsatimer_user_instance_attach_as_slave"; "alsatimer_user_instance_get_info"; + "alsatimer_user_instance_set_params"; "alsatimer_instance_info_get_type"; diff --git a/src/timer/instance-params.c b/src/timer/instance-params.c index cf728c0..8e31491 100644 --- a/src/timer/instance-params.c +++ b/src/timer/instance-params.c @@ -218,3 +218,12 @@ void alsatimer_instance_params_get_event_filter(ALSATimerInstanceParams *self, *entries = list; *entry_count = count; } + +void timer_instance_params_refer_private(ALSATimerInstanceParams *self, + struct snd_timer_params **params) +{ + ALSATimerInstanceParamsPrivate *priv = + alsatimer_instance_params_get_instance_private(self); + + *params = &priv->params; +} diff --git a/src/timer/privates.h b/src/timer/privates.h index e41770c..d76ca51 100644 --- a/src/timer/privates.h +++ b/src/timer/privates.h @@ -6,6 +6,7 @@ #include "device-status.h" #include "device-params.h" #include "instance-info.h" +#include "instance-params.h" #include @@ -29,6 +30,9 @@ void timer_device_params_refer_private(ALSATimerDeviceParams *self, void timer_instance_info_refer_private(ALSATimerInstanceInfo *self, struct snd_timer_info **info); +void timer_instance_params_refer_private(ALSATimerInstanceParams *self, + struct snd_timer_params **params); + G_END_DECLS #endif diff --git a/src/timer/user-instance.c b/src/timer/user-instance.c index 4f8d963..231bd72 100644 --- a/src/timer/user-instance.c +++ b/src/timer/user-instance.c @@ -156,3 +156,27 @@ void alsatimer_user_instance_get_info(ALSATimerUserInstance *self, g_object_unref(*instance_info); } } + +/** + * alsatimer_user_instance_set_params: + * @self: A #ALSATimerUserInstance. + * @instance_params: (inout): A #ALSATimerInstanceParams. + * @error: A #GError. + * + * Configure the instance with the parameters and return the latest parameters. + */ +void alsatimer_user_instance_set_params(ALSATimerUserInstance *self, + ALSATimerInstanceParams *const *instance_params, + GError **error) +{ + ALSATimerUserInstancePrivate *priv; + struct snd_timer_params *params; + + g_return_if_fail(ALSATIMER_IS_USER_INSTANCE(self)); + priv = alsatimer_user_instance_get_instance_private(self); + + timer_instance_params_refer_private(*instance_params, ¶ms); + + if (ioctl(priv->fd, SNDRV_TIMER_IOCTL_PARAMS, params) < 0) + generate_error(error, errno); +} diff --git a/src/timer/user-instance.h b/src/timer/user-instance.h index 9ace150..6638335 100644 --- a/src/timer/user-instance.h +++ b/src/timer/user-instance.h @@ -7,6 +7,7 @@ #include #include +#include G_BEGIN_DECLS @@ -65,6 +66,10 @@ void alsatimer_user_instance_get_info(ALSATimerUserInstance *self, ALSATimerInstanceInfo **instance_info, GError **error); +void alsatimer_user_instance_set_params(ALSATimerUserInstance *self, + ALSATimerInstanceParams *const *instance_params, + GError **error); + G_END_DECLS #endif diff --git a/tests/alsatimer-user-instance b/tests/alsatimer-user-instance index a16e703..29e9aa4 100644 --- a/tests/alsatimer-user-instance +++ b/tests/alsatimer-user-instance @@ -17,6 +17,7 @@ methods = ( 'attach', 'attach_as_slave', 'get_info', + 'set_params', ) signals = () -- 2.47.3