@@ -68,6 +68,15 @@ default instead of the MIDI 1.0 interface (at altset 0). You can
68
68
switch back to the binding with the old MIDI 1.0 interface by passing
69
69
`midi2_enable=0 ` option to snd-usb-audio driver module, too.
70
70
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
+
71
80
When the MIDI 2.0 device is probed, the kernel creates a rawmidi
72
81
device for each UMP Endpoint of the device. Its device name is
73
82
`/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
101
110
substream.
102
111
103
112
Each 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
+
109
122
The information of UMP Endpoints and UMP Blocks are found in the proc
110
123
file `/proc/asound/card*/midi* `. For example::
111
124
@@ -207,6 +220,8 @@ The "MIDI 2.0" port is for a UMP Endpoint, and its difference from
207
220
other UMP Group ports is that UMP Endpoint port sends the events from
208
221
the all ports on the device ("catch-all"), while each UMP Group port
209
222
sends 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.
210
225
211
226
Note that, although each UMP sequencer client usually creates 16
212
227
ports, those ports that don't belong to any UMP Blocks (or belonging
@@ -273,6 +288,11 @@ Rawmidi API Extensions
273
288
The direction is either `SNDRV_UMP_DIR_INPUT `,
274
289
`SNDRV_UMP_DIR_OUTPUT ` or `SNDRV_UMP_DIR_BIDIRECTION `.
275
290
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
+
276
296
277
297
Control API Extensions
278
298
======================
@@ -337,7 +357,7 @@ Sequencer API Extensions
337
357
`group_filter ` bitmap. The filter consists of bitmap from 1-based
338
358
Group numbers. For example, when the bit 1 is set, messages from
339
359
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 .
341
361
342
362
* Two new ioctls are added for UMP-capable clients:
343
363
`SNDRV_SEQ_IOCTL_GET_CLIENT_UMP_INFO ` and
@@ -349,3 +369,10 @@ Sequencer API Extensions
349
369
For an Endpoint data, pass 0 to the `type ` field, while for a Block
350
370
data, pass the block number + 1 to the `type ` field.
351
371
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