From e249fc57fad7660279ee9350cf5a10fa92cc9ad6 Mon Sep 17 00:00:00 2001 From: Takashi Sakamoto Date: Wed, 27 Nov 2019 15:59:11 +0900 Subject: [PATCH] hwdep: device_info: add properties Signed-off-by: Takashi Sakamoto --- src/hwdep/device-info.c | 88 ++++++++++++++++++++++++++++++++++++- src/hwdep/device-info.h | 5 +++ tests/alsahwdep-device-info | 8 +++- 3 files changed, 98 insertions(+), 3 deletions(-) diff --git a/src/hwdep/device-info.c b/src/hwdep/device-info.c index a79513a..409c0e5 100644 --- a/src/hwdep/device-info.c +++ b/src/hwdep/device-info.c @@ -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 + +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) diff --git a/src/hwdep/device-info.h b/src/hwdep/device-info.h index 45b4830..faee53f 100644 --- a/src/hwdep/device-info.h +++ b/src/hwdep/device-info.h @@ -5,6 +5,8 @@ #include #include +#include + 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 { diff --git a/tests/alsahwdep-device-info b/tests/alsahwdep-device-info index 74cf01b..d1eff79 100644 --- a/tests/alsahwdep-device-info +++ b/tests/alsahwdep-device-info @@ -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 = () -- 2.47.3