]> git.alsa-project.org Git - alsa-lib.git/commitdiff
rawmidi: Extensions for tied device and substream inactive flag
authorTakashi Iwai <tiwai@suse.de>
Mon, 13 Jan 2025 14:24:11 +0000 (15:24 +0100)
committerTakashi Iwai <tiwai@suse.de>
Tue, 14 Jan 2025 15:46:50 +0000 (16:46 +0100)
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@suse.de>
include/rawmidi.h
src/rawmidi/rawmidi.c

index 2630d1e67572d89ee743f5821969b932574c85c5..af734b21db60d267daea33b3c93e07b17e6a8735 100644 (file)
@@ -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);
index c4b45fa227f15f6e32333a39e3160f8cbe317b88..9bb6d744a94ed2ca21210a29a3f00988667ef53c 100644 (file)
@@ -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