From: Takashi Sakamoto Date: Mon, 8 Jun 2020 14:10:10 +0000 (+0900) Subject: seq: event_cntr: add accesor APIs for quadlet data of event pointed by index X-Git-Tag: v0.1.0~119 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=288d9934209afd7017d896a2dce98504a32ccf40;p=alsa-gobject.git seq: event_cntr: add accesor APIs for quadlet data of event pointed by index Signed-off-by: Takashi Sakamoto --- diff --git a/src/seq/alsaseq.map b/src/seq/alsaseq.map index 0467236..ac54c99 100644 --- a/src/seq/alsaseq.map +++ b/src/seq/alsaseq.map @@ -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: *; }; diff --git a/src/seq/event-cntr.c b/src/seq/event-cntr.c index fa9c696..0884d51 100644 --- a/src/seq/event-cntr.c +++ b/src/seq/event-cntr.c @@ -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)); +} diff --git a/src/seq/event-cntr.h b/src/seq/event-cntr.h index 0eff266..03b4f0e 100644 --- a/src/seq/event-cntr.h +++ b/src/seq/event-cntr.h @@ -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 diff --git a/tests/alsaseq-event-cntr b/tests/alsaseq-event-cntr index 4f20df5..4e9dbde 100644 --- a/tests/alsaseq-event-cntr +++ b/tests/alsaseq-event-cntr @@ -40,6 +40,8 @@ methods = ( 'set_ctl_data', 'get_byte_data', 'set_byte_data', + 'get_quadlet_data', + 'set_quadlet_data', ) signals = ()