]> git.alsa-project.org Git - alsa-gobject.git/commitdiff
seq: queue_timer_alsa: add properties and constructor
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Wed, 20 Nov 2019 13:41:48 +0000 (22:41 +0900)
committer坂本 貴史 <o-takashi@sakamocchi.jp>
Tue, 7 Apr 2020 08:08:24 +0000 (17:08 +0900)
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
src/seq/alsaseq.map
src/seq/privates.h
src/seq/queue-timer-alsa.c
src/seq/queue-timer-alsa.h
src/seq/queue-timer.c
src/seq/queue-timer.h
tests/alsaseq-queue-timer-alsa

index 7b6accc7dd71089879c5f5b51bc2b9a933240938..bf39c9b6484a75573187841baef8063b8c5aff36 100644 (file)
@@ -156,6 +156,7 @@ ALSA_GOBJECT_0_0_0 {
     "alsaseq_queue_timer_get_type";
 
     "alsaseq_queue_timer_alsa_get_type";
+    "alsaseq_queue_timer_alsa_new";
   local:
     *;
 };
index c6b9cd075195722008c746bc236ad815763d3ec3..6556e21d2a94e271824510f3b83dfd03ca985da0 100644 (file)
@@ -16,6 +16,7 @@
 #include "queue-info.h"
 #include "queue-status.h"
 #include "queue-tempo.h"
+#include "queue-timer.h"
 
 #include <sound/asequencer.h>
 
@@ -53,6 +54,9 @@ void seq_queue_status_refer_private(ALSASeqQueueStatus *self,
 void seq_queue_tempo_refer_private(ALSASeqQueueTempo *self,
                                    struct snd_seq_queue_tempo **tempo);
 
+void seq_queue_timer_refer_private(ALSASeqQueueTimer *self,
+                                   struct snd_seq_queue_timer **timer);
+
 G_END_DECLS
 
 #endif
index 66eaf2d2d14c49f52e48cf3bb17913560070de14..16aeb4ffc2dcd5f1e1d8bbef79ecd6249b35ad9e 100644 (file)
 // SPDX-License-Identifier: LGPL-3.0-or-later
 #include "queue-timer-alsa.h"
+#include "privates.h"
 
 G_DEFINE_TYPE(ALSASeqQueueTimerAlsa, alsaseq_queue_timer_alsa, ALSASEQ_TYPE_QUEUE_TIMER)
 
+enum seq_queue_timer_alsa_prop_type {
+    SEQ_QUEUE_TIMER_ALSA_PROP_TIMER_DEVICE_ID = 1,
+    SEQ_QUEUE_TIMER_ALSA_PROP_RESOLUTION,
+    SEQ_QUEUE_TIMER_ALSA_PROP_COUNT,
+};
+static GParamSpec *seq_queue_timer_alsa_props[SEQ_QUEUE_TIMER_ALSA_PROP_COUNT] = { NULL, };
+
+static void seq_queue_timer_alsa_set_property(GObject *obj, guint id,
+                                         const GValue *val, GParamSpec *spec)
+{
+    ALSASeqQueueTimer *parent = ALSASEQ_QUEUE_TIMER(obj);
+    struct snd_seq_queue_timer *timer;
+
+    seq_queue_timer_refer_private(parent, &timer);
+
+    switch (id) {
+    case SEQ_QUEUE_TIMER_ALSA_PROP_TIMER_DEVICE_ID:
+    {
+        ALSATimerDeviceId *device_id = g_value_get_boxed(val);
+        timer->u.alsa.id = *device_id;
+        break;
+    }
+    case SEQ_QUEUE_TIMER_ALSA_PROP_RESOLUTION:
+        timer->u.alsa.resolution = g_value_get_uint(val);
+        break;
+    default:
+        G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, id, spec);
+        break;
+    }
+}
+
+static void seq_queue_timer_alsa_get_property(GObject *obj, guint id,
+                                              GValue *val, GParamSpec *spec)
+{
+    ALSASeqQueueTimer *parent = ALSASEQ_QUEUE_TIMER(obj);
+    struct snd_seq_queue_timer *timer;
+
+    seq_queue_timer_refer_private(parent, &timer);
+
+    switch (id) {
+    case SEQ_QUEUE_TIMER_ALSA_PROP_TIMER_DEVICE_ID:
+    {
+        g_value_set_static_boxed(val, &timer->u.alsa.id);
+        break;
+    }
+    case SEQ_QUEUE_TIMER_ALSA_PROP_RESOLUTION:
+        g_value_set_uint(val, timer->u.alsa.resolution);
+        break;
+    default:
+        G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, id, spec);
+        break;
+    }
+}
+
 static void alsaseq_queue_timer_alsa_class_init(ALSASeqQueueTimerAlsaClass *klass)
 {
-    return;
+    GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
+
+    gobject_class->set_property = seq_queue_timer_alsa_set_property;
+    gobject_class->get_property = seq_queue_timer_alsa_get_property;
+
+    seq_queue_timer_alsa_props[SEQ_QUEUE_TIMER_ALSA_PROP_TIMER_DEVICE_ID] =
+        g_param_spec_boxed("timer-device-id", "timer-device-id",
+                           "The device id for used timer.",
+                           ALSATIMER_TYPE_DEVICE_ID,
+                           G_PARAM_READWRITE);
+
+    seq_queue_timer_alsa_props[SEQ_QUEUE_TIMER_ALSA_PROP_RESOLUTION] =
+        g_param_spec_uint("resolution", "resolution",
+                          "The resolution of timer in Hz.",
+                          10, 6250,
+                          1000,
+                          G_PARAM_READWRITE);
+
+    g_object_class_install_properties(gobject_class,
+                                      SEQ_QUEUE_TIMER_ALSA_PROP_COUNT,
+                                      seq_queue_timer_alsa_props);
 }
 
 static void alsaseq_queue_timer_alsa_init(ALSASeqQueueTimerAlsa *self)
 {
     return;
 }
+
+/**
+ * alsaseq_queue_timer_alsa_new:
+ *
+ * Allocate and return an instance of ALSASeqQueueTimerAlsa.
+ *
+ * Returns: A #ALSASeqQueueTimerAlsa.
+ */
+ALSASeqQueueTimerAlsa *alsaseq_queue_timer_alsa_new()
+{
+    return g_object_new(ALSASEQ_TYPE_QUEUE_TIMER_ALSA, NULL);
+}
index 8344f56a62bed627d1185346ff0890f0663f4fa2..6c879d40eee5b4543d591f4f4dbc46d68527dfea 100644 (file)
@@ -45,6 +45,8 @@ struct _ALSASeqQueueTimerAlsaClass {
 
 GType alsaseq_queue_timer_alsa_get_type() G_GNUC_CONST;
 
+ALSASeqQueueTimerAlsa *alsaseq_queue_timer_alsa_new();
+
 G_END_DECLS
 
 #endif
index 4e7eb4e20ecd1487ec7dcedb48ff54610ca2b16f..09e7b09a0d6a42982663de7e084e3e5fb9a77264 100644 (file)
@@ -87,3 +87,12 @@ static void alsaseq_queue_timer_init(ALSASeqQueueTimer *self)
 {
     return;
 }
+
+void seq_queue_timer_refer_private(ALSASeqQueueTimer *self,
+                                   struct snd_seq_queue_timer **timer)
+{
+    ALSASeqQueueTimerPrivate *priv =
+                                alsaseq_queue_timer_get_instance_private(self);
+
+    *timer = &priv->timer;
+}
index c6abc6f22f34f6141366ff9cbbf8505a50ffc982..0315e460a70cd5da340bd931ef337aabd034817d 100644 (file)
@@ -6,6 +6,7 @@
 #include <glib-object.h>
 
 #include <seq/alsaseq-enums.h>
+#include <timer/device-id.h>
 
 G_BEGIN_DECLS
 
index 8cd467b6dc9d7a4ca815d5117da13ba3608da726..245b7e78c892c791599eab84e7a6f5b1bd02c1bd 100644 (file)
@@ -10,8 +10,13 @@ gi.require_version('ALSASeq', '0.0')
 from gi.repository import ALSASeq
 
 target = ALSASeq.QueueTimerAlsa()
-props = ()
-methods = ()
+props = (
+    'timer-device-id',
+    'resolution',
+)
+methods = (
+    'new',
+)
 signals = ()
 
 if not test(target, props, methods, signals):