From: Takashi Sakamoto Date: Sun, 9 Feb 2020 03:20:53 +0000 (+0900) Subject: timer: device_info: add properties X-Git-Tag: v0.1.0~358 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=666f850f58853f284be2de645d6943f0d70208bd;p=alsa-gobject.git timer: device_info: add properties Signed-off-by: Takashi Sakamoto --- diff --git a/src/timer/device-info.c b/src/timer/device-info.c index 0f98404..ba4e149 100644 --- a/src/timer/device-info.c +++ b/src/timer/device-info.c @@ -3,10 +3,125 @@ #include -G_DEFINE_TYPE(ALSATimerDeviceInfo, alsatimer_device_info, G_TYPE_OBJECT) +struct _ALSATimerDeviceInfoPrivate { + struct snd_timer_ginfo info; +}; +G_DEFINE_TYPE_WITH_PRIVATE(ALSATimerDeviceInfo, alsatimer_device_info, G_TYPE_OBJECT) + +enum timer_device_info_prop_type { + TIMER_DEVICE_INFO_PROP_FLAGS = 1, + TIMER_DEVICE_INFO_PROP_CARD_ID, + TIMER_DEVICE_INFO_PROP_ID, + TIMER_DEVICE_INFO_PROP_NAME, + TIMER_DEVICE_INFO_PROP_RESOLUTION, + TIMER_DEVICE_INFO_PROP_RESOLUTION_MIN, + TIMER_DEVICE_INFO_PROP_RESOLUTION_MAX, + TIMER_DEVICE_INFO_PROP_INSTANCE_COUNT, + TIMER_DEVICE_INFO_PROP_COUNT, +}; +static GParamSpec *timer_device_info_props[TIMER_DEVICE_INFO_PROP_COUNT] = { NULL, }; + +static void timer_device_info_get_property(GObject *obj, guint id, GValue *val, + GParamSpec *spec) +{ + ALSATimerDeviceInfo *self = ALSATIMER_DEVICE_INFO(obj); + ALSATimerDeviceInfoPrivate *priv = + alsatimer_device_info_get_instance_private(self); + + switch (id) { + case TIMER_DEVICE_INFO_PROP_FLAGS: + g_value_set_flags(val, (ALSATimerDeviceInfoFlag)priv->info.flags); + break; + case TIMER_DEVICE_INFO_PROP_CARD_ID: + g_value_set_int(val, priv->info.card); + break; + case TIMER_DEVICE_INFO_PROP_ID: + g_value_set_static_string(val, (const gchar *)priv->info.id); + break; + case TIMER_DEVICE_INFO_PROP_NAME: + g_value_set_static_string(val, (const gchar *)priv->info.name); + break; + case TIMER_DEVICE_INFO_PROP_RESOLUTION: + g_value_set_uint64(val, priv->info.resolution); + break; + case TIMER_DEVICE_INFO_PROP_RESOLUTION_MIN: + g_value_set_uint64(val, priv->info.resolution_min); + break; + case TIMER_DEVICE_INFO_PROP_RESOLUTION_MAX: + g_value_set_uint64(val, priv->info.resolution_max); + break; + case TIMER_DEVICE_INFO_PROP_INSTANCE_COUNT: + g_value_set_uint(val, priv->info.clients); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, id, spec); + break; + } +} static void alsatimer_device_info_class_init(ALSATimerDeviceInfoClass *klass) { + GObjectClass *gobject_class = G_OBJECT_CLASS(klass); + + gobject_class->get_property = timer_device_info_get_property; + + timer_device_info_props[TIMER_DEVICE_INFO_PROP_FLAGS] = + g_param_spec_flags("flags", "flags", + "The flags of timer, one of ALSATimerDeviceInfoFlag.", + ALSATIMER_TYPE_DEVICE_INFO_FLAG, + 0, + G_PARAM_READABLE); + + timer_device_info_props[TIMER_DEVICE_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); + + timer_device_info_props[TIMER_DEVICE_INFO_PROP_ID] = + g_param_spec_string("id", "id", + "The string ID of timer.", + "", + G_PARAM_READABLE); + + timer_device_info_props[TIMER_DEVICE_INFO_PROP_NAME] = + g_param_spec_string("name", "name", + "The name of timer.", + "", + G_PARAM_READABLE); + + timer_device_info_props[TIMER_DEVICE_INFO_PROP_RESOLUTION] = + g_param_spec_uint64("resolution", "resolution", + "The resolution in nano seconds.", + 0, G_MAXUINT64, + 0, + G_PARAM_READABLE); + + timer_device_info_props[TIMER_DEVICE_INFO_PROP_RESOLUTION_MIN] = + g_param_spec_uint64("resolution-min", "resolution-min", + "The resolution in nano seconds.", + 0, G_MAXUINT64, + 0, + G_PARAM_READABLE); + + timer_device_info_props[TIMER_DEVICE_INFO_PROP_RESOLUTION_MAX] = + g_param_spec_uint64("resolution-max", "resolution-max", + "The resolution in nano seconds.", + 0, G_MAXUINT64, + 0, + G_PARAM_READABLE); + + timer_device_info_props[TIMER_DEVICE_INFO_PROP_INSTANCE_COUNT] = + g_param_spec_uint("instance-count", "instance-count", + "The number of instances for the timer.", + 0, G_MAXUINT, + 0, + G_PARAM_READABLE); + + g_object_class_install_properties(gobject_class, + TIMER_DEVICE_INFO_PROP_COUNT, + timer_device_info_props); } static void alsatimer_device_info_init(ALSATimerDeviceInfo *self) diff --git a/src/timer/device-info.h b/src/timer/device-info.h index f3de19c..19f3a6d 100644 --- a/src/timer/device-info.h +++ b/src/timer/device-info.h @@ -5,6 +5,8 @@ #include #include +#include + G_BEGIN_DECLS #define ALSATIMER_TYPE_DEVICE_INFO (alsatimer_device_info_get_type()) @@ -31,9 +33,12 @@ G_BEGIN_DECLS typedef struct _ALSATimerDeviceInfo ALSATimerDeviceInfo; typedef struct _ALSATimerDeviceInfoClass ALSATimerDeviceInfoClass; +typedef struct _ALSATimerDeviceInfoPrivate ALSATimerDeviceInfoPrivate; struct _ALSATimerDeviceInfo { GObject parent_instance; + + ALSATimerDeviceInfoPrivate *priv; }; struct _ALSATimerDeviceInfoClass { diff --git a/tests/alsatimer-device-info b/tests/alsatimer-device-info index d76fae1..1032968 100644 --- a/tests/alsatimer-device-info +++ b/tests/alsatimer-device-info @@ -10,7 +10,16 @@ gi.require_version('ALSATimer', '0.0') from gi.repository import ALSATimer target = ALSATimer.DeviceInfo() -props = () +props = ( + 'flags', + 'card-id', + 'id', + 'name', + 'resolution', + 'resolution-min', + 'resolution-max', + 'instance-count', +) methods = () signals = ()