Skip to contentSkip to conversation

rawmidi.c Set a name for a newly allocated rawmidi substream

PATCH In review Ralf Beck 2 participants 4 messages May 7, 2014 – May 8, 2014 Sound

lore
Share & tools
lore

Ralf Beck

author
#0 lore raw

PATCH 1/1 rawmidi.c Set a name for a newly allocated rawmidi substream

Rationale: Bitwig Studio (and possibly other rawmidi clients) enumerate the Midi I/Os by substream names. With the current rawmidi implementation, the name is an empty string and only the USB mididriver changes it to a meaningful value after allocation.

This patch sets a default substream name of the form "somename x-y-z"

sound/core/rawmidi.c 2014-05-06 17:42:35.058097185 +0200 renamed from sound/core/rawmidi.c.orig 2014-05-06 20:25:33.683081389 +0200 +3 -0
@@ -34,6 +34,7 @@
 #include <sound/control.h>
 #include <sound/minors.h>
 #include <sound/initval.h>
+#include <linux/string.h>
 
 MODULE_AUTHOR("Jaroslav Kysela <[email protected]>");
 MODULE_DESCRIPTION("Midlevel RawMidi code for ALSA.");
@@ -1420,6 +1421,8 @@ static int snd_rawmidi_alloc_substreams(
         substream->number = idx;
         substream->rmidi = rmidi;
         substream->pstr = stream;
+            snprintf(substream->name, sizeof(substream->name),
+                 "%s %d-%d-%d", rmidi->id, rmidi->card->number, rmidi->device, idx);
         list_add_tail(&substream->list, &stream->substreams);
         stream->substream_count++;
     }
#1 lore raw
Quoted 3 lines · Ralf Beck

Rationale: Bitwig Studio (and possibly other rawmidi clients) enumerate the Midi I/Os by substream names. With the current rawmidi implementation, the name is an empty string and only the USB mididriver changes it to a meaningful value after allocation.

Many RawMIDI devices have only one substream, or multiple substreams that are merged into one port. For these, separate substream names do not make sense.

Quoted 1 line

This patch sets a default substream name of the form "somename x-y-z"

The ID string is not meant to be a name.

Also see Documentation/SubmittingPatches.

sound/core/rawmidi.c 2014-05-06 17:42:35.058097185 +0200 static int snd_rawmidi_alloc_substreams( · line 1424

Quoted 5 lines
sound/core/rawmidi.c 2014-05-06 17:42:35.058097185 +0200 renamed from sound/core/rawmidi.c.orig 2014-05-06 20:25:33.683081389 +0200 +1 -0
@@ -1420,6 +1421,8 @@ static int snd_rawmidi_alloc_substreams(
         substream->number = idx;
         substream->rmidi = rmidi;
         substream->pstr = stream;
+            snprintf(substream->name, sizeof(substream->name),

Your mailer broke whitespaces.

Regards,
Clemens

author
#2 lore raw

Am 07.05.2014 19:39, schrieb Clemens Ladisch:

Quoted 3 lines
Quoted 1 line · Ralf Beck

Rationale: Bitwig Studio (and possibly other rawmidi clients) enumerate the Midi I/Os by substream names. With the current rawmidi implementation, the name is an empty string and only the USB mididriver changes it to a meaningful value after allocation.

Many RawMIDI devices have only one substream, or multiple substreams that are merged into one port. For these, separate substream names do not make sense.

Any having no substream name at all makes more sense?

Quoted 2 lines
Quoted 1 line

This patch sets a default substream name of the form "somename x-y-z"

The ID string is not meant to be a name.

Would it be acceptable, if i remove the ID string and only return x-y-z ? Other than the alsa developers i would call creating rawmidi substreams, but not assigning a name to them a bug.

Best regards,
Ralf

#3 lore raw
Quoted 7 lines · Ralf Beck

Am 07.05.2014 19:39, schrieb Clemens Ladisch:

Quoted 4 lines
Quoted 1 line · Ralf Beck

Rationale: Bitwig Studio (and possibly other rawmidi clients) enumerate the Midi I/Os by substream names. With the current rawmidi implementation, the name is an empty string and only the USB mididriver changes it to a meaningful value after allocation.

Many RawMIDI devices have only one substream, or multiple substreams that are merged into one port. For these, separate substream names do not make sense.

Any having no substream name at all makes more sense?

The device itself already has a name.

Apparently, Bitwig has not been tested with any driver except snd-usb-audio.

Quoted 5 lines
Quoted 3 lines
Quoted 1 line

This patch sets a default substream name of the form "somename x-y-z"

The ID string is not meant to be a name.

Would it be acceptable, if i remove the ID string and only return x-y-z ?

No; you should use the device name or something like that.

But the substream name buffer is rather short; a better idea would be to fix all rawmidi drivers to set the substream name(s) to the appropriate value.

Quoted 2 lines

Other than the alsa developers i would call creating rawmidi substreams, but not assigning a name to them a bug.

For most drivers, substreams do not have a logical identity separate from the device.

Regards,
Clemens