]> git.alsa-project.org Git - alsa-gobject.git/commitdiff
ctl: card: add an API to get information of sound card
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Mon, 18 Nov 2019 04:22:44 +0000 (13:22 +0900)
committerTakashi Sakamoto <o-takashi@sakamocchi.jp>
Sat, 30 Nov 2019 08:58:41 +0000 (17:58 +0900)
src/ctl/alsactl.map
src/ctl/card-info.c
src/ctl/card.c
src/ctl/card.h
src/ctl/privates.h
tests/alsactl-card

index 05eb99902a06b1b534a36a7d9bf1693e6f893a27..8cd47038bb1a65e4d4f0e91974ec049360595019 100644 (file)
@@ -14,6 +14,7 @@ ALSA_GOBJECT_0_0_0 {
     "alsactl_card_get_type";
     "alsactl_card_new";
     "alsactl_card_open";
+    "alsactl_card_get_info";
 
     "alsactl_card_info_get_type";
   local:
index da7eca4c8c339e8db7c5e21b1c3cc96a272b98f4..40a03c58ce23a6e2de9d1f20ba5b5b5320add0cb 100644 (file)
@@ -1,7 +1,5 @@
 // SPDX-License-Identifier: LGPL-3.0-or-later
-#include "card-info.h"
-
-#include <sound/asound.h>
+#include "privates.h"
 
 struct _ALSACtlCardInfoPrivate {
     struct snd_ctl_card_info info;
@@ -112,3 +110,11 @@ static void alsactl_card_info_init(ALSACtlCardInfo *self)
 {
     return;
 }
+
+void ctl_card_info_refer_private(ALSACtlCardInfo *self,
+                                 struct snd_ctl_card_info **info)
+{
+    ALSACtlCardInfoPrivate *priv = alsactl_card_info_get_instance_private(self);
+
+    *info = &priv->info;
+}
index 92bf6f4ad26a3abecdf6c965c22fede6a0f5e544..fa505a31799cc60df909bf96503af40071cbae6a 100644 (file)
@@ -10,8 +10,6 @@
 #include <unistd.h>
 #include <sys/ioctl.h>
 
-#include <sound/asound.h>
-
 struct _ALSACtlCardPrivate {
     int fd;
     char *devnode;
@@ -116,3 +114,29 @@ void alsactl_card_open(ALSACtlCard *self, guint card_id, GError **error)
 
     priv->devnode = devnode;
 }
+
+/**
+ * alsactl_card_get_info:
+ * @self: A #ALSACtlCard.
+ * @card_info: (out): A #ALSACtlCardInfo for the sound card.
+ * @error: A #GError.
+ *
+ * Get the information of sound card.
+ */
+void alsactl_card_get_info(ALSACtlCard *self, ALSACtlCardInfo **card_info,
+                           GError **error)
+{
+    ALSACtlCardPrivate *priv;
+    struct snd_ctl_card_info *info;
+
+    g_return_if_fail(ALSACTL_IS_CARD(self));
+    priv = alsactl_card_get_instance_private(self);
+
+    *card_info = g_object_new(ALSACTL_TYPE_CARD_INFO, NULL);
+
+    ctl_card_info_refer_private(*card_info, &info);
+    if (ioctl(priv->fd, SNDRV_CTL_IOCTL_CARD_INFO, info) < 0) {
+        generate_error(error, errno);
+        g_object_unref(*card_info);
+    }
+}
index 9df24c37d4c16d2944d3faf941ae0cb768f74ca2..0ead57e9a1f67792a9d9150d759f4c476b3cb7b5 100644 (file)
@@ -5,6 +5,8 @@
 #include <glib.h>
 #include <glib-object.h>
 
+#include <ctl/card-info.h>
+
 G_BEGIN_DECLS
 
 #define ALSACTL_TYPE_CARD   (alsactl_card_get_type())
@@ -49,6 +51,9 @@ ALSACtlCard *alsactl_card_new();
 
 void alsactl_card_open(ALSACtlCard *self, guint card_id, GError **error);
 
+void alsactl_card_get_info(ALSACtlCard *self, ALSACtlCardInfo **card_info,
+                           GError **error);
+
 G_END_DECLS
 
 #endif
index 4a61640739b684b995b48f8e8127559b6ca969e0..69aeb2bffec2a5a880bcbbd1a3a90c3c8437bb67 100644 (file)
@@ -7,6 +7,10 @@
 #include <glib.h>
 #include <glib-object.h>
 
+#include "card-info.h"
+
+#include <sound/asound.h>
+
 G_BEGIN_DECLS
 
 GQuark alsactl_error_quark(void);
@@ -15,6 +19,9 @@ GQuark alsactl_error_quark(void);
     g_set_error(err, alsactl_error_quark(), errno,      \
                 __FILE__ ":%d: %s", __LINE__, strerror(errno))
 
+void ctl_card_info_refer_private(ALSACtlCardInfo *self,
+                                 struct snd_ctl_card_info **info);
+
 G_END_DECLS
 
 #endif
index 81802ceb995438d0f5d0ee19707dded0e6adcaa5..05127ee8db7f3a0420f5b1bbd0765a6542a6e44d 100644 (file)
@@ -16,6 +16,7 @@ props = (
 methods = (
     'new',
     'open',
+    'get_info',
 )
 signals = ()