From b14673ffd21727fda22d215e395c354ce7eae505 Mon Sep 17 00:00:00 2001 From: Takashi Sakamoto Date: Wed, 1 Apr 2020 18:13:28 +0900 Subject: [PATCH] seq: system_info: add properties Signed-off-by: Takashi Sakamoto --- src/seq/system-info.c | 101 +++++++++++++++++++++++++++++++++++++- src/seq/system-info.h | 3 ++ tests/alsaseq-system-info | 9 +++- 3 files changed, 110 insertions(+), 3 deletions(-) diff --git a/src/seq/system-info.c b/src/seq/system-info.c index a06ebf4..bdb0458 100644 --- a/src/seq/system-info.c +++ b/src/seq/system-info.c @@ -1,11 +1,108 @@ // SPDX-License-Identifier: LGPL-3.0-or-later #include "system-info.h" -G_DEFINE_TYPE(ALSASeqSystemInfo, alsaseq_system_info, G_TYPE_OBJECT) +#include + +struct _ALSASeqSystemInfoPrivate { + struct snd_seq_system_info info; +}; +G_DEFINE_TYPE_WITH_PRIVATE(ALSASeqSystemInfo, alsaseq_system_info, G_TYPE_OBJECT) + +enum seq_system_info_prop_type { + SEQ_SYSTEM_INFO_PROP_MAXIMUM_QUEUE_COUNT = 1, + SEQ_SYSTEM_INFO_PROP_MAXIMUM_CLIENT_COUNT, + SEQ_SYSTEM_INFO_PROP_MAXIMUM_PORT_COUNT, + SEQ_SYSTEM_INFO_PROP_MAXIMUM_CHANNEL_COUNT, + SEQ_SYSTEM_INFO_PROP_CURRENT_CLIENT_COUNT, + SEQ_SYSTEM_INFO_PROP_CURRENT_QUEUE_COUNT, + SEQ_SYSTEM_INFO_PROP_COUNT, +}; +static GParamSpec *seq_system_info_props[SEQ_SYSTEM_INFO_PROP_COUNT] = { NULL, }; + +static void seq_system_info_get_property(GObject *obj, guint id, GValue *val, + GParamSpec *spec) +{ + ALSASeqSystemInfo *self = ALSASEQ_SYSTEM_INFO(obj); + ALSASeqSystemInfoPrivate *priv = + alsaseq_system_info_get_instance_private(self); + + switch (id) { + case SEQ_SYSTEM_INFO_PROP_MAXIMUM_QUEUE_COUNT: + g_value_set_int(val, priv->info.queues); + break; + case SEQ_SYSTEM_INFO_PROP_MAXIMUM_CLIENT_COUNT: + g_value_set_int(val, priv->info.clients); + break; + case SEQ_SYSTEM_INFO_PROP_MAXIMUM_PORT_COUNT: + g_value_set_int(val, priv->info.ports); + break; + case SEQ_SYSTEM_INFO_PROP_MAXIMUM_CHANNEL_COUNT: + g_value_set_int(val, priv->info.channels); + break; + case SEQ_SYSTEM_INFO_PROP_CURRENT_CLIENT_COUNT: + g_value_set_int(val, priv->info.cur_clients); + break; + case SEQ_SYSTEM_INFO_PROP_CURRENT_QUEUE_COUNT: + g_value_set_int(val, priv->info.cur_queues); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, id, spec); + break; + } +} static void alsaseq_system_info_class_init(ALSASeqSystemInfoClass *klass) { - return; + GObjectClass *gobject_class = G_OBJECT_CLASS(klass); + + gobject_class->get_property = seq_system_info_get_property; + + seq_system_info_props[SEQ_SYSTEM_INFO_PROP_MAXIMUM_QUEUE_COUNT] = + g_param_spec_int("maximum-queue-count", "maximum-queue-count", + "The maximum number of available queues.", + 0, G_MAXINT, + 0, + G_PARAM_READABLE); + + seq_system_info_props[SEQ_SYSTEM_INFO_PROP_MAXIMUM_CLIENT_COUNT] = + g_param_spec_int("maximum-client-count", "maximum-client-count", + "The maximum number of clients.", + 0, G_MAXINT, + 0, + G_PARAM_READABLE); + + seq_system_info_props[SEQ_SYSTEM_INFO_PROP_MAXIMUM_PORT_COUNT] = + g_param_spec_int("maximum-port-count", "maximum-port-count", + "The maximum number of ports.", + 0, G_MAXINT, + 0, + G_PARAM_READABLE); + + seq_system_info_props[SEQ_SYSTEM_INFO_PROP_MAXIMUM_CHANNEL_COUNT] = + g_param_spec_int("maximum-channel-count", "maximum-channel-count", + "The maximum number of channels.", + 0, G_MAXINT, + 0, + G_PARAM_READABLE); + + seq_system_info_props[SEQ_SYSTEM_INFO_PROP_CURRENT_CLIENT_COUNT] = + g_param_spec_int("current-client-count", "current-client-count", + "The current number of clients.", + 0, G_MAXINT, + 0, + G_PARAM_READABLE); + + seq_system_info_props[SEQ_SYSTEM_INFO_PROP_CURRENT_QUEUE_COUNT] = + g_param_spec_int("current-queue-count", "current-queue-count", + "The current number of queues.", + 0, G_MAXINT, + 0, + G_PARAM_READABLE); + + g_object_class_install_properties(gobject_class, + SEQ_SYSTEM_INFO_PROP_COUNT, + seq_system_info_props); + } static void alsaseq_system_info_init(ALSASeqSystemInfo *self) diff --git a/src/seq/system-info.h b/src/seq/system-info.h index 4859170..ac190e5 100644 --- a/src/seq/system-info.h +++ b/src/seq/system-info.h @@ -31,9 +31,12 @@ G_BEGIN_DECLS typedef struct _ALSASeqSystemInfo ALSASeqSystemInfo; typedef struct _ALSASeqSystemInfoClass ALSASeqSystemInfoClass; +typedef struct _ALSASeqSystemInfoPrivate ALSASeqSystemInfoPrivate; struct _ALSASeqSystemInfo { GObject parent_instance; + + ALSASeqSystemInfoPrivate *priv; }; struct _ALSASeqSystemInfoClass { diff --git a/tests/alsaseq-system-info b/tests/alsaseq-system-info index 91a058c..22e5909 100644 --- a/tests/alsaseq-system-info +++ b/tests/alsaseq-system-info @@ -10,7 +10,14 @@ gi.require_version('ALSASeq', '0.0') from gi.repository import ALSASeq target = ALSASeq.SystemInfo() -props = () +props = ( + 'maximum-queue-count', + 'maximum-client-count', + 'maximum-port-count', + 'maximum-channel-count', + 'current-client-count', + 'current-queue-count', +) methods = () signals = () -- 2.47.3