]> git.alsa-project.org Git - alsa-gobject.git/commitdiff
hwdep: device_info: add properties
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Wed, 27 Nov 2019 06:59:11 +0000 (15:59 +0900)
committer坂本 貴史 <o-takashi@sakamocchi.jp>
Wed, 8 Apr 2020 01:40:25 +0000 (10:40 +0900)
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
src/hwdep/device-info.c
src/hwdep/device-info.h
tests/alsahwdep-device-info

index a79513a2b1371509250fb99cd4c1b9d7e2c68314..409c0e578491f78662962b6573ceae390921eff6 100644 (file)
@@ -1,11 +1,95 @@
 // SPDX-License-Identifier: LGPL-3.0-or-later
 #include "device-info.h"
 
-G_DEFINE_TYPE(ALSAHwdepDeviceInfo, alsahwdep_device_info, G_TYPE_OBJECT)
+#include <sound/asound.h>
+
+struct _ALSAHwdepDeviceInfoPrivate {
+    struct snd_hwdep_info info;
+};
+G_DEFINE_TYPE_WITH_PRIVATE(ALSAHwdepDeviceInfo, alsahwdep_device_info, G_TYPE_OBJECT)
+
+enum hwdep_device_info_prop_type {
+    HWDEP_DEVICE_INFO_PROP_DEVICE_ID = 1,
+    HWDEP_DEVICE_INFO_PROP_CARD_ID,
+    HWDEP_DEVICE_INFO_PROP_ID,
+    HWDEP_DEVICE_INFO_PROP_NAME,
+    HWDEP_DEVICE_INFO_PROP_IFACE,
+    HWDEP_DEVICE_INFO_PROP_COUNT,
+};
+static GParamSpec *hwdep_device_info_props[HWDEP_DEVICE_INFO_PROP_COUNT] = { NULL, };
+
+static void hwdep_device_info_get_property(GObject *obj, guint id, GValue *val,
+                                           GParamSpec *spec)
+{
+    ALSAHwdepDeviceInfo *self = ALSAHWDEP_DEVICE_INFO(obj);
+    ALSAHwdepDeviceInfoPrivate *priv =
+                            alsahwdep_device_info_get_instance_private(self);
+
+    switch (id) {
+    case HWDEP_DEVICE_INFO_PROP_DEVICE_ID:
+        priv->info.device = g_value_get_uint(val);
+        break;
+    case HWDEP_DEVICE_INFO_PROP_CARD_ID:
+        priv->info.card = g_value_get_int(val);
+        break;
+    case HWDEP_DEVICE_INFO_PROP_ID:
+        strncpy((char *)priv->info.id, g_value_get_string(val), sizeof(priv->info.id));
+        break;
+    case HWDEP_DEVICE_INFO_PROP_NAME:
+        strncpy((char *)priv->info.name, g_value_get_string(val), sizeof(priv->info.name));
+        break;
+    case HWDEP_DEVICE_INFO_PROP_IFACE:
+        priv->info.iface = (int)g_value_get_enum(val);
+        break;
+    default:
+        G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, id, spec);
+        break;
+    }
+}
 
 static void alsahwdep_device_info_class_init(ALSAHwdepDeviceInfoClass *klass)
 {
-    return;
+    GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
+
+    gobject_class->get_property = hwdep_device_info_get_property;
+
+    hwdep_device_info_props[HWDEP_DEVICE_INFO_PROP_DEVICE_ID] =
+        g_param_spec_uint("device-id", "device-id",
+                          "The numerical ID of device.",
+                          0, G_MAXUINT,
+                          0,
+                          G_PARAM_READABLE);
+
+    hwdep_device_info_props[HWDEP_DEVICE_INFO_PROP_CARD_ID] =
+        g_param_spec_int("card-id", "card-id",
+                         "The numerical ID of sound card.",
+                         G_MININT, G_MAXINT,
+                         0,
+                         G_PARAM_READABLE);
+
+    hwdep_device_info_props[HWDEP_DEVICE_INFO_PROP_ID] =
+        g_param_spec_string("id", "id",
+                            "The ID string of the hwdep device",
+                            "",
+                            G_PARAM_READABLE);
+
+    hwdep_device_info_props[HWDEP_DEVICE_INFO_PROP_NAME] =
+        g_param_spec_string("name", "name",
+                            "The name of the hwdep device",
+                            "",
+                            G_PARAM_READABLE);
+
+    hwdep_device_info_props[HWDEP_DEVICE_INFO_PROP_IFACE] =
+        g_param_spec_enum("iface", "iface",
+                          "The type of interface for the hwdep device, one of "
+                          "ALSAHwdepIfaceType.",
+                          ALSAHWDEP_TYPE_IFACE_TYPE,
+                          SNDRV_HWDEP_IFACE_OPL2,
+                          G_PARAM_READABLE);
+
+    g_object_class_install_properties(gobject_class,
+                                      HWDEP_DEVICE_INFO_PROP_COUNT,
+                                      hwdep_device_info_props);
 }
 
 static void alsahwdep_device_info_init(ALSAHwdepDeviceInfo *self)
index 45b48303d31be12479bdf4744003eb1b0f666ce7..faee53f59efca0e61877e41aca0f35b96893e5d3 100644 (file)
@@ -5,6 +5,8 @@
 #include <glib.h>
 #include <glib-object.h>
 
+#include <hwdep/alsahwdep-enums.h>
+
 G_BEGIN_DECLS
 
 #define ALSAHWDEP_TYPE_DEVICE_INFO      (alsahwdep_device_info_get_type())
@@ -31,9 +33,12 @@ G_BEGIN_DECLS
 
 typedef struct _ALSAHwdepDeviceInfo         ALSAHwdepDeviceInfo;
 typedef struct _ALSAHwdepDeviceInfoClass    ALSAHwdepDeviceInfoClass;
+typedef struct _ALSAHwdepDeviceInfoPrivate  ALSAHwdepDeviceInfoPrivate;
 
 struct _ALSAHwdepDeviceInfo {
     GObject parent_instance;
+
+    ALSAHwdepDeviceInfoPrivate *priv;
 };
 
 struct _ALSAHwdepDeviceInfoClass {
index 74cf01bded74922b894534e54b00f0186bedb37f..d1eff794b91c1878aecec6fbef01f8c82f6fd023 100644 (file)
@@ -10,7 +10,13 @@ gi.require_version('ALSAHwdep', '0.0')
 from gi.repository import ALSAHwdep
 
 target = ALSAHwdep.DeviceInfo()
-props = ()
+props = (
+    'device-id',
+    'card-id',
+    'id',
+    'name',
+    'iface',
+)
 methods = ()
 signals = ()