From: Takashi Sakamoto Date: Mon, 18 Nov 2019 04:22:44 +0000 (+0900) Subject: rawmidi: stream_pair: add an API to get status of attached substream X-Git-Tag: v0.1.0~175 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=2a3eeda7ec47a88eb16cc10b891fbe345445b85c;p=alsa-gobject.git rawmidi: stream_pair: add an API to get status of attached substream Signed-off-by: Takashi Sakamoto --- diff --git a/src/rawmidi/alsarawmidi.map b/src/rawmidi/alsarawmidi.map index 1a0a56d..0a6025b 100644 --- a/src/rawmidi/alsarawmidi.map +++ b/src/rawmidi/alsarawmidi.map @@ -16,6 +16,7 @@ ALSA_GOBJECT_0_0_0 { "alsarawmidi_stream_pair_open"; "alsarawmidi_stream_pair_get_substream_info"; "alsarawmidi_stream_pair_set_substream_params"; + "alsarawmidi_stream_pair_get_substream_status"; "alsarawmidi_substream_params_get_type"; "alsarawmidi_substream_params_new"; diff --git a/src/rawmidi/privates.h b/src/rawmidi/privates.h index ae579de..09da0cd 100644 --- a/src/rawmidi/privates.h +++ b/src/rawmidi/privates.h @@ -9,6 +9,7 @@ #include "substream-info.h" #include "substream-params.h" +#include "substream-status.h" #include @@ -28,6 +29,9 @@ void rawmidi_select_subdevice(guint card_id, guint subdevice_id, GError **error) void rawmidi_substream_params_refer_private(ALSARawmidiSubstreamParams *self, struct snd_rawmidi_params **params); +void rawmidi_substream_status_refer_private(ALSARawmidiSubstreamStatus *self, + struct snd_rawmidi_status **status); + G_END_DECLS #endif diff --git a/src/rawmidi/stream-pair.c b/src/rawmidi/stream-pair.c index f8875c9..6276ca9 100644 --- a/src/rawmidi/stream-pair.c +++ b/src/rawmidi/stream-pair.c @@ -211,3 +211,32 @@ void alsarawmidi_stream_pair_set_substream_params(ALSARawmidiStreamPair *self, if (ioctl(priv->fd, SNDRV_RAWMIDI_IOCTL_PARAMS, params) < 0) generate_error(error, errno); } + +/** + * alsarawmidi_stream_pair_get_substream_status: + * @self: A #ALSARawmidiStreamPair. + * @direction: The direction of substream attached to the stream pair. + * @substream_status: (inout): The status of substream. + * @error: A #GError. + * + * Retrieve status of substream for given direction, which is attached to the + * pair of streams. + */ +void alsarawmidi_stream_pair_get_substream_status(ALSARawmidiStreamPair *self, + ALSARawmidiStreamDirection direction, + ALSARawmidiSubstreamStatus *const *substream_status, + GError **error) +{ + ALSARawmidiStreamPairPrivate *priv; + struct snd_rawmidi_status *status; + + g_return_if_fail(ALSARAWMIDI_IS_STREAM_PAIR(self)); + g_return_if_fail(substream_status != NULL); + priv = alsarawmidi_stream_pair_get_instance_private(self); + + rawmidi_substream_status_refer_private(*substream_status, &status); + + status->stream = direction; + if (ioctl(priv->fd, SNDRV_RAWMIDI_IOCTL_STATUS, status) < 0) + generate_error(error, errno); +} diff --git a/src/rawmidi/stream-pair.h b/src/rawmidi/stream-pair.h index 4cd770f..22f4652 100644 --- a/src/rawmidi/stream-pair.h +++ b/src/rawmidi/stream-pair.h @@ -8,6 +8,7 @@ #include #include #include +#include G_BEGIN_DECLS @@ -66,6 +67,11 @@ void alsarawmidi_stream_pair_set_substream_params(ALSARawmidiStreamPair *self, ALSARawmidiSubstreamParams *substream_params, GError **error); +void alsarawmidi_stream_pair_get_substream_status(ALSARawmidiStreamPair *self, + ALSARawmidiStreamDirection direction, + ALSARawmidiSubstreamStatus *const *substream_status, + GError **error); + G_END_DECLS #endif diff --git a/src/rawmidi/substream-status.c b/src/rawmidi/substream-status.c index 39ed60b..bcebc0a 100644 --- a/src/rawmidi/substream-status.c +++ b/src/rawmidi/substream-status.c @@ -1,7 +1,5 @@ // SPDX-License-Identifier: LGPL-3.0-or-later -#include "substream-status.h" - -#include +#include "privates.h" struct _ALSARawmidiSubstreamStatusPrivate { struct snd_rawmidi_status status; @@ -74,3 +72,12 @@ ALSARawmidiSubstreamStatus *alsarawmidi_substream_status_new() { return g_object_new(ALSARAWMIDI_TYPE_SUBSTREAM_STATUS, NULL); } + +void rawmidi_substream_status_refer_private(ALSARawmidiSubstreamStatus *self, + struct snd_rawmidi_status **status) +{ + ALSARawmidiSubstreamStatusPrivate *priv = + alsarawmidi_substream_status_get_instance_private(self); + + *status = &priv->status; +} diff --git a/tests/alsarawmidi-stream-pair b/tests/alsarawmidi-stream-pair index 3c43f54..fb7c33c 100644 --- a/tests/alsarawmidi-stream-pair +++ b/tests/alsarawmidi-stream-pair @@ -18,6 +18,7 @@ methods = ( 'open', 'get_substream_info', 'set_substream_params', + 'get_substream_status', ) signals = ()