From: Takashi Sakamoto Date: Mon, 18 Nov 2019 04:22:44 +0000 (+0900) Subject: rawmidi: stream_pair: add an API to drain queued data for attached substream X-Git-Tag: v0.1.0~173 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=9b23c028ef5851d0d196fc8409829a6efd037c66;p=alsa-gobject.git rawmidi: stream_pair: add an API to drain queued data for attached substream Signed-off-by: Takashi Sakamoto --- diff --git a/src/rawmidi/alsarawmidi.map b/src/rawmidi/alsarawmidi.map index 2994533..0429bf3 100644 --- a/src/rawmidi/alsarawmidi.map +++ b/src/rawmidi/alsarawmidi.map @@ -19,6 +19,7 @@ ALSA_GOBJECT_0_0_0 { "alsarawmidi_stream_pair_get_substream_status"; "alsarawmidi_stream_pair_read_from_substream"; "alsarawmidi_stream_pair_write_to_substream"; + "alsarawmidi_stream_pair_drain_substream"; "alsarawmidi_substream_params_get_type"; "alsarawmidi_substream_params_new"; diff --git a/src/rawmidi/stream-pair.c b/src/rawmidi/stream-pair.c index 0bf91bc..bede69f 100644 --- a/src/rawmidi/stream-pair.c +++ b/src/rawmidi/stream-pair.c @@ -300,3 +300,27 @@ void alsarawmidi_stream_pair_write_to_substream(ALSARawmidiStreamPair *self, return; } } + +/** + * alsarawmidi_stream_pair_drain: + * @self: A #ALSARawmidiStreamPair. + * @direction: The direction of substream attached to the stream pair. + * @error: A #GError. + * + * Drain queued data in intermediate buffer for substream attached to the pair + * of streams. In a case that the instance is opened without O_NONBLOCK and the + * call is for output substream and any data is in the intermediate buffer, the + * call is blocked till no data is in the intermediate buffer. + */ +void alsarawmidi_stream_pair_drain_substream(ALSARawmidiStreamPair *self, + ALSARawmidiStreamDirection direction, + GError **error) +{ + ALSARawmidiStreamPairPrivate *priv; + + g_return_if_fail(ALSARAWMIDI_IS_STREAM_PAIR(self)); + priv = alsarawmidi_stream_pair_get_instance_private(self); + + if (ioctl(priv->fd, SNDRV_RAWMIDI_IOCTL_DRAIN, &direction) < 0) + generate_error(error, errno); +} diff --git a/src/rawmidi/stream-pair.h b/src/rawmidi/stream-pair.h index ffa80e6..7f2ddc9 100644 --- a/src/rawmidi/stream-pair.h +++ b/src/rawmidi/stream-pair.h @@ -79,6 +79,10 @@ void alsarawmidi_stream_pair_write_to_substream(ALSARawmidiStreamPair *self, const guint8 *buf, gsize buf_size, GError **error); +void alsarawmidi_stream_pair_drain_substream(ALSARawmidiStreamPair *self, + ALSARawmidiStreamDirection direction, + GError **error); + G_END_DECLS #endif diff --git a/tests/alsarawmidi-stream-pair b/tests/alsarawmidi-stream-pair index 433c74d..7457b9d 100644 --- a/tests/alsarawmidi-stream-pair +++ b/tests/alsarawmidi-stream-pair @@ -21,6 +21,7 @@ methods = ( 'get_substream_status', 'read_from_substream', 'write_to_substream', + 'drain_substream', ) signals = ()