]> git.alsa-project.org Git - alsa-gobject.git/commitdiff
ctl: card_info: add properties
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/card-info.c
src/ctl/card-info.h
tests/alsactl-card-info

index d5f9ac0d64425974beb785ef5d84588cc2678611..da7eca4c8c339e8db7c5e21b1c3cc96a272b98f4 100644 (file)
 // SPDX-License-Identifier: LGPL-3.0-or-later
 #include "card-info.h"
 
-G_DEFINE_TYPE(ALSACtlCardInfo, alsactl_card_info, G_TYPE_OBJECT)
+#include <sound/asound.h>
+
+struct _ALSACtlCardInfoPrivate {
+    struct snd_ctl_card_info info;
+};
+G_DEFINE_TYPE_WITH_PRIVATE(ALSACtlCardInfo, alsactl_card_info, G_TYPE_OBJECT)
+
+enum ctl_card_info_prop_type {
+    CTL_CARD_INFO_PROP_CARD_ID = 1,
+    CTL_CARD_INFO_PROP_ID,
+    CTL_CARD_INFO_PROP_DRIVER,
+    CTL_CARD_INFO_PROP_NAME,
+    CTL_CARD_INFO_PROP_LONG_NAME,
+    CTL_CARD_INFO_PROP_MIXER_NAME,
+    CTL_CARD_INFO_PROP_COMPONENTS,
+    CTL_CARD_INFO_PROP_COUNT,
+};
+static GParamSpec *ctl_card_info_props[CTL_CARD_INFO_PROP_COUNT] = { NULL, };
+
+static void ctl_card_info_get_property(GObject *obj, guint id, GValue *val,
+                                       GParamSpec *spec)
+{
+    ALSACtlCardInfo *self = ALSACTL_CARD_INFO(obj);
+    ALSACtlCardInfoPrivate *priv = alsactl_card_info_get_instance_private(self);
+
+    switch (id) {
+    case CTL_CARD_INFO_PROP_CARD_ID:
+        g_value_set_int(val, priv->info.card);
+        break;
+    case CTL_CARD_INFO_PROP_ID:
+        g_value_set_static_string(val, (gchar *)priv->info.id);
+        break;
+    case CTL_CARD_INFO_PROP_DRIVER:
+        g_value_set_static_string(val, (gchar *)priv->info.driver);
+        break;
+    case CTL_CARD_INFO_PROP_NAME:
+        g_value_set_static_string(val, (gchar *)priv->info.name);
+        break;
+    case CTL_CARD_INFO_PROP_LONG_NAME:
+        g_value_set_static_string(val, (gchar *)priv->info.longname);
+        break;
+    case CTL_CARD_INFO_PROP_MIXER_NAME:
+        g_value_set_static_string(val, (gchar *)priv->info.mixername);
+        break;
+    case CTL_CARD_INFO_PROP_COMPONENTS:
+        g_value_set_static_string(val, (gchar *)priv->info.components);
+        break;
+    default:
+        G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, id, spec);
+        break;
+    }
+}
 
 static void alsactl_card_info_class_init(ALSACtlCardInfoClass *klass)
 {
-    return;
+    GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
+
+    gobject_class->get_property = ctl_card_info_get_property;
+
+    ctl_card_info_props[CTL_CARD_INFO_PROP_CARD_ID] =
+        g_param_spec_int("card-id", "card-id",
+                         "The numerical ID of sound card.",
+                         G_MININT, G_MAXINT,
+                         -1,
+                         G_PARAM_READABLE);
+
+    ctl_card_info_props[CTL_CARD_INFO_PROP_ID] =
+        g_param_spec_string("id", "id",
+                            "The string ID of sound card.",
+                            "",
+                            G_PARAM_READABLE);
+
+    ctl_card_info_props[CTL_CARD_INFO_PROP_DRIVER] =
+        g_param_spec_string("driver", "driver",
+                            "The name of driver bound to the sound card.",
+                            "",
+                            G_PARAM_READABLE);
+
+    ctl_card_info_props[CTL_CARD_INFO_PROP_NAME] =
+        g_param_spec_string("name", "name",
+                            "The name of sound card.",
+                            "",
+                            G_PARAM_READABLE);
+
+    ctl_card_info_props[CTL_CARD_INFO_PROP_LONG_NAME] =
+        g_param_spec_string("long-name", "long-name",
+                            "The long name of sound card.",
+                            "",
+                            G_PARAM_READABLE);
+
+    ctl_card_info_props[CTL_CARD_INFO_PROP_MIXER_NAME] =
+        g_param_spec_string("mixer-name", "mixer-name",
+                            "The name of mixer for the sound card.",
+                            "",
+                            G_PARAM_READABLE);
+
+    ctl_card_info_props[CTL_CARD_INFO_PROP_COMPONENTS] =
+        g_param_spec_string("components", "components",
+                            "The The string with space-separated components "
+                            "for the sound card.",
+                            "",
+                            G_PARAM_READABLE);
+
+    g_object_class_install_properties(gobject_class, CTL_CARD_INFO_PROP_COUNT,
+                                      ctl_card_info_props);
 }
 
 static void alsactl_card_info_init(ALSACtlCardInfo *self)
index dfb43f77abe6308469c0731d83c1caf9eba1f625..4bd800ecedcf700a9d9eb2f6c0933ecb4680b29d 100644 (file)
@@ -31,9 +31,12 @@ G_BEGIN_DECLS
 
 typedef struct _ALSACtlCardInfo         ALSACtlCardInfo;
 typedef struct _ALSACtlCardInfoClass    ALSACtlCardInfoClass;
+typedef struct _ALSACtlCardInfoPrivate  ALSACtlCardInfoPrivate;
 
 struct _ALSACtlCardInfo {
     GObject parent_instance;
+
+    ALSACtlCardInfo *priv;
 };
 
 struct _ALSACtlCardInfoClass {
index f05d3f472ad4df51a051aeca6712ea6636d702b4..2961b979cea1f91ea7f0aeb2f4f1e2cd7893a077 100644 (file)
@@ -10,7 +10,15 @@ gi.require_version('ALSACtl', '0.0')
 from gi.repository import ALSACtl
 
 target = ALSACtl.CardInfo()
-props = ()
+props = (
+    'card-id',
+    'id',
+    'driver',
+    'name',
+    'long-name',
+    'mixer-name',
+    'components',
+)
 methods = ()
 signals = ()