From 9bfad842f5222bd06e4cd68de3fb214c6f15ba7e Mon Sep 17 00:00:00 2001 From: Takashi Sakamoto Date: Mon, 18 Nov 2019 13:22:44 +0900 Subject: [PATCH] rawmidi: stream_pair: add a API to get information of attached substream Signed-off-by: Takashi Sakamoto --- src/rawmidi/alsarawmidi.map | 1 + src/rawmidi/stream-pair.c | 32 ++++++++++++++++++++++++++++++++ src/rawmidi/stream-pair.h | 6 ++++++ tests/alsarawmidi-stream-pair | 1 + 4 files changed, 40 insertions(+) diff --git a/src/rawmidi/alsarawmidi.map b/src/rawmidi/alsarawmidi.map index 6aace36..cc7edd7 100644 --- a/src/rawmidi/alsarawmidi.map +++ b/src/rawmidi/alsarawmidi.map @@ -14,6 +14,7 @@ ALSA_GOBJECT_0_0_0 { "alsarawmidi_stream_pair_get_type"; "alsarawmidi_stream_pair_new"; "alsarawmidi_stream_pair_open"; + "alsarawmidi_stream_pair_get_substream_info"; local: *; }; diff --git a/src/rawmidi/stream-pair.c b/src/rawmidi/stream-pair.c index deb0c5f..d1f9a07 100644 --- a/src/rawmidi/stream-pair.c +++ b/src/rawmidi/stream-pair.c @@ -9,6 +9,7 @@ #include #include #include +#include struct _ALSARawmidiStreamPairPrivate { int fd; @@ -151,3 +152,34 @@ void alsarawmidi_stream_pair_open(ALSARawmidiStreamPair *self, guint card_id, priv->devnode = devnode; } + +/** + * alsarawmidi_stream_pair_get_substream_info: + * @self: A #ALSARawmidiStreamPair. + * @direction: The direction of substream attached to the stream pair. + * @substream_info: (out): The information for requested substream. + * @error: A #GError. + * + * Get information of substream attached to the stream pair. + */ +void alsarawmidi_stream_pair_get_substream_info(ALSARawmidiStreamPair *self, + ALSARawmidiStreamDirection direction, + ALSARawmidiSubstreamInfo **substream_info, + GError **error) +{ + ALSARawmidiStreamPairPrivate *priv; + struct snd_rawmidi_info *info; + + g_return_if_fail(ALSARAWMIDI_IS_STREAM_PAIR(self)); + priv = alsarawmidi_stream_pair_get_instance_private(self); + + *substream_info = g_object_new(ALSARAWMIDI_TYPE_SUBSTREAM_INFO, NULL); + + rawmidi_substream_info_refer_private(*substream_info, &info); + info->stream = direction; + if (ioctl(priv->fd, SNDRV_RAWMIDI_IOCTL_INFO, info) < 0) { + generate_error(error, errno); + g_object_unref(*substream_info); + return; + } +} diff --git a/src/rawmidi/stream-pair.h b/src/rawmidi/stream-pair.h index 46c4080..2400fbd 100644 --- a/src/rawmidi/stream-pair.h +++ b/src/rawmidi/stream-pair.h @@ -6,6 +6,7 @@ #include #include +#include G_BEGIN_DECLS @@ -54,6 +55,11 @@ void alsarawmidi_stream_pair_open(ALSARawmidiStreamPair *self, guint card_id, ALSARawmidiStreamPairInfoFlag access_modes, gint open_flag, GError **error); +void alsarawmidi_stream_pair_get_substream_info(ALSARawmidiStreamPair *self, + ALSARawmidiStreamDirection direction, + ALSARawmidiSubstreamInfo **substream_info, + GError **error); + G_END_DECLS #endif diff --git a/tests/alsarawmidi-stream-pair b/tests/alsarawmidi-stream-pair index 0419539..becebb1 100644 --- a/tests/alsarawmidi-stream-pair +++ b/tests/alsarawmidi-stream-pair @@ -16,6 +16,7 @@ props = ( methods = ( 'new', 'open', + 'get_substream_info', ) signals = () -- 2.47.3