This is the enhancements of rawmidi API for the new feature added in 6.14 kernel: the indication of a tied device and the inactive flag for the selected substream. The new function is added for obtaining the tied device, snd_rawmidi_info_get_tied_device(). And the new bit flag is defined for indicating the inactive substream, SNDRV_RAWMIDI_INFO_STREAM_INACTIVE, which is exposed via snd_rawmidi_info_get_flags(). Signed-off-by: Takashi Iwai <tiwai@xxxxxxx> --- include/rawmidi.h | 2 ++ src/rawmidi/rawmidi.c | 16 ++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/include/rawmidi.h b/include/rawmidi.h index 2630d1e67572..af734b21db60 100644 --- a/include/rawmidi.h +++ b/include/rawmidi.h @@ -95,6 +95,7 @@ typedef enum _snd_rawmidi_read_mode { /** rawmidi info bit flags */ #define SND_RAWMIDI_INFO_UMP 0x00000008 /* rawmidi is UMP */ +#define SNDRV_RAWMIDI_INFO_STREAM_INACTIVE 0x00000010 /* the selected substream is inactive */ int snd_rawmidi_open(snd_rawmidi_t **in_rmidi, snd_rawmidi_t **out_rmidi, const char *name, int mode); @@ -124,6 +125,7 @@ const char *snd_rawmidi_info_get_name(const snd_rawmidi_info_t *obj); const char *snd_rawmidi_info_get_subdevice_name(const snd_rawmidi_info_t *obj); unsigned int snd_rawmidi_info_get_subdevices_count(const snd_rawmidi_info_t *obj); unsigned int snd_rawmidi_info_get_subdevices_avail(const snd_rawmidi_info_t *obj); +int snd_rawmidi_info_get_tied_device(const snd_rawmidi_info_t *obj); void snd_rawmidi_info_set_device(snd_rawmidi_info_t *obj, unsigned int val); void snd_rawmidi_info_set_subdevice(snd_rawmidi_info_t *obj, unsigned int val); void snd_rawmidi_info_set_stream(snd_rawmidi_info_t *obj, snd_rawmidi_stream_t val); diff --git a/src/rawmidi/rawmidi.c b/src/rawmidi/rawmidi.c index c4b45fa227f1..9bb6d744a94e 100644 --- a/src/rawmidi/rawmidi.c +++ b/src/rawmidi/rawmidi.c @@ -639,6 +639,22 @@ unsigned int snd_rawmidi_info_get_subdevices_avail(const snd_rawmidi_info_t *inf return info->subdevices_avail; } +/** + * \brief get the tied device number for the given rawmidi device + * \param info pointer to a snd_rawmidi_info_t structure + * \return the device number for the tied device, or -1 if untied / unknown. + * + * This function is useful for UMP rawmidi devices where each of them may + * have the mirroring legacy rawmidi device. Those are shown as "tied". + */ +int snd_rawmidi_info_get_tied_device(const snd_rawmidi_info_t *info) +{ + assert(info); + if (info->tied_device > 0) + return info->tied_device - 1; + return -1; +} + /** * \brief set rawmidi device number * \param info pointer to a snd_rawmidi_info_t structure -- 2.43.0