]> git.alsa-project.org Git - alsa-gobject.git/commitdiff
seq: client_pool: add properties
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Wed, 1 Apr 2020 09:13:28 +0000 (18:13 +0900)
committer坂本 貴史 <o-takashi@sakamocchi.jp>
Fri, 3 Apr 2020 13:06:25 +0000 (22:06 +0900)
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
src/seq/client-pool.c
src/seq/client-pool.h
tests/alsaseq-client-pool

index ba85eff1a76d964457dab113813e47972e0af8ed..3245b96c9be03a671a4d28c44e2e52329516f0fc 100644 (file)
 // SPDX-License-Identifier: LGPL-3.0-or-later
 #include "client-pool.h"
 
-G_DEFINE_TYPE(ALSASeqClientPool, alsaseq_client_pool, G_TYPE_OBJECT)
+#include <sound/asequencer.h>
+
+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)
index 7437565cb6bed80a26afbc697568513b7640720f..0048732f1c4cf0ce7404649ee819181fca7709b0 100644 (file)
@@ -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 {
index 6a494abf92ed3eb26ddea44409e823a2c757adf1..cbd5744407012992b96830b0624e3f2d0c2cf43e 100644 (file)
@@ -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 = ()