]> git.alsa-project.org Git - alsa-gobject.git/commitdiff
seq: subscribe_data: 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/alsaseq.map
src/seq/subscribe-data.c
src/seq/subscribe-data.h
tests/alsaseq-subscribe-data

index d7c03f3a499aaa21663de21232321b27d37c6619..230c640ec68ec7fc328b66ae8ae3e44e04aed744 100644 (file)
@@ -122,6 +122,7 @@ ALSA_GOBJECT_0_0_0 {
     "alsaseq_event_data_connect_set_dst";
 
     "alsaseq_subscribe_data_get_type";
+    "alsaseq_subscribe_data_new";
   local:
     *;
 };
index d46a8d2b1dcb05181bdbc85d39c5249af1d93f20..2b8746ab6f9a795bd23b327ab171d5e7c780b909 100644 (file)
 // SPDX-License-Identifier: LGPL-3.0-or-later
 #include "subscribe-data.h"
 
-G_DEFINE_TYPE(ALSASeqSubscribeData, alsaseq_subscribe_data, G_TYPE_OBJECT)
+#include <sound/asequencer.h>
+
+struct _ALSASeqSubscribeDataPrivate {
+    struct snd_seq_port_subscribe data;
+};
+G_DEFINE_TYPE_WITH_PRIVATE(ALSASeqSubscribeData, alsaseq_subscribe_data, G_TYPE_OBJECT)
+
+enum seq_subscribe_data_prop_type {
+    SEQ_SUBSCRIBE_DATA_PROP_SENDER = 1,
+    SEQ_SUBSCRIBE_DATA_PROP_DEST,
+    SEQ_SUBSCRIBE_DATA_PROP_FLAG,
+    SEQ_SUBSCRIBE_DATA_PROP_QUEUE_ID,
+    SEQ_SUBSCRIBE_DATA_PROP_COUNT,
+};
+static GParamSpec *seq_subscribe_data_props[SEQ_SUBSCRIBE_DATA_PROP_COUNT] = { NULL, };
+
+static void seq_subscribe_data_set_property(GObject *obj, guint id,
+                                            const GValue *val, GParamSpec *spec)
+{
+    ALSASeqSubscribeData *self = ALSASEQ_SUBSCRIBE_DATA(obj);
+    ALSASeqSubscribeDataPrivate *priv =
+                            alsaseq_subscribe_data_get_instance_private(self);
+
+    switch (id) {
+    case SEQ_SUBSCRIBE_DATA_PROP_SENDER:
+    {
+        ALSASeqAddr *addr = g_value_get_boxed(val);
+        priv->data.sender = *addr;
+        break;
+    }
+    case SEQ_SUBSCRIBE_DATA_PROP_DEST:
+    {
+        ALSASeqAddr *addr = g_value_get_boxed(val);
+        priv->data.dest = *addr;
+        break;
+    }
+    case SEQ_SUBSCRIBE_DATA_PROP_FLAG:
+        priv->data.flags = (unsigned int)g_value_get_flags(val);
+        break;
+    case SEQ_SUBSCRIBE_DATA_PROP_QUEUE_ID:
+        priv->data.queue = g_value_get_uchar(val);
+        break;
+    default:
+        G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, id, spec);
+        break;
+    }
+}
+
+static void seq_subscribe_data_get_property(GObject *obj, guint id, GValue *val,
+                                            GParamSpec *spec)
+{
+    ALSASeqSubscribeData *self = ALSASEQ_SUBSCRIBE_DATA(obj);
+    ALSASeqSubscribeDataPrivate *priv =
+                            alsaseq_subscribe_data_get_instance_private(self);
+
+    switch (id) {
+    case SEQ_SUBSCRIBE_DATA_PROP_SENDER:
+        g_value_set_static_boxed(val, &priv->data.sender);
+        break;
+    case SEQ_SUBSCRIBE_DATA_PROP_DEST:
+        g_value_set_static_boxed(val, &priv->data.dest);
+        break;
+    case SEQ_SUBSCRIBE_DATA_PROP_FLAG:
+        g_value_set_flags(val, (ALSASeqPortSubscribeFlag)priv->data.flags);
+        break;
+    case SEQ_SUBSCRIBE_DATA_PROP_QUEUE_ID:
+        g_value_set_uchar(val, priv->data.queue);
+        break;
+    default:
+        G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, id, spec);
+        break;
+    }
+}
 
 static void alsaseq_subscribe_data_class_init(ALSASeqSubscribeDataClass *klass)
 {
-    return;
+    GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
+
+    gobject_class->set_property = seq_subscribe_data_set_property;
+    gobject_class->get_property = seq_subscribe_data_get_property;
+
+    seq_subscribe_data_props[SEQ_SUBSCRIBE_DATA_PROP_SENDER] =
+        g_param_spec_boxed("sender", "sender",
+                           "The address of sender.",
+                           ALSASEQ_TYPE_ADDR,
+                           G_PARAM_READWRITE);
+
+    seq_subscribe_data_props[SEQ_SUBSCRIBE_DATA_PROP_DEST] =
+        g_param_spec_boxed("dest", "dest",
+                           "The address of destination.",
+                           ALSASEQ_TYPE_ADDR,
+                           G_PARAM_READWRITE);
+
+    seq_subscribe_data_props[SEQ_SUBSCRIBE_DATA_PROP_FLAG] =
+        g_param_spec_flags("flag", "flag",
+                          "The attributee flag, a set of "
+                          "ALSASeqPortSubscribeFlag.",
+                          ALSASEQ_TYPE_PORT_SUBSCRIBE_FLAG,
+                         0,
+                         G_PARAM_READWRITE);
+
+    seq_subscribe_data_props[SEQ_SUBSCRIBE_DATA_PROP_QUEUE_ID] =
+        g_param_spec_uchar("queue-id", "queue-id",
+                           "The numerical ID of queue to deliver. One of "
+                           "ALSASeqSpecificQueueId is available as well as "
+                           "any numerical value.",
+                           0, G_MAXUINT8,
+                           0,
+                           G_PARAM_READWRITE);
+
+    g_object_class_install_properties(gobject_class,
+                                      SEQ_SUBSCRIBE_DATA_PROP_COUNT,
+                                      seq_subscribe_data_props);
 }
 
 static void alsaseq_subscribe_data_init(ALSASeqSubscribeData *self)
 {
     return;
 }
+
+/**
+ * alsaseq_subscribe_data_new:
+ *
+ * Allocates and returns the instance of ALSASeqSubscribeData class.
+ *
+ * Returns: (transfer full): A #ALSASeqSubscribeData.
+ */
+ALSASeqSubscribeData *alsaseq_subscribe_data_new()
+{
+    return g_object_new(ALSASEQ_TYPE_SUBSCRIBE_DATA, NULL);
+}
index 4e397b3f4dc9c87e7e50e397c28399ee39d71915..00e60e43037c4e2beea638ef2c5e836ef3b6be68 100644 (file)
@@ -5,6 +5,9 @@
 #include <glib.h>
 #include <glib-object.h>
 
+#include <seq/addr.h>
+#include <seq/alsaseq-enums.h>
+
 G_BEGIN_DECLS
 
 #define ALSASEQ_TYPE_SUBSCRIBE_DATA     (alsaseq_subscribe_data_get_type())
@@ -31,9 +34,12 @@ G_BEGIN_DECLS
 
 typedef struct _ALSASeqSubscribeData            ALSASeqSubscribeData;
 typedef struct _ALSASeqSubscribeDataClass       ALSASeqSubscribeDataClass;
+typedef struct _ALSASeqSubscribeDataPrivate     ALSASeqSubscribeDataPrivate;
 
 struct _ALSASeqSubscribeData {
     GObject parent_instance;
+
+    ALSASeqSubscribeData *priv;
 };
 
 struct _ALSASeqSubscribeDataClass {
@@ -42,6 +48,8 @@ struct _ALSASeqSubscribeDataClass {
 
 GType alsaseq_subscribe_data_get_type() G_GNUC_CONST;
 
+ALSASeqSubscribeData *alsaseq_subscribe_data_new();
+
 G_END_DECLS
 
 #endif
index b3983234fed9a7a63ef2775146a3009e74609523..043e8a16dd59eee6234de25b75a2cd97cafd6941 100644 (file)
@@ -10,8 +10,15 @@ gi.require_version('ALSASeq', '0.0')
 from gi.repository import ALSASeq
 
 target = ALSASeq.SubscribeData()
-props = ()
-methods = ()
+props = (
+    'sender',
+    'dest',
+    'flag',
+    'queue-id',
+)
+methods = (
+    'new',
+)
 signals = ()
 
 if not test(target, props, methods, signals):