@@ -68,6 +68,15 @@ default instead of the MIDI 1.0 interface (at altset 0). You can
6868switch back to the binding with the old MIDI 1.0 interface by passing
6969`midi2_enable=0 ` option to snd-usb-audio driver module, too.
7070
71+ The USB audio driver tries to query the UMP Endpoint and UMP Function
72+ Block information that are provided since UMP v1.1, and builds up the
73+ topology based on those information. When the device is older and
74+ doesn't respond to the new UMP inquiries, the driver falls back and
75+ builds the topology based on Group Terminal Block (GTB) information
76+ from the USB descriptor. Some device might be screwed up by the
77+ unexpected UMP command; in such a case, pass `midi2_probe=0 ` option to
78+ snd-usb-audio driver for skipping the UMP v1.1 inquiries.
79+
7180When the MIDI 2.0 device is probed, the kernel creates a rawmidi
7281device for each UMP Endpoint of the device. Its device name is
7382`/dev/snd/umpC*D* ` and different from the standard rawmidi device name
@@ -101,11 +110,15 @@ opening `/dev/snd/midiC*D*` will end up with opening the first
101110substream.
102111
103112Each UMP Endpoint can provide the additional information, constructed
104- from USB MIDI 2.0 descriptors. And a UMP Endpoint may contain one or
105- more UMP Blocks, where UMP Block is an abstraction introduced in the
106- ALSA UMP implementations to represent the associations among UMP
107- Groups. UMP Block corresponds to Group Terminal Block (GTB) in USB
108- MIDI 2.0 specifications but provide a few more generic information.
113+ from the information inquired via UMP 1.1 Stream messages or USB MIDI
114+ 2.0 descriptors. And a UMP Endpoint may contain one or more UMP
115+ Blocks, where UMP Block is an abstraction introduced in the ALSA UMP
116+ implementations to represent the associations among UMP Groups. UMP
117+ Block corresponds to Function Block in UMP 1.1 specification. When
118+ UMP 1.1 Function Block information isn't available, it's filled
119+ partially from Group Terminal Block (GTB) as defined in USB MIDI 2.0
120+ specifications.
121+
109122The information of UMP Endpoints and UMP Blocks are found in the proc
110123file `/proc/asound/card*/midi* `. For example::
111124
@@ -207,6 +220,8 @@ The "MIDI 2.0" port is for a UMP Endpoint, and its difference from
207220other UMP Group ports is that UMP Endpoint port sends the events from
208221the all ports on the device ("catch-all"), while each UMP Group port
209222sends only the events from the given UMP Group.
223+ Also, UMP groupless messages (such as the UMP message type 0x0f) are
224+ sent only to the UMP Endpoint port.
210225
211226Note that, although each UMP sequencer client usually creates 16
212227ports, those ports that don't belong to any UMP Blocks (or belonging
@@ -273,6 +288,11 @@ Rawmidi API Extensions
273288 The direction is either `SNDRV_UMP_DIR_INPUT `,
274289 `SNDRV_UMP_DIR_OUTPUT ` or `SNDRV_UMP_DIR_BIDIRECTION `.
275290
291+ * For the device supports UMP v1.1, the UMP MIDI protocol can be
292+ switched via "Stream Configuration Request" message (UMP type 0x0f,
293+ status 0x05). When UMP core receives such a message, it updates the
294+ UMP EP info and the corresponding sequencer clients as well.
295+
276296
277297Control API Extensions
278298======================
@@ -337,7 +357,7 @@ Sequencer API Extensions
337357 `group_filter ` bitmap. The filter consists of bitmap from 1-based
338358 Group numbers. For example, when the bit 1 is set, messages from
339359 Group 1 (i.e. the very first group) are filtered and not delivered.
340- The bit 0 is reserved for future use .
360+ The bit 0 is used for filtering UMP groupless messages .
341361
342362* Two new ioctls are added for UMP-capable clients:
343363 `SNDRV_SEQ_IOCTL_GET_CLIENT_UMP_INFO ` and
@@ -349,3 +369,10 @@ Sequencer API Extensions
349369 For an Endpoint data, pass 0 to the `type ` field, while for a Block
350370 data, pass the block number + 1 to the `type ` field.
351371 Setting the data for a kernel client shall result in an error.
372+
373+ * With UMP 1.1, Function Block information may be changed
374+ dynamically. When the update of Function Block is received from the
375+ device, ALSA sequencer core changes the corresponding sequencer port
376+ name and attributes accordingly, and notifies the changes via the
377+ announcement to the ALSA sequencer system port, similarly like the
378+ normal port change notification.
0 commit comments