]> git.alsa-project.org Git - alsa-gobject.git/commitdiff
seq: event_cntr: add accesor APIs for the priority mode 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 66dd8f8e881776af634f6b11bd2b1c3319dd47e0..93729dd4e98762cddb15918097c1598cddf19fbf 100644 (file)
@@ -182,6 +182,8 @@ ALSA_GOBJECT_0_0_0 {
     "alsaseq_event_cntr_set_time_mode";
     "alsaseq_event_cntr_get_length_mode";
     "alsaseq_event_cntr_set_length_mode";
+    "alsaseq_event_cntr_get_priority_mode";
+    "alsaseq_event_cntr_set_priority_mode";
   local:
     *;
 };
index 64e5cc267940087ff4acaa8d0c77cafdb094fcf7..ca8ef3c722491ad38cbb2268dd641bd2f983d170 100644 (file)
@@ -420,3 +420,66 @@ void alsaseq_event_cntr_get_length_mode(ALSASeqEventCntr *self, gsize index,
 
     *mode = (ALSASeqEventLengthMode)(ev->flags & SNDRV_SEQ_EVENT_LENGTH_MASK);
 }
+
+/**
+ * alsaseq_event_cntr_get_priority_mode:
+ * @self: A #ALSASeqEventCntr.
+ * @index: The index of event to set.
+ * @mode: (out): The mode of priority, one of #ALSASeqEventPriorityMode.
+ * @error: A #GError.
+ *
+ * Get the mode of priority for the event pointed by the index.
+ */
+void alsaseq_event_cntr_get_priority_mode(
+                                ALSASeqEventCntr *self, gsize index,
+                                ALSASeqEventPriorityMode *mode, 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;
+    }
+
+    *mode = (ALSASeqEventPriorityMode)(ev->flags & SNDRV_SEQ_PRIORITY_MASK);
+}
+
+/**
+ * alsaseq_event_cntr_set_priority_mode:
+ * @self: A #ALSASeqEventCntr.
+ * @index: The index of event to set.
+ * @mode: The mode of priority, one of #ALSASeqEventPriorityMode.
+ * @error: A #GError.
+ *
+ * Set the mode of priority for the event pointed by the index.
+ */
+void alsaseq_event_cntr_set_priority_mode(
+                                ALSASeqEventCntr *self, gsize index,
+                                ALSASeqEventPriorityMode mode, 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->flags &= ~SNDRV_SEQ_PRIORITY_MASK;
+    ev->flags |= (unsigned char)mode;
+}
index 7dc36211a8fbb14d90f8b1955230cdb7fc42e526..283754351cee5f9e72656e4195068875b6a18743 100644 (file)
@@ -78,6 +78,13 @@ void alsaseq_event_cntr_get_length_mode(ALSASeqEventCntr *self, gsize index,
                                           ALSASeqEventLengthMode *mode,
                                           GError **error);
 
+void alsaseq_event_cntr_get_priority_mode(
+                                ALSASeqEventCntr *self, gsize index,
+                                ALSASeqEventPriorityMode *mode, GError **error);
+void alsaseq_event_cntr_set_priority_mode(
+                                ALSASeqEventCntr *self, gsize index,
+                                ALSASeqEventPriorityMode mode, GError **error);
+
 G_END_DECLS
 
 #endif
index b32a67dbc594a69a3da0d67972d1294a1bdbea91..0f4f01830b2e41fd8410dd69465046b930b9a93d 100644 (file)
@@ -22,6 +22,8 @@ methods = (
     'get_time_mode',
     'set_time_mode',
     'get_length_mode',
+    'get_priority_mode',
+    'set_priority_mode',
 )
 signals = ()