From: Takashi Sakamoto Date: Mon, 18 Nov 2019 04:22:44 +0000 (+0900) Subject: rawmidi: stream_pair: add an API to set parameters for attached substream X-Git-Tag: v0.1.0~178 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=3865394e860b70db3cdb883a0469eafdbeb62631;p=alsa-gobject.git rawmidi: stream_pair: add an API to set parameters for attached substream Signed-off-by: Takashi Sakamoto --- diff --git a/src/rawmidi/alsarawmidi.map b/src/rawmidi/alsarawmidi.map index a29d26e..b9ba394 100644 --- a/src/rawmidi/alsarawmidi.map +++ b/src/rawmidi/alsarawmidi.map @@ -15,6 +15,7 @@ ALSA_GOBJECT_0_0_0 { "alsarawmidi_stream_pair_new"; "alsarawmidi_stream_pair_open"; "alsarawmidi_stream_pair_get_substream_info"; + "alsarawmidi_stream_pair_set_substream_params"; "alsarawmidi_substream_params_get_type"; "alsarawmidi_substream_params_new"; diff --git a/src/rawmidi/privates.h b/src/rawmidi/privates.h index b0f2674..ae579de 100644 --- a/src/rawmidi/privates.h +++ b/src/rawmidi/privates.h @@ -8,6 +8,7 @@ #include #include "substream-info.h" +#include "substream-params.h" #include @@ -24,6 +25,9 @@ void rawmidi_substream_info_refer_private(ALSARawmidiSubstreamInfo *self, 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); + G_END_DECLS #endif diff --git a/src/rawmidi/stream-pair.c b/src/rawmidi/stream-pair.c index d1f9a07..f8875c9 100644 --- a/src/rawmidi/stream-pair.c +++ b/src/rawmidi/stream-pair.c @@ -183,3 +183,31 @@ void alsarawmidi_stream_pair_get_substream_info(ALSARawmidiStreamPair *self, return; } } + +/** + * alsarawmidi_stream_pair_set_substream_params: + * @self: A #ALSARawmidiStreamPair. + * @direction: The direction of substream attached to the stream pair. + * @substream_params: The parameters of substream. + * @error: A #GError. + * + * Set parameters of substream for given direction, which is attached to the + * pair of streams. + */ +void alsarawmidi_stream_pair_set_substream_params(ALSARawmidiStreamPair *self, + ALSARawmidiStreamDirection direction, + ALSARawmidiSubstreamParams *substream_params, + GError **error) +{ + ALSARawmidiStreamPairPrivate *priv; + struct snd_rawmidi_params *params; + + g_return_if_fail(ALSARAWMIDI_IS_STREAM_PAIR(self)); + priv = alsarawmidi_stream_pair_get_instance_private(self); + + rawmidi_substream_params_refer_private(substream_params, ¶ms); + + params->stream = direction; + if (ioctl(priv->fd, SNDRV_RAWMIDI_IOCTL_PARAMS, params) < 0) + generate_error(error, errno); +} diff --git a/src/rawmidi/stream-pair.h b/src/rawmidi/stream-pair.h index 2400fbd..4cd770f 100644 --- a/src/rawmidi/stream-pair.h +++ b/src/rawmidi/stream-pair.h @@ -7,6 +7,7 @@ #include #include +#include G_BEGIN_DECLS @@ -60,6 +61,11 @@ void alsarawmidi_stream_pair_get_substream_info(ALSARawmidiStreamPair *self, ALSARawmidiSubstreamInfo **substream_info, GError **error); +void alsarawmidi_stream_pair_set_substream_params(ALSARawmidiStreamPair *self, + ALSARawmidiStreamDirection direction, + ALSARawmidiSubstreamParams *substream_params, + GError **error); + G_END_DECLS #endif diff --git a/src/rawmidi/substream-params.c b/src/rawmidi/substream-params.c index 0f5f078..bfeb43d 100644 --- a/src/rawmidi/substream-params.c +++ b/src/rawmidi/substream-params.c @@ -1,10 +1,8 @@ // SPDX-License-Identifier: LGPL-3.0-or-later -#include "substream-params.h" +#include "privates.h" #include -#include - struct _ALSARawmidiSubstreamParamsPrivate { struct snd_rawmidi_params params; }; @@ -113,3 +111,12 @@ ALSARawmidiSubstreamParams *alsarawmidi_substream_params_new() { return g_object_new(ALSARAWMIDI_TYPE_SUBSTREAM_PARAMS, NULL); } + +void rawmidi_substream_params_refer_private(ALSARawmidiSubstreamParams *self, + struct snd_rawmidi_params **params) +{ + ALSARawmidiSubstreamParamsPrivate *priv = + alsarawmidi_substream_params_get_instance_private(self); + + *params = &priv->params; +} diff --git a/tests/alsarawmidi-stream-pair b/tests/alsarawmidi-stream-pair index becebb1..3c43f54 100644 --- a/tests/alsarawmidi-stream-pair +++ b/tests/alsarawmidi-stream-pair @@ -17,6 +17,7 @@ methods = ( 'new', 'open', 'get_substream_info', + 'set_substream_params', ) signals = ()