]> git.alsa-project.org Git - alsa-gobject.git/commitdiff
seq: event_cntr: add accesor APIs for quadlet 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 046723684d223b729b6793cc7a0deec43dfeb058..ac54c9957ee4f4b3ceffe820f879c94d6d89a3c9 100644 (file)
@@ -200,6 +200,8 @@ ALSA_GOBJECT_0_0_0 {
     "alsaseq_event_cntr_set_ctl_data";
     "alsaseq_event_cntr_get_byte_data";
     "alsaseq_event_cntr_set_byte_data";
+    "alsaseq_event_cntr_get_quadlet_data";
+    "alsaseq_event_cntr_set_quadlet_data";
   local:
     *;
 };
index fa9c696035fc6bf60b9c2686ac78ff6774f66bc8..0884d516572c5b9d5bb3d1c2ab23d2a3832aed95 100644 (file)
@@ -1005,3 +1005,67 @@ void alsaseq_event_cntr_set_byte_data(ALSASeqEventCntr *self, gsize index,
 
     memcpy(ev->data.raw8.d, data, sizeof(ev->data.raw8.d));
 }
+
+/**
+ * alsaseq_event_cntr_get_quadlet_data:
+ * @self: A #ALSASeqEventCntr.
+ * @index: The index of event to set.
+ * @data: (array fixed-size=3)(out)(transfer none): The quadlet data of event.
+ * @error: A #GError.
+ *
+ * Get the quadlet data of event pointed by the index.
+ */
+void alsaseq_event_cntr_get_quadlet_data(ALSASeqEventCntr *self, gsize index,
+                                        const guint32 *data[3], 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, EINVAL);
+        return;
+    }
+
+    *data = ev->data.raw32.d;
+}
+
+/**
+ * alsaseq_event_cntr_set_quadlet_data:
+ * @self: A #ALSASeqEventCntr.
+ * @index: The index of event to set.
+ * @data: (array fixed-size=3): The quadlet data of event.
+ * @error: A #GError.
+ *
+ * Copy the quadlet data to the event pointed by the index.
+ */
+void alsaseq_event_cntr_set_quadlet_data(ALSASeqEventCntr *self, gsize index,
+                                        const guint32 data[3], 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, EINVAL);
+        return;
+    }
+
+    ensure_fixed_length_event(priv, ev, error);
+    if (*error != NULL)
+        return;
+
+    memcpy(ev->data.raw32.d, data, sizeof(ev->data.raw32.d));
+}
index 0eff266de12233457bec63481d8f4ddc7c7d81f5..03b4f0ed77d4b0e974f9e9ad64c3ac41dbc2b6a0 100644 (file)
@@ -129,6 +129,11 @@ void alsaseq_event_cntr_get_byte_data(ALSASeqEventCntr *self, gsize index,
 void alsaseq_event_cntr_set_byte_data(ALSASeqEventCntr *self, gsize index,
                                         const guint8 data[12], GError **error);
 
+void alsaseq_event_cntr_get_quadlet_data(ALSASeqEventCntr *self, gsize index,
+                                        const guint32 *data[3], GError **error);
+void alsaseq_event_cntr_set_quadlet_data(ALSASeqEventCntr *self, gsize index,
+                                        const guint32 data[3], GError **error);
+
 G_END_DECLS
 
 #endif
index 4f20df5554c530ead003748aa4eb41c0863d9ace..4e9dbde01331cb203329fae7e72b1e4f11110f6a 100644 (file)
@@ -40,6 +40,8 @@ methods = (
     'set_ctl_data',
     'get_byte_data',
     'set_byte_data',
+    'get_quadlet_data',
+    'set_quadlet_data',
 )
 signals = ()