]> git.alsa-project.org Git - alsa-gobject.git/commitdiff
timer: add global method to get information of timer device
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/device-info.c
src/timer/privates.h
src/timer/query.c
src/timer/query.h

index 088b9b598656c87d82e2a04d5545a820ac6fd656..ab4a22a398812630de8b3328fc0cd7a3e04eeab5 100644 (file)
@@ -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";
index ba4e149581cfb36b3b5c35fd17652f29e68ed6dc..bd245f4029eccaa79ee8df895dc0d0545bf05edb 100644 (file)
@@ -1,7 +1,5 @@
 // SPDX-License-Identifier: LGPL-3.0-or-later
-#include "device-info.h"
-
-#include <sound/asound.h>
+#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;
+}
index 4efb5fba0ac09d012814be717c700747b2103273..5785d461d9d8e90a1ef98a62931fcca611bb6a75 100644 (file)
@@ -2,6 +2,8 @@
 #ifndef __ALSA_GOBJECT_ALSATIMER_PRIVATES__H__
 #define __ALSA_GOBJECT_ALSATIMER_PRIVATES__H__
 
+#include "device-info.h"
+
 #include <sound/asound.h>
 
 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
index 61949946d3832eb81e9496f014610e713a2274cd..c88a9e50d21e08c09df4b168e6cbb021e009fb59 100644 (file)
@@ -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);
+}
index b8fbc68937b2034a5be74c10d3a4299a4080f723..facf489df7b1a4e6e631d893d72c3c1c413110e5 100644 (file)
@@ -6,6 +6,7 @@
 #include <glib-object.h>
 
 #include <timer/device-id.h>
+#include <timer/device-info.h>
 
 #include <timer/alsatimer-enums.h>
 
@@ -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