]> git.alsa-project.org Git - alsa-gobject.git/commitdiff
seq: event_cntr: add accesor APIs for result data of event pointed by index
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 fffc00d0f8cb4d0143df54c79e1318d58a046c24..b9dfa6830513734cd00b6d31ab86b5baa6247161 100644 (file)
@@ -212,6 +212,8 @@ ALSA_GOBJECT_0_0_0 {
     "alsaseq_event_cntr_set_addr_data";
     "alsaseq_event_cntr_get_connect_data";
     "alsaseq_event_cntr_set_connect_data";
+    "alsaseq_event_cntr_get_result_data";
+    "alsaseq_event_cntr_set_result_data";
   local:
     *;
 };
index 8ad82acd03f288d94395f732a1ead94ddaec449c..0f8790ff118b1b07b976a1056dcae0ec2d4016af 100644 (file)
@@ -1444,3 +1444,65 @@ void alsaseq_event_cntr_set_connect_data(ALSASeqEventCntr *self, gsize index,
 
     ev->data.connect = *(struct snd_seq_connect *)data;
 }
+
+/**
+ * alsaseq_event_cntr_get_result_data:
+ * @self: A #ALSASeqEventCntr.
+ * @index: The index of event to set.
+ * @data: (out)(transfer none): The result data of event.
+ * @error: A #GError.
+ *
+ * Get the result data of event pointed by the index.
+ */
+void alsaseq_event_cntr_get_result_data(ALSASeqEventCntr *self, gsize index,
+                            const ALSASeqEventDataResult **data, 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;
+    }
+
+    *data = (const ALSASeqEventDataResult *)&ev->data.result;
+}
+
+/**
+ * alsaseq_event_cntr_set_result_data:
+ * @self: A #ALSASeqEventCntr.
+ * @index: The index of event to set.
+ * @data: The result data of event.
+ * @error: A #GError.
+ *
+ * Copy the result data to the event pointed by the index.
+ */
+void alsaseq_event_cntr_set_result_data(ALSASeqEventCntr *self, gsize index,
+                            const ALSASeqEventDataResult *data, 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;
+    }
+
+    ensure_fixed_length_event(priv, ev, error);
+    if (*error != NULL)
+        return;
+
+    ev->data.result = *(struct snd_seq_result *)data;
+}
index 3a527a311e0333395b495d904b1bca858bb5afb1..d4ce44f664cb238a79985ee1e40c5d99fa8804f7 100644 (file)
@@ -12,6 +12,7 @@
 #include <seq/event-data-ctl.h>
 #include <seq/event-data-queue.h>
 #include <seq/event-data-connect.h>
+#include <seq/event-data-result.h>
 
 G_BEGIN_DECLS
 
@@ -163,6 +164,11 @@ void alsaseq_event_cntr_get_connect_data(ALSASeqEventCntr *self, gsize index,
 void alsaseq_event_cntr_set_connect_data(ALSASeqEventCntr *self, gsize index,
                         const ALSASeqEventDataConnect *data, GError **error);
 
+void alsaseq_event_cntr_get_result_data(ALSASeqEventCntr *self, gsize index,
+                            const ALSASeqEventDataResult **data, GError **error);
+void alsaseq_event_cntr_set_result_data(ALSASeqEventCntr *self, gsize index,
+                            const ALSASeqEventDataResult *data, GError **error);
+
 G_END_DECLS
 
 #endif
index 4a313402b712bf309a28246c212b4ec42e26201d..a6be590e30df2e315204f4ad607e2760e2f05c14 100644 (file)
@@ -50,6 +50,8 @@ methods = (
     'set_tstamp_data',
     'get_connect_data',
     'set_connect_data',
+    'get_result_data',
+    'set_result_data',
 )
 signals = ()