]> git.alsa-project.org Git - alsa-gobject.git/commitdiff
timer: user_instance: add an API to get status of instance
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Sun, 9 Feb 2020 03:20:53 +0000 (12:20 +0900)
committer坂本 貴史 <o-takashi@sakamocchi.jp>
Tue, 11 Feb 2020 04:28:18 +0000 (13:28 +0900)
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
src/timer/alsatimer.map
src/timer/instance-status.c
src/timer/privates.h
src/timer/user-instance.c
src/timer/user-instance.h
tests/alsatimer-user-instance

index c3939c1710fb0e1c8871d779351d0c915469874f..c02c8092c1a7ca2cc97b4d74c6a1477e8b545cfb 100644 (file)
@@ -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";
 
index 85763cc2dbb50c3a58cab218d603adc67e435f46..d06dbd10ad0bddfdd3354d7732c7760ef750dace 100644 (file)
@@ -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;
+}
index d76ca51eb81b41c4559d01a501111c70073abd9d..87d3dcc749dfca2627d464b62ef9a23edb2a9996 100644 (file)
@@ -7,6 +7,7 @@
 #include "device-params.h"
 #include "instance-info.h"
 #include "instance-params.h"
+#include "instance-status.h"
 
 #include <sound/asound.h>
 
@@ -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
index 231bd72ce5a2bf0ae00921f0774f11083be11095..f5ff2c1d3ccaa6a25cf33a4f7df9a8c7e7ae187d 100644 (file)
@@ -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);
+    }
+}
index 66383357382e513b90befb10c15cbd1dce7d467f..62fb6596d9cf6d8ca603103250e79d89dcff9f08 100644 (file)
@@ -8,6 +8,7 @@
 #include <timer/device-id.h>
 #include <timer/instance-info.h>
 #include <timer/instance-params.h>
+#include <timer/instance-status.h>
 
 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
index 29e9aa4f6043546f10e8da307928067f5abf1705..86a9a399946874981d43aa52c470da1d9269eab3 100644 (file)
@@ -18,6 +18,7 @@ methods = (
     'attach_as_slave',
     'get_info',
     'set_params',
+    'get_status',
 )
 signals = ()