From 67f3d50e016697bcb86223d7543a8d38d11c06d7 Mon Sep 17 00:00:00 2001 From: Takashi Sakamoto Date: Mon, 8 Jun 2020 23:10:10 +0900 Subject: [PATCH] seq: event_cntr: add accesor APIs for address data of event pointed by index Signed-off-by: Takashi Sakamoto --- src/seq/alsaseq.map | 2 ++ src/seq/event-cntr.c | 62 ++++++++++++++++++++++++++++++++++++++++++++ src/seq/event-cntr.h | 6 +++++ 3 files changed, 70 insertions(+) diff --git a/src/seq/alsaseq.map b/src/seq/alsaseq.map index 8e6dbaa..7d23f89 100644 --- a/src/seq/alsaseq.map +++ b/src/seq/alsaseq.map @@ -208,6 +208,8 @@ ALSA_GOBJECT_0_0_0 { "alsaseq_event_cntr_set_queue_data"; "alsaseq_event_cntr_get_tstamp_data"; "alsaseq_event_cntr_set_tstamp_data"; + "alsaseq_event_cntr_get_addr_data"; + "alsaseq_event_cntr_set_addr_data"; local: *; }; diff --git a/src/seq/event-cntr.c b/src/seq/event-cntr.c index b455fc0..d9fe2e3 100644 --- a/src/seq/event-cntr.c +++ b/src/seq/event-cntr.c @@ -1320,3 +1320,65 @@ void alsaseq_event_cntr_set_tstamp_data(ALSASeqEventCntr *self, gsize index, ev->data.time = *(union snd_seq_timestamp *)data; } + +/** + * alsaseq_event_cntr_get_addr_data: + * @self: A #ALSASeqEventCntr. + * @index: The index of event to set. + * @data: (out)(transfer none): The address data of event. + * @error: A #GError. + * + * Get the address data of event pointed by the index. + */ +void alsaseq_event_cntr_get_addr_data(ALSASeqEventCntr *self, gsize index, + const ALSASeqAddr **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, EINVAL); + return; + } + + *data = (const ALSASeqAddr *)&ev->data.time; +} + +/** + * alsaseq_event_cntr_set_addr_data: + * @self: A #ALSASeqEventCntr. + * @index: The index of event to set. + * @data: The address data of event. + * @error: A #GError. + * + * Copy the address data to the event pointed by the index. + */ +void alsaseq_event_cntr_set_addr_data(ALSASeqEventCntr *self, gsize index, + const ALSASeqAddr *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, EINVAL); + return; + } + + ensure_fixed_length_event(priv, ev, error); + if (*error != NULL) + return; + + ev->data.addr = *(struct snd_seq_addr *)data; +} diff --git a/src/seq/event-cntr.h b/src/seq/event-cntr.h index bf61b0b..defe12d 100644 --- a/src/seq/event-cntr.h +++ b/src/seq/event-cntr.h @@ -11,6 +11,7 @@ #include #include #include +#include G_BEGIN_DECLS @@ -152,6 +153,11 @@ void alsaseq_event_cntr_get_tstamp_data(ALSASeqEventCntr *self, gsize index, void alsaseq_event_cntr_set_tstamp_data(ALSASeqEventCntr *self, gsize index, const ALSASeqTstamp *data, GError **error); +void alsaseq_event_cntr_get_addr_data(ALSASeqEventCntr *self, gsize index, + const ALSASeqAddr **data, GError **error); +void alsaseq_event_cntr_set_addr_data(ALSASeqEventCntr *self, gsize index, + const ALSASeqAddr *data, GError **error); + G_END_DECLS #endif -- 2.47.3