]> git.alsa-project.org Git - alsa-gobject.git/commitdiff
seq: event_cntr: add accesor APIs for the destination/source of event pointed by...
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Mon, 8 Jun 2020 14:10:10 +0000 (23:10 +0900)
committer坂本 貴史 <o-takashi@sakamocchi.jp>
Tue, 9 Jun 2020 00:16:09 +0000 (09:16 +0900)
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
src/seq/alsaseq.map
src/seq/event-cntr.c
src/seq/event-cntr.h
tests/alsaseq-event-cntr

index 4f166f779e4f63ac8e0bd261550e8ed41c032128..ef608c0d38a1ce7899042076eb5b2f26e58234bb 100644 (file)
@@ -190,6 +190,10 @@ ALSA_GOBJECT_0_0_0 {
     "alsaseq_event_cntr_set_queue_id";
     "alsaseq_event_cntr_get_tstamp";
     "alsaseq_event_cntr_set_tstamp";
+    "alsaseq_event_cntr_get_dst";
+    "alsaseq_event_cntr_set_dst";
+    "alsaseq_event_cntr_get_src";
+    "alsaseq_event_cntr_set_src";
   local:
     *;
 };
index e96369e5b20f40200556df669c688724fbbdbcec..86924db8dbaebe99f10d059921c748cfccf5da59 100644 (file)
@@ -667,3 +667,123 @@ void alsaseq_event_cntr_set_tstamp(ALSASeqEventCntr *self, gsize index,
 
     ev->time = *tstamp;
 }
+
+/**
+ * alsaseq_event_cntr_get_dst:
+ * @self: A #ALSASeqEventCntr.
+ * @index: The index of event to set.
+ * @dst: (out)(transfer none): The destination of event.
+ * @error: A #GError.
+ *
+ * Get the destination of event pointed by index.
+ */
+void alsaseq_event_cntr_get_dst(ALSASeqEventCntr *self, gsize index,
+                                  const ALSASeqAddr **dst, GError **error)
+{
+    ALSASeqEventCntrPrivate *priv;
+    struct event_iterator iter;
+    struct snd_seq_event *ev;
+
+    g_return_if_fail(ALSASEQ_IS_EVENT_CNTR(self));
+    priv = alsaseq_event_cntr_get_instance_private(self);
+
+    event_iterator_init(&iter, priv->buf, priv->length, priv->allocated);
+
+    ev = event_iterator_find(&iter, index);
+    if (ev == NULL) {
+        generate_error(error, ENOENT);
+        return;
+    }
+
+    *dst = (const ALSASeqAddr *)&ev->dest;
+}
+
+/**
+ * alsaseq_event_cntr_set_dst:
+ * @self: A #ALSASeqEventCntr.
+ * @index: The index of event to set.
+ * @dst: The destination of event.
+ * @error: A #GError.
+ *
+ * Set the destination of event pointed by index.
+ */
+void alsaseq_event_cntr_set_dst(ALSASeqEventCntr *self, gsize index,
+                                  const ALSASeqAddr *dst, GError **error)
+{
+    ALSASeqEventCntrPrivate *priv;
+    struct event_iterator iter;
+    struct snd_seq_event *ev;
+
+    g_return_if_fail(ALSASEQ_IS_EVENT_CNTR(self));
+    priv = alsaseq_event_cntr_get_instance_private(self);
+
+    event_iterator_init(&iter, priv->buf, priv->length, priv->allocated);
+
+    ev = event_iterator_find(&iter, index);
+    if (ev == NULL) {
+        generate_error(error, ENOENT);
+        return;
+    }
+
+    ev->dest = *dst;
+}
+
+/**
+ * alsaseq_event_cntr_get_src:
+ * @self: A #ALSASeqEventCntr.
+ * @index: The index of event to set.
+ * @src: (out)(transfer none): The source of event.
+ * @error: A #GError.
+ *
+ * Get the destination of event pointed by index.
+ */
+void alsaseq_event_cntr_get_src(ALSASeqEventCntr *self, gsize index,
+                                  const ALSASeqAddr **src, GError **error)
+{
+    ALSASeqEventCntrPrivate *priv;
+    struct event_iterator iter;
+    struct snd_seq_event *ev;
+
+    g_return_if_fail(ALSASEQ_IS_EVENT_CNTR(self));
+    priv = alsaseq_event_cntr_get_instance_private(self);
+
+    event_iterator_init(&iter, priv->buf, priv->length, priv->allocated);
+
+    ev = event_iterator_find(&iter, index);
+    if (ev == NULL) {
+        generate_error(error, ENOENT);
+        return;
+    }
+
+    *src = (const ALSASeqAddr *)&ev->source;
+}
+
+/**
+ * alsaseq_event_cntr_set_src:
+ * @self: A #ALSASeqEventCntr.
+ * @index: The index of event to set.
+ * @src: The source of event.
+ * @error: A #GError.
+ *
+ * Set the destination of event pointed by index.
+ */
+void alsaseq_event_cntr_set_src(ALSASeqEventCntr *self, gsize index,
+                                  const ALSASeqAddr *src, GError **error)
+{
+    ALSASeqEventCntrPrivate *priv;
+    struct event_iterator iter;
+    struct snd_seq_event *ev;
+
+    g_return_if_fail(ALSASEQ_IS_EVENT_CNTR(self));
+    priv = alsaseq_event_cntr_get_instance_private(self);
+
+    event_iterator_init(&iter, priv->buf, priv->length, priv->allocated);
+
+    ev = event_iterator_find(&iter, index);
+    if (ev == NULL) {
+        generate_error(error, ENOENT);
+        return;
+    }
+
+    ev->source = *src;
+}
index 34916d4140467c2d313563d48f45ebb82123cb7e..46de3df20e2dbc1f5a742f13a1a343fcfbd74817 100644 (file)
@@ -7,6 +7,7 @@
 
 #include <seq/alsaseq-enums.h>
 #include <seq/tstamp.h>
+#include <seq/addr.h>
 
 G_BEGIN_DECLS
 
@@ -101,6 +102,16 @@ void alsaseq_event_cntr_get_tstamp(ALSASeqEventCntr *self, gsize index,
 void alsaseq_event_cntr_set_tstamp(ALSASeqEventCntr *self, gsize index,
                                     const ALSASeqTstamp *tstamp, GError **error);
 
+void alsaseq_event_cntr_get_dst(ALSASeqEventCntr *self, gsize index,
+                                  const ALSASeqAddr **dst, GError **error);
+void alsaseq_event_cntr_set_dst(ALSASeqEventCntr *self, gsize index,
+                                  const ALSASeqAddr *dst, GError **error);
+
+void alsaseq_event_cntr_get_src(ALSASeqEventCntr *self, gsize index,
+                                  const ALSASeqAddr **src, GError **error);
+void alsaseq_event_cntr_set_src(ALSASeqEventCntr *self, gsize index,
+                                  const ALSASeqAddr *src, GError **error);
+
 G_END_DECLS
 
 #endif
index 55ef02924eed57046e6e491c5bef6722679ffed1..b6d878e1f0c2c35dcefaf9134a7cba95a5cc1e9a 100644 (file)
@@ -30,6 +30,10 @@ methods = (
     'set_queue_id',
     'get_tstamp',
     'set_tstamp',
+    'get_dst',
+    'set_dst',
+    'get_src',
+    'set_src',
 )
 signals = ()