From 3865394e860b70db3cdb883a0469eafdbeb62631 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 an API to set parameters for attached substream Signed-off-by: Takashi Sakamoto --- src/rawmidi/alsarawmidi.map | 1 + src/rawmidi/privates.h | 4 ++++ src/rawmidi/stream-pair.c | 28 ++++++++++++++++++++++++++++ src/rawmidi/stream-pair.h | 6 ++++++ src/rawmidi/substream-params.c | 13 ++++++++++--- tests/alsarawmidi-stream-pair | 1 + 6 files changed, 50 insertions(+), 3 deletions(-) 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 = () -- 2.47.3