From: Takashi Sakamoto Date: Wed, 1 Apr 2020 09:13:28 +0000 (+0900) Subject: seq: client_pool: add properties X-Git-Tag: v0.1.0~288 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=2cb4e8dfccabe31585f7935fdf788332492df072;p=alsa-gobject.git seq: client_pool: add properties Signed-off-by: Takashi Sakamoto --- diff --git a/src/seq/client-pool.c b/src/seq/client-pool.c index ba85eff..3245b96 100644 --- a/src/seq/client-pool.c +++ b/src/seq/client-pool.c @@ -1,11 +1,139 @@ // SPDX-License-Identifier: LGPL-3.0-or-later #include "client-pool.h" -G_DEFINE_TYPE(ALSASeqClientPool, alsaseq_client_pool, G_TYPE_OBJECT) +#include + +struct _ALSASeqClientPoolPrivate { + struct snd_seq_client_pool pool; +}; +G_DEFINE_TYPE_WITH_PRIVATE(ALSASeqClientPool, alsaseq_client_pool, G_TYPE_OBJECT) + +enum seq_client_pool_prop_type { + SEQ_CLIENT_POOL_PROP_CLIENT_ID = 1, + SEQ_CLIENT_POOL_PROP_OUTPUT_POOL, + SEQ_CLIENT_POOL_PROP_INPUT_POOL, + SEQ_CLIENT_POOL_PROP_OUTPUT_ROOM, + SEQ_CLIENT_POOL_PROP_OUTPUT_FREE, + SEQ_CLIENT_POOL_PROP_INPUT_FREE, + SEQ_CLIENT_POOL_PROP_COUNT, +}; +static GParamSpec *seq_client_pool_props[SEQ_CLIENT_POOL_PROP_COUNT] = { NULL, }; + +static void seq_client_pool_set_property(GObject *obj, guint id, + const GValue *val, GParamSpec *spec) +{ + ALSASeqClientPool *self = ALSASEQ_CLIENT_POOL(obj); + ALSASeqClientPoolPrivate *priv = + alsaseq_client_pool_get_instance_private(self); + + switch (id) { + case SEQ_CLIENT_POOL_PROP_OUTPUT_POOL: + priv->pool.output_pool = g_value_get_int(val); + break; + case SEQ_CLIENT_POOL_PROP_INPUT_POOL: + priv->pool.input_pool = g_value_get_int(val); + break; + case SEQ_CLIENT_POOL_PROP_OUTPUT_ROOM: + priv->pool.output_room = g_value_get_int(val); + break; + case SEQ_CLIENT_POOL_PROP_OUTPUT_FREE: + priv->pool.output_free = g_value_get_int(val); + break; + case SEQ_CLIENT_POOL_PROP_INPUT_FREE: + priv->pool.input_free = g_value_get_int(val); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, id, spec); + break; + } +} + +static void seq_client_pool_get_property(GObject *obj, guint id, GValue *val, + GParamSpec *spec) +{ + ALSASeqClientPool *self = ALSASEQ_CLIENT_POOL(obj); + ALSASeqClientPoolPrivate *priv = + alsaseq_client_pool_get_instance_private(self); + + switch (id) { + case SEQ_CLIENT_POOL_PROP_CLIENT_ID: + g_value_set_int(val, priv->pool.client); + break; + case SEQ_CLIENT_POOL_PROP_OUTPUT_POOL: + g_value_set_int(val, priv->pool.output_pool); + break; + case SEQ_CLIENT_POOL_PROP_INPUT_POOL: + g_value_set_int(val, priv->pool.input_pool); + break; + case SEQ_CLIENT_POOL_PROP_OUTPUT_ROOM: + g_value_set_int(val, priv->pool.output_room); + break; + case SEQ_CLIENT_POOL_PROP_OUTPUT_FREE: + g_value_set_int(val, priv->pool.output_free); + break; + case SEQ_CLIENT_POOL_PROP_INPUT_FREE: + g_value_set_int(val, priv->pool.input_free); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, id, spec); + break; + } +} static void alsaseq_client_pool_class_init(ALSASeqClientPoolClass *klass) { - return; + GObjectClass *gobject_class = G_OBJECT_CLASS(klass); + + gobject_class->set_property = seq_client_pool_set_property; + gobject_class->get_property = seq_client_pool_get_property; + + seq_client_pool_props[SEQ_CLIENT_POOL_PROP_CLIENT_ID] = + g_param_spec_int("client-id", "client-id", + "The numerical ID of client. One of " + "ALSASeqSpecificClientId is available as well as " + "any numerical value.", + 0, G_MAXINT, + 0, + G_PARAM_READABLE); + + seq_client_pool_props[SEQ_CLIENT_POOL_PROP_OUTPUT_POOL] = + g_param_spec_int("output-pool", "output-pool", + "The total size of memory pool in output direction.", + 0, G_MAXINT, + 0, + G_PARAM_READWRITE); + + seq_client_pool_props[SEQ_CLIENT_POOL_PROP_INPUT_POOL] = + g_param_spec_int("input-pool", "input-pool", + "The total size of memory pool in input direction.", + 0, G_MAXINT, + 0, + G_PARAM_READWRITE); + + seq_client_pool_props[SEQ_CLIENT_POOL_PROP_OUTPUT_ROOM] = + g_param_spec_int("output-room", "output-room", + "The size of memory pool for blocking operation.", + 0, G_MAXINT, + 0, + G_PARAM_READWRITE); + + seq_client_pool_props[SEQ_CLIENT_POOL_PROP_OUTPUT_FREE] = + g_param_spec_int("output-free", "output-free", + "The free size of memory pool in output direction.", + 0, G_MAXINT, + 0, + G_PARAM_READWRITE); + + seq_client_pool_props[SEQ_CLIENT_POOL_PROP_INPUT_FREE] = + g_param_spec_int("input-free", "input-free", + "The free size of memory pool in input direction.", + 0, G_MAXINT, + 0, + G_PARAM_READWRITE); + + g_object_class_install_properties(gobject_class, + SEQ_CLIENT_POOL_PROP_COUNT, + seq_client_pool_props); } static void alsaseq_client_pool_init(ALSASeqClientPool *self) diff --git a/src/seq/client-pool.h b/src/seq/client-pool.h index 7437565..0048732 100644 --- a/src/seq/client-pool.h +++ b/src/seq/client-pool.h @@ -31,9 +31,12 @@ G_BEGIN_DECLS typedef struct _ALSASeqClientPool ALSASeqClientPool; typedef struct _ALSASeqClientPoolClass ALSASeqClientPoolClass; +typedef struct _ALSASeqClientPoolPrivate ALSASeqClientPoolPrivate; struct _ALSASeqClientPool { GObject parent_instance; + + ALSASeqClientPoolPrivate *priv; }; struct _ALSASeqClientPoolClass { diff --git a/tests/alsaseq-client-pool b/tests/alsaseq-client-pool index 6a494ab..cbd5744 100644 --- a/tests/alsaseq-client-pool +++ b/tests/alsaseq-client-pool @@ -10,7 +10,14 @@ gi.require_version('ALSASeq', '0.0') from gi.repository import ALSASeq target = ALSASeq.ClientPool() -props = () +props = ( + 'client-id', + 'output-pool', + 'input-pool', + 'output-room', + 'output-free', + 'input-free', +) methods = () signals = ()