Revert "TODO epan/dissectors/asn1/kerberos/packet-kerberos-template.c new GSS flags"
[wireshark-sm.git] / epan / dissectors / packet-rtp-midi.c
blob3179027fce4ac08234874644aec0623de90c7cef
1 /* packet-rtp-midi.c
3 * Routines for RFC 4695/6295 RTP-MIDI dissection
4 * Copyright 2006-2012, Tobias Erichsen <t.erichsen@gmx.de>
6 * Wireshark - Network traffic analyzer
7 * By Gerald Combs <gerald@wireshark.org>'
8 * Copyright 1998 Gerald Combs
10 * SPDX-License-Identifier: GPL-2.0-or-later
12 * RTP-MIDI ( RFC 4695/6295 ) is a payload type for transmitting MIDI-data over
13 * RTP-packets. This payload type can be used on an RTP-conversation that has been
14 * established either by means of a session establishment-protocol like SIP or
15 * something more lightweight like the Apple network-midi session establishment.
17 * This dissector is built based on the RTP-MIDI-specification RFC 4695 from
18 * August 13, 2008, the superseding version RFC 6295 and the MIDI-specification 96.1
20 * Here are some links:
22 * http://www.cs.berkeley.edu/~lazzaro/rtpmidi/
23 * https://tools.ietf.org/html/rfc4695
24 * https://tools.ietf.org/html/rfc6295
25 * http://www.midi.org/
27 * 2012-02-24
28 * - Initial version of dissector
30 * Open topics:
31 * - reassembly of large sysex-fields going over multiple RTP-packets - this would be a major task, though!
32 * - MIDI Show-Control
33 * - MIDI Machine-Control
37 #include "config.h"
39 #include <epan/packet.h>
40 #include <epan/tfs.h>
41 #include <wsutil/array.h>
42 #include <epan/prefs.h>
44 void proto_register_rtp_midi(void);
46 /* Definitions for protocol name during dissector-register */
47 #define RTP_MIDI_DISSECTOR_NAME "RFC 4695/6295 RTP-MIDI"
48 #define RTP_MIDI_DISSECTOR_SHORTNAME "RTP-MIDI"
49 #define RTP_MIDI_DISSECTOR_ABBREVIATION "rtpmidi"
51 #define RTP_MIDI_NO_RUNNING_STATUS 0xffff
54 * MIDI Controller Numbers
56 #define RTP_MIDI_CTRL_BANK_SELECT_MSB 0
57 #define RTP_MIDI_CTRL_MODULATION_WHEEL_OR_LEVER_MSB 1
58 #define RTP_MIDI_CTRL_BREATH_CONTROLLER_MSB 2
59 /* #define RTP_MIDI_CTRL 3 */
60 #define RTP_MIDI_CTRL_FOOT_CONTROLLER_MSB 4
61 #define RTP_MIDI_CTRL_PORTAMENTO_TIME_MSB 5
62 #define RTP_MIDI_CTRL_DATA_ENTRY_MSB 6
63 #define RTP_MIDI_CTRL_CHANNEL_VOLUME_MSB 7
64 #define RTP_MIDI_CTRL_BALANCE_MSB 8
65 /* #define RTP_MIDI_CTRL 9 */
66 #define RTP_MIDI_CTRL_PAN_MSB 10
67 #define RTP_MIDI_CTRL_EXPRESSION_CONTROLLER_MSB 11
68 #define RTP_MIDI_CTRL_EFFECT_CONTROL_1_MSB 12
69 #define RTP_MIDI_CTRL_EFFECT_CONTROL_2_MSB 13
70 /* #define RTP_MIDI_CTRL_ 14
71 #define RTP_MIDI_CTRL_ 15 */
72 #define RTP_MIDI_CTRL_GENERAL_PURPOSE_CONTROLLER_1_MSB 16
73 #define RTP_MIDI_CTRL_GENERAL_PURPOSE_CONTROLLER_2_MSB 17
74 #define RTP_MIDI_CTRL_GENERAL_PURPOSE_CONTROLLER_3_MSB 18
75 #define RTP_MIDI_CTRL_GENERAL_PURPOSE_CONTROLLER_4_MSB 19
76 /* #define RTP_MIDI_CTRL_ 20
77 #define RTP_MIDI_CTRL_ 21
78 #define RTP_MIDI_CTRL_ 22
79 #define RTP_MIDI_CTRL_ 23
80 #define RTP_MIDI_CTRL_ 24
81 #define RTP_MIDI_CTRL_ 25
82 #define RTP_MIDI_CTRL_ 26
83 #define RTP_MIDI_CTRL_ 27
84 #define RTP_MIDI_CTRL_ 28
85 #define RTP_MIDI_CTRL_ 29
86 #define RTP_MIDI_CTRL_ 30
87 #define RTP_MIDI_CTRL_ 31 */
88 #define RTP_MIDI_CTRL_BANK_SELECT_LSB 32
89 #define RTP_MIDI_CTRL_MODULATION_WHEEL_OR_LEVER_LSB 33
90 #define RTP_MIDI_CTRL_BREATH_CONTROLLER_LSB 34
91 /* #define RTP_MIDI_CTRL_ 35 */
92 #define RTP_MIDI_CTRL_FOOT_CONTROLLER_LSB 36
93 #define RTP_MIDI_CTRL_PORTAMENTO_TIME_LSB 37
94 #define RTP_MIDI_CTRL_DATA_ENTRY_LSB 38
95 #define RTP_MIDI_CTRL_CHANNEL_VOLUME_LSB 39
96 #define RTP_MIDI_CTRL_BALANCE_LSB 40
97 /* #define RTP_MIDI_CTRL_ 41 */
98 #define RTP_MIDI_CTRL_PAN_LSB 42
99 #define RTP_MIDI_CTRL_EXPRESSION_CONTROLLER_LSB 43
100 #define RTP_MIDI_CTRL_EFFECT_CONTROL_1_LSB 44
101 #define RTP_MIDI_CTRL_EFFECT_CONTROL_2_LSB 45
102 /* #define RTP_MIDI_CTRL_ 46
103 #define RTP_MIDI_CTRL_ 47 */
104 #define RTP_MIDI_CTRL_GENERAL_PURPOSE_CONTROLLER_1_LSB 48
105 #define RTP_MIDI_CTRL_GENERAL_PURPOSE_CONTROLLER_2_LSB 49
106 #define RTP_MIDI_CTRL_GENERAL_PURPOSE_CONTROLLER_3_LSB 50
107 #define RTP_MIDI_CTRL_GENERAL_PURPOSE_CONTROLLER_4_LSB 51
108 /* #define RTP_MIDI_CTRL_ 52
109 #define RTP_MIDI_CTRL_ 53
110 #define RTP_MIDI_CTRL_ 54
111 #define RTP_MIDI_CTRL_ 55
112 #define RTP_MIDI_CTRL_ 56
113 #define RTP_MIDI_CTRL_ 57
114 #define RTP_MIDI_CTRL_ 58
115 #define RTP_MIDI_CTRL_ 59
116 #define RTP_MIDI_CTRL_ 60
117 #define RTP_MIDI_CTRL_ 61
118 #define RTP_MIDI_CTRL_ 62
119 #define RTP_MIDI_CTRL_ 63 */
120 #define RTP_MIDI_CTRL_DAMPER_PEDAL 64
121 #define RTP_MIDI_CTRL_PORTAMENTO_ON_OFF 65
122 #define RTP_MIDI_CTRL_SUSTENUTO 66
123 #define RTP_MIDI_CTRL_SOFT_PEDAL 67
124 #define RTP_MIDI_CTRL_LEGATO_FOOTSWITCH 68
125 #define RTP_MIDI_CTRL_HOLD_2 69
126 #define RTP_MIDI_CTRL_SOUND_CONTROLLER_1 70
127 #define RTP_MIDI_CTRL_SOUND_CONTROLLER_2 71
128 #define RTP_MIDI_CTRL_SOUND_CONTROLLER_3 72
129 #define RTP_MIDI_CTRL_SOUND_CONTROLLER_4 73
130 #define RTP_MIDI_CTRL_SOUND_CONTROLLER_5 74
131 #define RTP_MIDI_CTRL_SOUND_CONTROLLER_6 75
132 #define RTP_MIDI_CTRL_SOUND_CONTROLLER_7 76
133 #define RTP_MIDI_CTRL_SOUND_CONTROLLER_8 77
134 #define RTP_MIDI_CTRL_SOUND_CONTROLLER_9 78
135 #define RTP_MIDI_CTRL_SOUND_CONTROLLER_10 79
136 #define RTP_MIDI_CTRL_GENERAL_PURPOSE_CONTROLLER_5 80
137 #define RTP_MIDI_CTRL_GENERAL_PURPOSE_CONTROLLER_6 81
138 #define RTP_MIDI_CTRL_GENERAL_PURPOSE_CONTROLLER_7 82
139 #define RTP_MIDI_CTRL_GENERAL_PURPOSE_CONTROLLER_8 83
140 #define RTP_MIDI_CTRL_PORTAMENTO_CONTROL 84
141 /* #define RTP_MIDI_CTRL_ 85
142 #define RTP_MIDI_CTRL_ 86
143 #define RTP_MIDI_CTRL_ 87
144 #define RTP_MIDI_CTRL_ 88
145 #define RTP_MIDI_CTRL_ 89
146 #define RTP_MIDI_CTRL_ 90 */
147 #define RTP_MIDI_CTRL_EFFECTS_1_DEPTH 91
148 #define RTP_MIDI_CTRL_EFFECTS_2_DEPTH 92
149 #define RTP_MIDI_CTRL_EFFECTS_3_DEPTH 93
150 #define RTP_MIDI_CTRL_EFFECTS_4_DEPTH 94
151 #define RTP_MIDI_CTRL_EFFECTS_5_DEPTH 95
152 #define RTP_MIDI_CTRL_DATA_INCREMENT 96
153 #define RTP_MIDI_CTRL_DATA_DECREMENT 97
154 #define RTP_MIDI_CTRL_NON_REGISTERED_PARAM_LSB 98
155 #define RTP_MIDI_CTRL_NON_REGISTERED_PARAM_MSB 99
156 #define RTP_MIDI_CTRL_REGISTERED_PARAM_LSB 100
157 #define RTP_MIDI_CTRL_REGISTERED_PARAM_MSB 101
158 /* #define RTP_MIDI_CTRL_ 102
159 #define RTP_MIDI_CTRL_ 103
160 #define RTP_MIDI_CTRL_ 104
161 #define RTP_MIDI_CTRL_ 105
162 #define RTP_MIDI_CTRL_ 106
163 #define RTP_MIDI_CTRL_ 107
164 #define RTP_MIDI_CTRL_ 108
165 #define RTP_MIDI_CTRL_ 109
166 #define RTP_MIDI_CTRL_ 110
167 #define RTP_MIDI_CTRL_ 111
168 #define RTP_MIDI_CTRL_ 112
169 #define RTP_MIDI_CTRL_ 113
170 #define RTP_MIDI_CTRL_ 114
171 #define RTP_MIDI_CTRL_ 115
172 #define RTP_MIDI_CTRL_ 116
173 #define RTP_MIDI_CTRL_ 117
174 #define RTP_MIDI_CTRL_ 118
175 #define RTP_MIDI_CTRL_ 119 */
176 /* MIDI Channel Mode Messages */
177 #define RTP_MIDI_CTRL_ALL_SOUND_OFF 120
178 #define RTP_MIDI_CTRL_RESET_ALL_CONTROLLERS 121
179 #define RTP_MIDI_CTRL_LOCAL_CONTROL_ON_OFF 122
180 #define RTP_MIDI_CTRL_ALL_NOTES_OFF 123
181 #define RTP_MIDI_CTRL_OMNI_MODE_OFF 124
182 #define RTP_MIDI_CTRL_OMNI_MODE_ON 125
183 #define RTP_MIDI_CTRL_MONO_MODE_ON 126
184 #define RTP_MIDI_CTRL_POLY_MODE_ON 127
188 * MIDI Status Bytes (Channel Voice Messages)
190 #define RTP_MIDI_STATUS_CHANNEL_NOTE_OFF 0x08 /* 0x8n n->channel */
191 #define RTP_MIDI_STATUS_CHANNEL_NOTE_ON 0x09 /* 0x9n n->channel */
192 #define RTP_MIDI_STATUS_CHANNEL_POLYPHONIC_KEY_PRESSURE 0x0a /* 0xan n->channel */
193 #define RTP_MIDI_STATUS_CHANNEL_CONTROL_CHANGE 0x0b /* 0xbn n->channel */
194 #define RTP_MIDI_STATUS_CHANNEL_PROGRAM_CHANGE 0x0c /* 0xcn n->channel */
195 #define RTP_MIDI_STATUS_CHANNEL_CHANNEL_PRESSURE 0x0d /* 0xdn n->channel */
196 #define RTP_MIDI_STATUS_CHANNEL_PITCH_BEND_CHANGE 0x0e /* 0xen n->channel */
199 * MIDI-Channels
201 #define RTP_MIDI_CHANNEL_1 0x00
202 #define RTP_MIDI_CHANNEL_2 0x01
203 #define RTP_MIDI_CHANNEL_3 0x02
204 #define RTP_MIDI_CHANNEL_4 0x03
205 #define RTP_MIDI_CHANNEL_5 0x04
206 #define RTP_MIDI_CHANNEL_6 0x05
207 #define RTP_MIDI_CHANNEL_7 0x06
208 #define RTP_MIDI_CHANNEL_8 0x07
209 #define RTP_MIDI_CHANNEL_9 0x08
210 #define RTP_MIDI_CHANNEL_10 0x09
211 #define RTP_MIDI_CHANNEL_11 0x0a
212 #define RTP_MIDI_CHANNEL_12 0x0b
213 #define RTP_MIDI_CHANNEL_13 0x0c
214 #define RTP_MIDI_CHANNEL_14 0x0d
215 #define RTP_MIDI_CHANNEL_15 0x0e
216 #define RTP_MIDI_CHANNEL_16 0x0f
217 #define RTP_MIDI_CHANNEL_MASK 0x0f
221 * MIDI Status Bytes (System Exclusive Messages, System Common Messages, System Realtime Messages )
223 #define RTP_MIDI_STATUS_COMMON_SYSEX_START 0xf0
224 #define RTP_MIDI_STATUS_COMMON_MTC_QUARTER_FRAME 0xf1
225 #define RTP_MIDI_STATUS_COMMON_SONG_POSITION_POINTER 0xf2
226 #define RTP_MIDI_STATUS_COMMON_SONG_SELECT 0xf3
227 #define RTP_MIDI_STATUS_COMMON_UNDEFINED_F4 0xf4
228 #define RTP_MIDI_STATUS_COMMON_UNDEFINED_F5 0xf5
229 #define RTP_MIDI_STATUS_COMMON_TUNE_REQUEST 0xf6
230 #define RTP_MIDI_STATUS_COMMON_SYSEX_END 0xf7
231 #define RTP_MIDI_STATUS_COMMON_REALTIME_TIMING_CLOCK 0xf8
232 #define RTP_MIDI_STATUS_COMMON_REALTIME_MIDI_TICK 0xf9 /* Spec says undefined */
233 #define RTP_MIDI_STATUS_COMMON_REALTIME_START 0xfa
234 #define RTP_MIDI_STATUS_COMMON_REALTIME_CONTINUE 0xfb
235 #define RTP_MIDI_STATUS_COMMON_REALTIME_STOP 0xfc
236 #define RTP_MIDI_STATUS_COMMON_REALTIME_UNDEFINED_FD 0xfd
237 #define RTP_MIDI_STATUS_COMMON_REALTIME_ACTIVE_SENSING 0xfe
238 #define RTP_MIDI_STATUS_COMMON_REALTIME_SYSTEM_RESET 0xff
242 * MIDI Universal Non-Realtime System Exclusive Messages (sysex-manu-id=0x7e)
244 #define RTP_MIDI_SYSEX_COMMON_NRT_SAMPLE_DUMP_HEADER 0x01
245 #define RTP_MIDI_SYSEX_COMMON_NRT_SAMPLE_DATA_PACKET 0x02
246 #define RTP_MIDI_SYSEX_COMMON_NRT_SAMPLE_DUMP_REQUEST 0x03
247 #define RTP_MIDI_SYSEX_COMMON_NRT_MTC 0x04
248 #define RTP_MIDI_SYSEX_COMMON_NRT_SAMPLE_DUMP_EXTENSIONS 0x05
249 #define RTP_MIDI_SYSEX_COMMON_NRT_GENERAL_INFORMATION 0x06
250 #define RTP_MIDI_SYSEX_COMMON_NRT_FILE_DUMP 0x07
251 #define RTP_MIDI_SYSEX_COMMON_NRT_MIDI_TUNING_STANDARD 0x08
252 #define RTP_MIDI_SYSEX_COMMON_NRT_GENERAL_MIDI 0x09
253 #define RTP_MIDI_SYSEX_COMMON_NRT_DOWNLOADABLE_SOUNDS 0x0a
254 #define RTP_MIDI_SYSEX_COMMON_NRT_END_OF_FILE 0x7b
255 #define RTP_MIDI_SYSEX_COMMON_NRT_WAIT 0x7c
256 #define RTP_MIDI_SYSEX_COMMON_NRT_CANCEL 0x7d
257 #define RTP_MIDI_SYSEX_COMMON_NRT_NAK 0x7e
258 #define RTP_MIDI_SYSEX_COMMON_NRT_ACK 0x7f
262 * MIDI Universal Realtime System Exclusive Messages (sysex-manu-id=0x7f)
264 #define RTP_MIDI_SYSEX_COMMON_RT_MIDI_TIME_CODE 0x01
265 #define RTP_MIDI_SYSEX_COMMON_RT_MIDI_SHOW_CONTROL 0x02
266 #define RTP_MIDI_SYSEX_COMMON_RT_NOTATION_INFORMATION 0x03
267 #define RTP_MIDI_SYSEX_COMMON_RT_DEVICE_CONTROL 0x04
268 #define RTP_MIDI_SYSEX_COMMON_RT_MTC_CUEING 0x05
269 #define RTP_MIDI_SYSEX_COMMON_RT_MIDI_MACHINE_CONTROL_COMMAND 0x06
270 #define RTP_MIDI_SYSEX_COMMON_RT_MIDI_MACHINE_CONTROL_RESPONSE 0x07
271 #define RTP_MIDI_SYSEX_COMMON_RT_MIDI_TUNING_STANDARD 0x08
274 /* List of short MIDI-manufacturer-IDs - needs to be completed! */
275 #define RTP_MIDI_MANU_SHORT_ISLONG 0x00
276 #define RTP_MIDI_MANU_SHORT_SEQUENTIAL_CIRCUITS 0x01
277 #define RTP_MIDI_MANU_SHORT_BIG_BRIAR_IDP 0x02
278 #define RTP_MIDI_MANU_SHORT_OCTAVE_PLATEAU_VOYETRA 0x03
279 #define RTP_MIDI_MANU_SHORT_MOOG 0x04
280 #define RTP_MIDI_MANU_SHORT_PASSPORT_DESIGNS 0x05
281 #define RTP_MIDI_MANU_SHORT_LEXICON 0x06
282 #define RTP_MIDI_MANU_SHORT_KURZWEIL 0x07
283 #define RTP_MIDI_MANU_SHORT_FENDER 0x08
284 #define RTP_MIDI_MANU_SHORT_GULBRANSEN 0x09
285 #define RTP_MIDI_MANU_SHORT_AKG_ACOUSTICS 0x0a
286 #define RTP_MIDI_MANU_SHORT_VOYCE_MUSIC 0x0b
287 #define RTP_MIDI_MANU_SHORT_WAVEFRAME 0x0c
288 #define RTP_MIDI_MANU_SHORT_ADA_SIGNAL_PROCESSORS 0x0d
289 #define RTP_MIDI_MANU_SHORT_GARFIELD_ELECTRONICS 0x0e
290 #define RTP_MIDI_MANU_SHORT_ENSONIQ 0x0f
291 #define RTP_MIDI_MANU_SHORT_OBERHEIM_GIBSON_LABS 0x10
292 #define RTP_MIDI_MANU_SHORT_APPLE_COMPUTERS 0x11
293 #define RTP_MIDI_MANU_SHORT_GREY_MATTER_RESPONSE 0x12
294 #define RTP_MIDI_MANU_SHORT_DIGIDESIGN 0x13
295 #define RTP_MIDI_MANU_SHORT_PALMTREE_INSTRUMENTS 0x14
296 #define RTP_MIDI_MANU_SHORT_JL_COOPER 0x15
297 #define RTP_MIDI_MANU_SHORT_LOWREY 0x16
298 #define RTP_MIDI_MANU_SHORT_LINN_ADAMS_SMITH 0x17
299 #define RTP_MIDI_MANU_SHORT_EMU_SYSTEMS 0x18
300 #define RTP_MIDI_MANU_SHORT_HARMONY_SYSTEMS 0x19
301 #define RTP_MIDI_MANU_SHORT_ART 0x1a
302 #define RTP_MIDI_MANU_SHORT_BALDWIN 0x1b
303 #define RTP_MIDI_MANU_SHORT_EVENTIDE 0x1c
304 #define RTP_MIDI_MANU_SHORT_INVENTRONICS 0x1d
305 #define RTP_MIDI_MANU_SHORT_KEY_CONCEPTS 0x1e
306 #define RTP_MIDI_MANU_SHORT_CLARITY 0x1f
307 #define RTP_MIDI_MANU_SHORT_PASSAC 0x20
308 #define RTP_MIDI_MANU_SHORT_SIEL 0x21
309 #define RTP_MIDI_MANU_SHORT_SYNTHE_AXE 0x22
310 #define RTP_MIDI_MANU_SHORT_STEPP 0x23
311 #define RTP_MIDI_MANU_SHORT_HOHNER 0x24
312 #define RTP_MIDI_MANU_SHORT_CRUMAR_TWISTER 0x25
313 #define RTP_MIDI_MANU_SHORT_SOLTON 0x26
314 #define RTP_MIDI_MANU_SHORT_JELLINGHAUS_MS 0x27
315 #define RTP_MIDI_MANU_SHORT_SOUTHWORK_MUSIC_SYSTEMS 0x28
316 #define RTP_MIDI_MANU_SHORT_PPG 0x29
317 #define RTP_MIDI_MANU_SHORT_JEN 0x2a
318 #define RTP_MIDI_MANU_SHORT_SSL 0x2b
319 #define RTP_MIDI_MANU_SHORT_AUDIO_VERITRIEB 0x2c
320 #define RTP_MIDI_MANU_SHORT_NEVE_HINTON_INSTRUMENTS 0x2d
321 #define RTP_MIDI_MANU_SHORT_SOUNDTRACS 0x2e
322 #define RTP_MIDI_MANU_SHORT_ELKA_GENERAL_MUSIC 0x2f
323 #define RTP_MIDI_MANU_SHORT_DYNACORD 0x30
324 #define RTP_MIDI_MANU_SHORT_VISCOUNT 0x31
325 #define RTP_MIDI_MANU_SHORT_DRAWMER 0x32
326 #define RTP_MIDI_MANU_SHORT_CLAVIA_DIGITAL_INSTRUMENTS 0x33
327 #define RTP_MIDI_MANU_SHORT_AUDIO_ARCHITECTURE 0x34
328 #define RTP_MIDI_MANU_SHORT_GENERAL_MUSIC_CORP 0x35
329 #define RTP_MIDI_MANU_SHORT_CHEETAH 0x36
330 #define RTP_MIDI_MANU_SHORT_CTM 0x37
331 #define RTP_MIDI_MANU_SHORT_SIMMONS_UK 0x38
332 #define RTP_MIDI_MANU_SHORT_SOUNDCRAFT_ELECTRONICS 0x39
333 #define RTP_MIDI_MANU_SHORT_STEINBERG_GMBH 0x3a
334 #define RTP_MIDI_MANU_SHORT_WERSI 0x3b
335 #define RTP_MIDI_MANU_SHORT_AVAB_ELEKTRONIK_AB 0x3c
336 #define RTP_MIDI_MANU_SHORT_DIGIGRAM 0x3d
337 #define RTP_MIDI_MANU_SHORT_WALDORF 0x3e
338 #define RTP_MIDI_MANU_SHORT_QUASIMIDI 0x3f
339 #define RTP_MIDI_MANU_SHORT_KAWAI 0x40
340 #define RTP_MIDI_MANU_SHORT_ROLAND 0x41
341 #define RTP_MIDI_MANU_SHORT_KORG 0x42
342 #define RTP_MIDI_MANU_SHORT_YAMAHA 0x43
343 #define RTP_MIDI_MANU_SHORT_CASIO 0x44
344 #define RTP_MIDI_MANU_SHORT_MORIDAIRA 0x45
345 #define RTP_MIDI_MANU_SHORT_KAMIYA_STUDIO 0x46
346 #define RTP_MIDI_MANU_SHORT_AKAI 0x47
347 #define RTP_MIDI_MANU_SHORT_JAPAN_VICTOR 0x48
348 #define RTP_MIDI_MANU_SHORT_MEISOSHA 0x49
349 #define RTP_MIDI_MANU_SHORT_HOSHINO_GAKKI 0x4a
350 #define RTP_MIDI_MANU_SHORT_FUJITSU 0x4b
351 #define RTP_MIDI_MANU_SHORT_SONY 0x4c
352 #define RTP_MIDI_MANU_SHORT_NISSHIN_ONPA 0x4d
353 #define RTP_MIDI_MANU_SHORT_TEAC 0x4e
354 /* #define RTP_MIDI_MANU_SHORT_ 0x4f */
355 #define RTP_MIDI_MANU_SHORT_MATSUSHITA_ELECTRIC 0x50
356 #define RTP_MIDI_MANU_SHORT_FOSTEX 0x51
357 #define RTP_MIDI_MANU_SHORT_ZOOM 0x52
358 #define RTP_MIDI_MANU_SHORT_MIDORI_ELECTRONICS 0x53
359 #define RTP_MIDI_MANU_SHORT_MATSUSHITA_COMMUNICATION 0x54
360 #define RTP_MIDI_MANU_SHORT_SUZUKI 0x55
361 #define RTP_MIDI_MANU_SHORT_FUJI 0x56
362 #define RTP_MIDI_MANU_SHORT_ACOUSTIC_TECHNICAL_LAB 0x57
363 /* #define RTP_MIDI_MANU_SHORT_ 0x58 */
364 #define RTP_MIDI_MANU_SHORT_FAITH 0x59
365 #define RTP_MIDI_MANU_SHORT_INTERNET_CORPORATION 0x5a
366 /* #define RTP_MIDI_MANU_SHORT_ 0x5b */
367 #define RTP_MIDI_MANU_SHORT_SEEKERS_CO 0x5c
368 /* #define RTP_MIDI_MANU_SHORT_ 0x5d */
369 /* #define RTP_MIDI_MANU_SHORT_ 0x5e */
370 #define RTP_MIDI_MANU_SHORT_SD_CARD_ASSOCIATION 0x5f
371 /* #define RTP_MIDI_MANU_SHORT_ 0x60
372 #define RTP_MIDI_MANU_SHORT_ 0x61
373 #define RTP_MIDI_MANU_SHORT_ 0x62
374 #define RTP_MIDI_MANU_SHORT_ 0x63
375 #define RTP_MIDI_MANU_SHORT_ 0x64
376 #define RTP_MIDI_MANU_SHORT_ 0x65
377 #define RTP_MIDI_MANU_SHORT_ 0x66
378 #define RTP_MIDI_MANU_SHORT_ 0x67
379 #define RTP_MIDI_MANU_SHORT_ 0x68
380 #define RTP_MIDI_MANU_SHORT_ 0x69
381 #define RTP_MIDI_MANU_SHORT_ 0x6a
382 #define RTP_MIDI_MANU_SHORT_ 0x6b
383 #define RTP_MIDI_MANU_SHORT_ 0x6c
384 #define RTP_MIDI_MANU_SHORT_ 0x6d
385 #define RTP_MIDI_MANU_SHORT_ 0x6e
386 #define RTP_MIDI_MANU_SHORT_ 0x6f
387 #define RTP_MIDI_MANU_SHORT_ 0x70
388 #define RTP_MIDI_MANU_SHORT_ 0x71
389 #define RTP_MIDI_MANU_SHORT_ 0x72
390 #define RTP_MIDI_MANU_SHORT_ 0x73
391 #define RTP_MIDI_MANU_SHORT_ 0x74
392 #define RTP_MIDI_MANU_SHORT_ 0x75
393 #define RTP_MIDI_MANU_SHORT_ 0x76
394 #define RTP_MIDI_MANU_SHORT_ 0x77
395 #define RTP_MIDI_MANU_SHORT_ 0x78
396 #define RTP_MIDI_MANU_SHORT_ 0x79
397 #define RTP_MIDI_MANU_SHORT_ 0x7a
398 #define RTP_MIDI_MANU_SHORT_ 0x7b
399 #define RTP_MIDI_MANU_SHORT_ 0x7c */
400 #define RTP_MIDI_MANU_SHORT_EDUCATIONAL_USE 0x7d
401 #define RTP_MIDI_MANU_SHORT_NON_REALTIME_UNIVERSAL 0x7e
402 #define RTP_MIDI_MANU_SHORT_REALTIME_UNIVERSAL 0x7f
405 /* List of long MIDI-manufacturer-IDs - needs to be completed! */
406 /* North American Manufacturers */
407 /* #define RTP_MIDI_MANU_LONG_TIME_ 0x0000 */
408 #define RTP_MIDI_MANU_LONG_TIME_WARNER_INTERACTIVE 0x0001
409 #define RTP_MIDI_MANU_LONG_ADVANCED_GRAVIS_COMP 0x0002
410 #define RTP_MIDI_MANU_LONG_MEDIA_VISION 0x0003
411 #define RTP_MIDI_MANU_LONG_DORNES_RESEARCH_GROUP 0x0004
412 #define RTP_MIDI_MANU_LONG_KMUSE 0x0005
413 #define RTP_MIDI_MANU_LONG_STYPHER 0x0006
414 #define RTP_MIDI_MANU_LONG_DIGITAL_MUSIC_CORPORATION 0x0007
415 #define RTP_MIDI_MANU_LONG_IOTA_SYSTEMS 0x0008
416 #define RTP_MIDI_MANU_LONG_NEW_ENGLAND_DIGITAL 0x0009
417 #define RTP_MIDI_MANU_LONG_ARTISYN 0x000a
418 #define RTP_MIDI_MANU_LONG_IVL_TECHNOLOGIES 0x000b
419 #define RTP_MIDI_MANU_LONG_SOUTHERN_MUSIC_SYSTEMS 0x000c
420 #define RTP_MIDI_MANU_LONG_LAKE_BUTLER_SOUND_COMPANY 0x000d
421 #define RTP_MIDI_MANU_LONG_ALESIS 0x000e
422 #define RTP_MIDI_MANU_LONG_SOUND_CREATION 0x000f
423 #define RTP_MIDI_MANU_LONG_DOD_ELECTRONICS 0x0010
424 #define RTP_MIDI_MANU_LONG_STUDER_EDITECH 0x0011
425 #define RTP_MIDI_MANU_LONG_SONUS 0x0012
426 #define RTP_MIDI_MANU_LONG_TEMPORAL_ACUITY_PRODUCTS 0x0013
427 #define RTP_MIDI_MANU_LONG_PERFECT_FRETWORKS 0x0014
428 #define RTP_MIDI_MANU_LONG_KAT 0x0015
429 #define RTP_MIDI_MANU_LONG_OPCODE 0x0016
430 #define RTP_MIDI_MANU_LONG_RANE_CORP 0x0017
431 #define RTP_MIDI_MANU_LONG_SPATIAL_SOUND_ANADI_INC 0x0018
432 #define RTP_MIDI_MANU_LONG_KMX 0x0019
433 #define RTP_MIDI_MANU_LONG_ALLEN_AND_HEATH_BRENNEL 0x001a
434 #define RTP_MIDI_MANU_LONG_PEAVEY 0x001b
435 #define RTP_MIDI_MANU_LONG_360_SYSTEMS 0x001c
436 #define RTP_MIDI_MANU_LONG_SPECTRUM_DESIGN_DEVELOPMENT 0x001d
437 #define RTP_MIDI_MANU_LONG_MARQUIS_MUSIC 0x001e
438 #define RTP_MIDI_MANU_LONG_ZETA_SYSTEMS 0x001f
439 #define RTP_MIDI_MANU_LONG_AXXES 0x0020
440 #define RTP_MIDI_MANU_LONG_ORBAN 0x0021
441 #define RTP_MIDI_MANU_LONG_INDIAN_VALLEY 0x0022
442 #define RTP_MIDI_MANU_LONG_TRITON 0x0023
443 #define RTP_MIDI_MANU_LONG_KTI 0x0024
444 #define RTP_MIDI_MANU_LONG_BREAKAWAY_TECHNOLOGIES 0x0025
445 #define RTP_MIDI_MANU_LONG_CAE 0x0026
446 #define RTP_MIDI_MANU_LONG_HARRISON_SYSTEMS_INC 0x0027
447 #define RTP_MIDI_MANU_LONG_FUTURE_LAB_MARK_KUO 0x0028
448 #define RTP_MIDI_MANU_LONG_ROCKTRON_CORP 0x0029
449 #define RTP_MIDI_MANU_LONG_PIANODISC 0x002a
450 #define RTP_MIDI_MANU_LONG_CANNON_RESEARCH_GROUP 0x002b
451 /* #define RTP_MIDI_MANU_LONG_ 0x002c */
452 #define RTP_MIDI_MANU_LONG_RODGERS_INSTRUMENTS_CORP 0x002d
453 #define RTP_MIDI_MANU_LONG_BLUE_SKY_LOGIC 0x002e
454 #define RTP_MIDI_MANU_LONG_ENCORE_ELECTRONICS 0x002f
455 #define RTP_MIDI_MANU_LONG_UPTOWN 0x0030
456 #define RTP_MIDI_MANU_LONG_VOCE 0x0031
457 #define RTP_MIDI_MANU_LONG_CTI_AUDIO_INC 0x0032
458 #define RTP_MIDI_MANU_LONG_SS_RESEARCH 0x0033
459 #define RTP_MIDI_MANU_LONG_BRODERBUND_SOFTWARE 0x0034
460 #define RTP_MIDI_MANU_LONG_ALLEN_ORGAN_CO 0x0035
461 /* #define RTP_MIDI_MANU_LONG_ 0x0036 */
462 #define RTP_MIDI_MANU_LONG_MUSIC_QUEST 0x0037
463 #define RTP_MIDI_MANU_LONG_APHEX 0x0038
464 #define RTP_MIDI_MANU_LONG_GALLIEN_KRUEGER 0x0039
465 #define RTP_MIDI_MANU_LONG_IBM 0x003a
466 #define RTP_MIDI_MANU_LONG_MARK_OF_THE_UNICORN 0x003b
467 #define RTP_MIDI_MANU_LONG_HOTZ_INSTRUMENTS_TECH 0x003c
468 #define RTP_MIDI_MANU_LONG_ETA_LIGHTING 0x003d
469 #define RTP_MIDI_MANU_LONG_NSI_CORPORATION 0x003e
470 #define RTP_MIDI_MANU_LONG_ADLIB_INC 0x003f
471 #define RTP_MIDI_MANU_LONG_RICHMOND_SOUND_DESIGN 0x0040
472 #define RTP_MIDI_MANU_LONG_MICROSOFT 0x0041
473 #define RTP_MIDI_MANU_LONG_THE_SOFTWARE_TOOLWORKS 0x0042
474 #define RTP_MIDI_MANU_LONG_RJMG_NICHE 0x0043
475 #define RTP_MIDI_MANU_LONG_INTONE 0x0044
476 #define RTP_MIDI_MANU_LONG_ADVANCED_REMOTE_TECH 0x0045
477 /* #define RTP_MIDI_MANU_LONG_ 0x0046 */
478 #define RTP_MIDI_MANU_LONG_GT_ELECTRONICS_GROOVE_TUBES 0x0047
479 #define RTP_MIDI_MANU_LONG_INTERMIDI 0x0048
480 #define RTP_MIDI_MANU_LONG_TIMELINE_VISTA 0x0049
481 #define RTP_MIDI_MANU_LONG_MESA_BOOGIE 0x004a
482 /* #define RTP_MIDI_MANU_LONG_ 0x004b */
483 #define RTP_MIDI_MANU_LONG_SEQUOIA_DEVELOPMENT 0x004c
484 #define RTP_MIDI_MANU_LONG_STUDIO_ELECTRONICS 0x004d
485 #define RTP_MIDI_MANU_LONG_EUPHONIX 0x004e
486 #define RTP_MIDI_MANU_LONG_INTERMIDI2 0x004f
487 #define RTP_MIDI_MANU_LONG_MIDI_SOLUTIONS 0x0050
488 #define RTP_MIDI_MANU_LONG_3DO_COMPANY 0x0051
489 #define RTP_MIDI_MANU_LONG_LIGHTWAVE_RESEARCH 0x0052
490 #define RTP_MIDI_MANU_LONG_MICROW 0x0053
491 #define RTP_MIDI_MANU_LONG_SPECTRAL_SYNTHESIS 0x0054
492 #define RTP_MIDI_MANU_LONG_LONE_WOLF 0x0055
493 #define RTP_MIDI_MANU_LONG_STUDIO_TECHNOLOGIES 0x0056
494 #define RTP_MIDI_MANU_LONG_PETERSON_EMP 0x0057
495 #define RTP_MIDI_MANU_LONG_ATARI 0x0058
496 #define RTP_MIDI_MANU_LONG_MARION_SYSTEMS 0x0059
497 #define RTP_MIDI_MANU_LONG_DESIGN_EVENT 0x005a
498 #define RTP_MIDI_MANU_LONG_WINJAMMER_SOFTWARE 0x005b
499 #define RTP_MIDI_MANU_LONG_ATT_BELL_LABS 0x005c
500 /*# define RTP_MIDI_MANU_LONG_ 0x005d */
501 #define RTP_MIDI_MANU_LONG_SYMETRIX 0x005e
502 #define RTP_MIDI_MANU_LONG_MIDI_THE_WORLD 0x005f
503 #define RTP_MIDI_MANU_LONG_DESPER_PRODUCTS 0x0060
504 #define RTP_MIDI_MANU_LONG_MICROS_N_MIDI 0x0061
505 #define RTP_MIDI_MANU_LONG_ACCORDIANS_INTL 0x0062
506 #define RTP_MIDI_MANU_LONG_EUPHONICS 0x0063
507 #define RTP_MIDI_MANU_LONG_MUSONIX 0x0064
508 #define RTP_MIDI_MANU_LONG_TURTLE_BEACH_SYSTEMS 0x0065
509 #define RTP_MIDI_MANU_LONG_MACKIE_DESIGNS 0x0066
510 #define RTP_MIDI_MANU_LONG_COMPUSERVE 0x0067
511 #define RTP_MIDI_MANU_LONG_BES_TECHNOLOGIES 0x0068
512 #define RTP_MIDI_MANU_LONG_QRS_MUSIC_ROLLS 0x0069
513 #define RTP_MIDI_MANU_LONG_P_G_MUSIC 0x006a
514 #define RTP_MIDI_MANU_LONG_SIERRA_SEMICONDUCTOR 0x006b
515 #define RTP_MIDI_MANU_LONG_EPIGRAF_AUDIO_VISUAL 0x006c
516 #define RTP_MIDI_MANU_LONG_ELECTRONICS_DIVERSIFIED 0x006d
517 #define RTP_MIDI_MANU_LONG_TUNE_1000 0x006e
518 #define RTP_MIDI_MANU_LONG_ADVANCED_MICRO_DEVICES 0x006f
519 #define RTP_MIDI_MANU_LONG_MEDIAMATION 0x0070
520 #define RTP_MIDI_MANU_LONG_SABINE_MUSIC 0x0071
521 #define RTP_MIDI_MANU_LONG_WOOG_LABS 0x0072
522 #define RTP_MIDI_MANU_LONG_MIRCOPOLIS 0x0073
523 #define RTP_MIDI_MANU_LONG_TA_HORNG_MUSICAL_INSTRUMENT 0x0074
524 #define RTP_MIDI_MANU_LONG_ETEK_LABS_FORTE_TECH 0x0075
525 #define RTP_MIDI_MANU_LONG_ELECTRO_VOICE 0x0076
526 #define RTP_MIDI_MANU_LONG_MIDISOFT_CORPORATION 0x0077
527 #define RTP_MIDI_MANU_LONG_QSOUND_LABS 0x0078
528 #define RTP_MIDI_MANU_LONG_WESTREX 0x0079
529 #define RTP_MIDI_MANU_LONG_NVIDIA 0x007a
530 #define RTP_MIDI_MANU_LONG_ESS_TECHNOLOGY 0x007b
531 #define RTP_MIDI_MANU_LONG_MEDIATRIX_PERIPHERALS 0x007c
532 #define RTP_MIDI_MANU_LONG_BROOKTREE_CORP 0x007d
533 #define RTP_MIDI_MANU_LONG_OTARI_CORP 0x007e
534 #define RTP_MIDI_MANU_LONG_KEY_ELECTRONICS 0x007f
535 /* ---break--- */
536 #define RTP_MIDI_MANU_LONG_SHURE_INCORPORATED 0x0100
537 #define RTP_MIDI_MANU_LONG_AURA_SOUND 0x0101
538 #define RTP_MIDI_MANU_LONG_CRYSTAL_SEMICONDUCTOR 0x0102
539 #define RTP_MIDI_MANU_LONG_CONEXANT_ROCKWELL 0x0103
540 #define RTP_MIDI_MANU_LONG_SILICON_GRAPHICS 0x0104
541 #define RTP_MIDI_MANU_LONG_MAUDIO_MIDIMAN 0x0105
542 #define RTP_MIDI_MANU_LONG_PRESONUS 0x0106
543 /* #define RTP_MIDI_MANU_LONG_ 0x0107 */
544 #define RTP_MIDI_MANU_LONG_TOPAZ_ENTERPRISES 0x0108
545 #define RTP_MIDI_MANU_LONG_CAST_LIGHTING 0x0109
546 #define RTP_MIDI_MANU_LONG_MICROSOFT_CONSUMER_DIVISION 0x010a
547 #define RTP_MIDI_MANU_LONG_SONIC_FOUNDRY 0x010b
548 #define RTP_MIDI_MANU_LONG_LINE6_FAST_FORWARD 0x010c
549 #define RTP_MIDI_MANU_LONG_BEATNIK_INC 0x010d
550 #define RTP_MIDI_MANU_LONG_VAN_KOEVERING_COMPANY 0x010e
551 #define RTP_MIDI_MANU_LONG_ALTECH_SYSTEMS 0x010f
552 #define RTP_MIDI_MANU_LONG_S_S_RESEARCH 0x0110
553 #define RTP_MIDI_MANU_LONG_VLSI_TECHNOLOGY 0x0111
554 #define RTP_MIDI_MANU_LONG_CHROMATIC_RESEARCH 0x0112
555 #define RTP_MIDI_MANU_LONG_SAPPHIRE 0x0113
556 #define RTP_MIDI_MANU_LONG_IDRC 0x0114
557 #define RTP_MIDI_MANU_LONG_JUSTONIC_TUNING 0x0115
558 #define RTP_MIDI_MANU_LONG_TORCOMP_RESEARCH_INC 0x0116
559 #define RTP_MIDI_MANU_LONG_NEWTEK_INC 0x0117
560 #define RTP_MIDI_MANU_LONG_SOUND_SCULPTURE 0x0118
561 #define RTP_MIDI_MANU_LONG_WALKER_TECHNICAL 0x0119
562 #define RTP_MIDI_MANU_LONG_DIGITAL_HARMONY 0x011a
563 #define RTP_MIDI_MANU_LONG_INVISION_INTERACTIVE 0x011b
564 #define RTP_MIDI_MANU_LONG_TSQUARE_DESIGN 0x011c
565 #define RTP_MIDI_MANU_LONG_NEMESYS_MUSIC_TECHNOLOGY 0x011d
566 #define RTP_MIDI_MANU_LONG_DBX_PROFESSIONAL_HARMAN_INTL 0x011e
567 #define RTP_MIDI_MANU_LONG_SYNDYNE_CORPORATION 0x011f
568 #define RTP_MIDI_MANU_LONG_BITHEADZ 0x0120
569 #define RTP_MIDI_MANU_LONG_CAKEWALK_MUSIC_SOFTWARE 0x0121
570 #define RTP_MIDI_MANU_LONG_ANALOG_DEVICES 0x0122
571 #define RTP_MIDI_MANU_LONG_NATIONAL_SEMICONDUCTOR 0x0123
572 #define RTP_MIDI_MANU_LONG_BOOM_THEORY 0x0124
573 #define RTP_MIDI_MANU_LONG_VIRTUAL_DSP_CORPORATION 0x0125
574 #define RTP_MIDI_MANU_LONG_ANTARES_SYSTEMS 0x0126
575 #define RTP_MIDI_MANU_LONG_ANGEL_SOFTWARE 0x0127
576 #define RTP_MIDI_MANU_LONG_ST_LOUIS_MUSIC 0x0128
577 #define RTP_MIDI_MANU_LONG_LYRRUS_DBA_GVOX 0x0129
578 #define RTP_MIDI_MANU_LONG_ASHLEY_AUDIO_INC 0x012a
579 #define RTP_MIDI_MANU_LONG_VARILITE_INC 0x012b
580 #define RTP_MIDI_MANU_LONG_SUMMIT_AUDIO_INC 0x012c
581 #define RTP_MIDI_MANU_LONG_AUREAL_SEMICONDUCTOR_INC 0x012d
582 #define RTP_MIDI_MANU_LONG_SEASOUND_LLC 0x012e
583 #define RTP_MIDI_MANU_LONG_US_ROBOTICS 0x012f
584 #define RTP_MIDI_MANU_LONG_AURISIS_RESEARCH 0x0130
585 #define RTP_MIDI_MANU_LONG_NEARFIELD_MULTIMEDIA 0x0131
586 #define RTP_MIDI_MANU_LONG_FM7_INC 0x0132
587 #define RTP_MIDI_MANU_LONG_SWIVEL_SYSTEMS 0x0133
588 #define RTP_MIDI_MANU_LONG_HYPERACTIVE_AUDIO_SYSTEMS 0x0134
589 #define RTP_MIDI_MANU_LONG_MIDILITE_CASTE_STUDIO_PROD 0x0135
590 #define RTP_MIDI_MANU_LONG_RADIKAL_TECHNOLOGIES 0x0136
591 #define RTP_MIDI_MANU_LONG_ROGER_LINN_DESIGN 0x0137
592 #define RTP_MIDI_MANU_LONG_TCHELION_VOCAL_TECHNOLOGIES 0x0138
593 #define RTP_MIDI_MANU_LONG_EVENT_ELECTRONICS 0x0139
594 #define RTP_MIDI_MANU_LONG_SONIC_NETWORK_INC 0x013a
595 #define RTP_MIDI_MANU_LONG_REALTIME_MUSIC_SOLUTIONS 0x013b
596 #define RTP_MIDI_MANU_LONG_APOGEE_DIGITAL 0x013c
597 #define RTP_MIDI_MANU_LONG_CLASSICAL_ORGANS_INC 0x013d
598 #define RTP_MIDI_MANU_LONG_MICROTOOLS_INC 0x013e
599 #define RTP_MIDI_MANU_LONG_NUMARK_INDUSTRIES 0x013f
600 #define RTP_MIDI_MANU_LONG_FRONTIER_DESIGN_GROUP_LLC 0x0140
601 #define RTP_MIDI_MANU_LONG_RECORDARE_LLC 0x0141
602 #define RTP_MIDI_MANU_LONG_STARR_LABS 0x0142
603 #define RTP_MIDI_MANU_LONG_VOYAGER_SOUND_INC 0x0143
604 #define RTP_MIDI_MANU_LONG_MANIFOLD_LABS 0x0144
605 #define RTP_MIDI_MANU_LONG_AVIOM_INC 0x0145
606 #define RTP_MIDI_MANU_LONG_MIXMEISTER_TECHNOLOGY 0x0146
607 #define RTP_MIDI_MANU_LONG_NOTATION_SOFTWARE 0x0147
608 #define RTP_MIDI_MANU_LONG_MERCURIAL_COMMUNICATIONS 0x0148
609 #define RTP_MIDI_MANU_LONG_WAVE_ARTS 0x0149
610 #define RTP_MIDI_MANU_LONG_LOGIC_SEQUENCING_DEVICES 0x014a
611 #define RTP_MIDI_MANU_LONG_AXESS_ELECTRONICS 0x014b
612 #define RTP_MIDI_MANU_LONG_MUSE_RESEARCH 0x014c
613 #define RTP_MIDI_MANU_LONG_OPEN_LABS 0x014d
614 #define RTP_MIDI_MANU_LONG_GUILLEMOT_RD_INC 0x014e
615 #define RTP_MIDI_MANU_LONG_SAMSON_TECHNOLOGIES 0x014f
616 #define RTP_MIDI_MANU_LONG_ELECTRONIC_THEATRE_CONTROLS 0x0150
617 #define RTP_MIDI_MANU_LONG_RESEARCH_IN_MOTION 0x0151
618 #define RTP_MIDI_MANU_LONG_MOBILEER 0x0152
619 #define RTP_MIDI_MANU_LONG_SYNTHOGY 0x0153
620 #define RTP_MIDI_MANU_LONG_LYNX_STUDIO_TECHNOLOGY_INC 0x0154
621 #define RTP_MIDI_MANU_LONG_DAMAGE_CONTROL_ENGINEERING 0x0155
622 #define RTP_MIDI_MANU_LONG_YOST_ENGINEERING_INC 0x0156
623 #define RTP_MIDI_MANU_LONG_BROOKS_FORSMAN_DESIGNS_LLC 0x0157
624 #define RTP_MIDI_MANU_LONG_MAGNEKEY 0x0158
625 #define RTP_MIDI_MANU_LONG_GARRITAN_CORP 0x0159
626 #define RTP_MIDI_MANU_LONG_PLOQUE_ART_ET_TECHNOLOGIE 0x015a
627 #define RTP_MIDI_MANU_LONG_RJM_MUSIC_TECHNOLOGY 0x015b
628 #define RTP_MIDI_MANU_LONG_CUSTOM_SOLUTIONS_SOFTWARE 0x015c
629 #define RTP_MIDI_MANU_LONG_SONARCANA_LLC 0x015d
630 #define RTP_MIDI_MANU_LONG_CENTRANCE 0x015e
631 #define RTP_MIDI_MANU_LONG_KESUMO_LLC 0x015f
632 #define RTP_MIDI_MANU_LONG_STANTON 0x0160
633 #define RTP_MIDI_MANU_LONG_LIVID_INSTRUMENTS 0x0161
634 #define RTP_MIDI_MANU_LONG_FIRST_ACT_745_MEDIA 0x0162
635 #define RTP_MIDI_MANU_LONG_PYGRAPHICS_INC 0x0163
636 #define RTP_MIDI_MANU_LONG_PANADIGM_INNOVATIONS_LTD 0x0164
637 #define RTP_MIDI_MANU_LONG_AVEDIS_ZILDJIAN_CO 0x0165
638 #define RTP_MIDI_MANU_LONG_AUVITAL_MUSIC_CORP 0x0166
639 #define RTP_MIDI_MANU_LONG_INSPIRED_INSTRUMENTS_INC 0x0167
640 #define RTP_MIDI_MANU_LONG_CHRIS_GRIGG_DESIGNS 0x0168
641 #define RTP_MIDI_MANU_LONG_SLATE_DIGITAL_LLC 0x0169
642 #define RTP_MIDI_MANU_LONG_MIXWARE 0x016a
643 #define RTP_MIDI_MANU_LONG_SOCIAL_ENTROPY 0x016b
644 #define RTP_MIDI_MANU_LONG_SOURCE_AUDIO_LLC 0x016c
645 #define RTP_MIDI_MANU_LONG_RESERVED_016d 0x016d
646 #define RTP_MIDI_MANU_LONG_RESERVED_016e 0x016e
647 #define RTP_MIDI_MANU_LONG_RESERVED_016f 0x016f
648 #define RTP_MIDI_MANU_LONG_AMERICAN_AUDIO_DJ 0x0170
649 #define RTP_MIDI_MANU_LONG_MEGA_CONTROL_SYSTEMS 0x0171
650 #define RTP_MIDI_MANU_LONG_KILPATRICK_AUDIO 0x0172
651 #define RTP_MIDI_MANU_LONG_IKINGDOM_CORP 0x0173
652 #define RTP_MIDI_MANU_LONG_FRACTAL_AUDIO 0x0174
653 #define RTP_MIDI_MANU_LONG_NETLOGIC_MICROSYSTEMS 0x0175
654 #define RTP_MIDI_MANU_LONG_MUSIC_COMPUTING 0x0176
655 #define RTP_MIDI_MANU_LONG_NEKTAR_TECHNOLOGY_INC 0x0177
656 #define RTP_MIDI_MANU_LONG_ZENPH_SOUND_INNOVATIONS 0x0178
657 #define RTP_MIDI_MANU_LONG_DJTECHTOOLS_COM 0x0179
658 #define RTP_MIDI_MANU_LONG_RESERVED_017a 0x017a
660 /* European manufacturers */
661 #define RTP_MIDI_MANU_LONG_DREAM 0x2000
662 #define RTP_MIDI_MANU_LONG_STRAND_LIGHTING 0x2001
663 #define RTP_MIDI_MANU_LONG_AMEK_SYSTEMS 0x2002
664 #define RTP_MIDI_MANU_LONG_CASA_DI_RISPARMIO_DI_LORETO 0x2003
665 #define RTP_MIDI_MANU_LONG_BOHM_ELECTRONIC 0x2004
666 #define RTP_MIDI_MANU_LONG_SYNTEC_DIGITAL_AUDIO 0x2005
667 #define RTP_MIDI_MANU_LONG_TRIDENT_AUDIO 0x2006
668 #define RTP_MIDI_MANU_LONG_REAL_WORLD_STUDIO 0x2007
669 #define RTP_MIDI_MANU_LONG_EVOLUTION_SYNTHESIS 0x2008
670 #define RTP_MIDI_MANU_LONG_YES_TECHNOLOGY 0x2009
671 #define RTP_MIDI_MANU_LONG_AUDIOMATICA 0x200a
672 #define RTP_MIDI_MANU_LONG_BONTEMPI_FARFISA 0x200b
673 #define RTP_MIDI_MANU_LONG_FBT_ELETTRONICA 0x200c
674 #define RTP_MIDI_MANU_LONG_MIDITEMP 0x200d
675 #define RTP_MIDI_MANU_LONG_LA_AUDIO_LARKING_AUDIO 0x200e
676 #define RTP_MIDI_MANU_LONG_ZERO_88_LIGHTING_LIMITED 0x200f
677 #define RTP_MIDI_MANU_LONG_MICON_AUDIO_ELECTRONICS_GMBH 0x2010
678 #define RTP_MIDI_MANU_LONG_FOREFRONT_TECHNOLOGY 0x2011
679 #define RTP_MIDI_MANU_LONG_STUDIO_AUDIO_AND_VIDEO_LTD 0x2012
680 #define RTP_MIDI_MANU_LONG_KENTON_ELECTRONICS 0x2013
681 #define RTP_MIDI_MANU_LONG_CELCO_DIVISON_OF_ELECTRONICS 0x2014
682 #define RTP_MIDI_MANU_LONG_ADB 0x2015
683 #define RTP_MIDI_MANU_LONG_MARSHALL_PRODUCTS 0x2016
684 #define RTP_MIDI_MANU_LONG_DDA 0x2017
685 #define RTP_MIDI_MANU_LONG_BBS 0x2018
686 #define RTP_MIDI_MANU_LONG_MA_LIGHTING_TECHNOLOGY 0x2019
687 #define RTP_MIDI_MANU_LONG_FATAR 0x201a
688 #define RTP_MIDI_MANU_LONG_QSC_AUDIO 0x201b
689 #define RTP_MIDI_MANU_LONG_ARTISAN_CLASSIC_ORGAN 0x201c
690 #define RTP_MIDI_MANU_LONG_ORLA_SPA 0x201d
691 #define RTP_MIDI_MANU_LONG_PINNACLE_AUDIO 0x201e
692 #define RTP_MIDI_MANU_LONG_TC_ELECTRONICS 0x201f
693 #define RTP_MIDI_MANU_LONG_DOEPFER_MUSIKELEKTRONIK 0x2020
694 #define RTP_MIDI_MANU_LONG_CREATIVE_TECHNOLOGY_PTE 0x2021
695 #define RTP_MIDI_MANU_LONG_MINAMI_SEIYDDO 0x2022
696 #define RTP_MIDI_MANU_LONG_GOLDSTAR 0x2023
697 #define RTP_MIDI_MANU_LONG_MIDISOFT_SAS_DI_M_CIMA 0x2024
698 #define RTP_MIDI_MANU_LONG_SAMICK 0x2025
699 #define RTP_MIDI_MANU_LONG_PENNY_AND_GILES 0x2026
700 #define RTP_MIDI_MANU_LONG_ACORN_COMPUTER 0x2027
701 #define RTP_MIDI_MANU_LONG_LSC_ELECTRONICS 0x2028
702 #define RTP_MIDI_MANU_LONG_NOVATION_EMS 0x2029
703 #define RTP_MIDI_MANU_LONG_SAMKYUNG_MECHATRONICS 0x202a
704 #define RTP_MIDI_MANU_LONG_MEDELI_ELECTRONICS_CO 0x202b
705 #define RTP_MIDI_MANU_LONG_CHARLIE_LAB_SRL 0x202c
706 #define RTP_MIDI_MANU_LONG_BLUE_CHIP_MUSIC_TECHNOLOGY 0x202d
707 #define RTP_MIDI_MANU_LONG_BEE_OH_CORP 0x202e
708 #define RTP_MIDI_MANU_LONG_LG_SEMICON_AMERICA 0x202f
709 #define RTP_MIDI_MANU_LONG_TESI 0x2030
710 #define RTP_MIDI_MANU_LONG_EMAGIC 0x2031
711 #define RTP_MIDI_MANU_LONG_BEHRINGER_GMBH 0x2032
712 #define RTP_MIDI_MANU_LONG_ACCESS_MUSIC_ELECTRONICS 0x2033
713 #define RTP_MIDI_MANU_LONG_SYNOPTIC 0x2034
714 #define RTP_MIDI_MANU_LONG_HANMESOFT_CORP 0x2035
715 #define RTP_MIDI_MANU_LONG_TERRATEC_ELECTRONIC_GMBH 0x2036
716 #define RTP_MIDI_MANU_LONG_PROEL_SPA 0x2037
717 #define RTP_MIDI_MANU_LONG_IBK_MIDI 0x2038
718 #define RTP_MIDI_MANU_LONG_IRCAM 0x2039
719 #define RTP_MIDI_MANU_LONG_PROPELLERHEAD_SOFTWARE 0x203a
720 #define RTP_MIDI_MANU_LONG_RED_SOUND_SYSTEMS_LTD 0x203b
721 #define RTP_MIDI_MANU_LONG_ELEKTRON_ESI_AB 0x203c
722 #define RTP_MIDI_MANU_LONG_SINTEFEX_AUDIO 0x203d
723 #define RTP_MIDI_MANU_LONG_MAM_MUSIC_AND_MORE 0x203e
724 #define RTP_MIDI_MANU_LONG_AMSARO_GMBH 0x203f
725 #define RTP_MIDI_MANU_LONG_CDS_ADVANCED_TECHNOLOGY_BV 0x2040
726 #define RTP_MIDI_MANU_LONG_TOUCHED_BY_SOUND_GMBH 0x2041
727 #define RTP_MIDI_MANU_LONG_DSP_ARTS 0x2042
728 #define RTP_MIDI_MANU_LONG_PHIL_REES_MUSIC_TECH 0x2043
729 #define RTP_MIDI_MANU_LONG_STAMER_MUSIKANLAGEN_GMBH 0x2044
730 #define RTP_MIDI_MANU_LONG_MUSICAL_MUNTANER_SA_DBA 0x2045
731 #define RTP_MIDI_MANU_LONG_CMEXX_SOFTWARE 0x2046
732 #define RTP_MIDI_MANU_LONG_KLAVIS_TECHNOLOGIES 0x2047
733 #define RTP_MIDI_MANU_LONG_NOTEHEADS_AB 0x2048
734 #define RTP_MIDI_MANU_LONG_ALGORITHMIX 0x2049
735 #define RTP_MIDI_MANU_LONG_SKRYDSTRUP_RD 0x204a
736 #define RTP_MIDI_MANU_LONG_PROFRESSIONAL_AUDIO_COMPANY 0x204b
737 #define RTP_MIDI_MANU_LONG_DBTECH_MADWAVES 0x204c
738 #define RTP_MIDI_MANU_LONG_VERMONA 0x204d
739 #define RTP_MIDI_MANU_LONG_NOKIA 0x204e
740 #define RTP_MIDI_MANU_LONG_WAVE_IDEA 0x204f
741 #define RTP_MIDI_MANU_LONG_HARTMANN_GMBH 0x2050
742 #define RTP_MIDI_MANU_LONG_LIONS_TRACK 0x2051
743 #define RTP_MIDI_MANU_LONG_ANALOGUE_SYSTEMS 0x2052
744 #define RTP_MIDI_MANU_LONG_FOCAL_JMLAB 0x2053
745 #define RTP_MIDI_MANU_LONG_RINGWAY_ELECTRONICS 0x2054
746 #define RTP_MIDI_MANU_LONG_FAITH_TECHNOLOGIES_DIGIPLUG 0x2055
747 #define RTP_MIDI_MANU_LONG_SHOWWORKS 0x2056
748 #define RTP_MIDI_MANU_LONG_MANIKIN_ELECTRONIC 0x2057
749 #define RTP_MIDI_MANU_LONG_1_COME_TECH 0x2058
750 #define RTP_MIDI_MANU_LONG_PHONIC_CORP 0x2059
751 #define RTP_MIDI_MANU_LONG_LAKE_TECHNOLOGY 0x205a
752 #define RTP_MIDI_MANU_LONG_SILANSYS_TECHNOLOGIES 0x205b
753 #define RTP_MIDI_MANU_LONG_WINBOND_ELECTRONICS 0x205c
754 #define RTP_MIDI_MANU_LONG_CINETIX_MEDIEN_UND_INTERFACE 0x205d
755 #define RTP_MIDI_MANU_LONG_AG_SOLUTIONI_DIGITALI 0x205e
756 #define RTP_MIDI_MANU_LONG_SEQUENTIX_MUSIC_SYSTEMS 0x205f
757 #define RTP_MIDI_MANU_LONG_ORAM_PRO_AUDIO 0x2060
758 #define RTP_MIDI_MANU_LONG_BE4_LTD 0x2061
759 #define RTP_MIDI_MANU_LONG_INFECTION_MUSIC 0x2062
760 #define RTP_MIDI_MANU_LONG_CENTRAL_MUSIC_CO_CME 0x2063
761 #define RTP_MIDI_MANU_LONG_GENOQS_MACHINES 0x2064
762 #define RTP_MIDI_MANU_LONG_MEDIALON 0x2065
763 #define RTP_MIDI_MANU_LONG_WAVES_AUDIO_LTD 0x2066
764 #define RTP_MIDI_MANU_LONG_JERASH_LABS 0x2067
765 #define RTP_MIDI_MANU_LONG_DA_FACT 0x2068
766 #define RTP_MIDI_MANU_LONG_ELBY_DESIGNS 0x2069
767 #define RTP_MIDI_MANU_LONG_SPECTRAL_AUDIO 0x206a
768 #define RTP_MIDI_MANU_LONG_ARTURIA 0x206b
769 #define RTP_MIDI_MANU_LONG_VIXID 0x206c
770 #define RTP_MIDI_MANU_LONG_C_THRU_MUSIC 0x206d
771 #define RTP_MIDI_MANU_LONG_YA_HORNG_ELECTRONIC_CO_LTD 0x206e
772 #define RTP_MIDI_MANU_LONG_SM_PRO_AUDIO 0x206f
773 #define RTP_MIDI_MANU_LONG_OTO_MACHINES 0x2070
774 #define RTP_MIDI_MANU_LONG_ELZAB_SA_G_LAB 0x2071
775 #define RTP_MIDI_MANU_LONG_BLACKSTAR_AMPLIFICATION_LTD 0x2072
776 #define RTP_MIDI_MANU_LONG_M3I_TECHNOLOGIES_GMBH 0x2073
777 #define RTP_MIDI_MANU_LONG_GEMALTO 0x2074
778 #define RTP_MIDI_MANU_LONG_PROSTAGE_SL 0x2075
779 #define RTP_MIDI_MANU_LONG_TEENAGE_ENGINEERING 0x2076
780 #define RTP_MIDI_MANU_LONG_TOBIAS_ERICHSEN 0x2077
781 #define RTP_MIDI_MANU_LONG_NIXER_LTD 0x2078
782 #define RTP_MIDI_MANU_LONG_HANPIN_ELECTRON_CO_LTD 0x2079
783 #define RTP_MIDI_MANU_LONG_MIDI_HARDWARE_R_SOWA 0x207a
785 #define RTP_MIDI_MANU_LONG_BEYOND_MUSIC_INDUSTRIAL_LTD 0x207b
786 #define RTP_MIDI_MANU_LONG_KISS_BOX_BV 0x207c
787 #define RTP_MIDI_MANU_LONG_MISA_DIGITAL_TECHNOLOGIES_LTD 0x207d
788 #define RTP_MIDI_MANU_LONG_AI_MUSICS_TECHNOLOGY_INC 0x207e
789 #define RTP_MIDI_MANU_LONG_SERATO_INC_LP 0x207f
790 #define RTP_MIDI_MANU_LONG_LIMEX_MUSIC_HANDLES_GMBH 0x2100
791 #define RTP_MIDI_MANU_LONG_KYODDAY_TOKAI 0x2101
792 #define RTP_MIDI_MANU_LONG_MUTABLE_INSTRUMENTS 0x2102
793 #define RTP_MIDI_MANU_LONG_PRESONUS_SOFTWARE_LTD 0x2103
794 #define RTP_MIDI_MANU_LONG_XIRING 0x2104
795 #define RTP_MIDI_MANU_LONG_FAIRLIGHT_INTRUMENTS_PTY_LTD 0x2105
796 #define RTP_MIDI_MANU_LONG_MUSICOM_LAB 0x2106
797 #define RTP_MIDI_MANU_LONG_VACO_LOCO 0x2107
798 #define RTP_MIDI_MANU_LONG_RWA_HONG_KONG_LIMITED 0x2108
800 /* Japanese Manufacturers */
801 #define RTP_MIDI_MANU_LONG_CRIMSON_TECHNOLOGY_INC 0x4000
802 #define RTP_MIDI_MANU_LONG_SOFTBANK_MOBILE_CORP 0x4001
803 /*#define RTP_MIDI_MANU_LONG_*/
804 #define RTP_MIDI_MANU_LONG_DM_HOLDINGS_INC 0x4003
807 #define RTP_MIDI_SYSEX_COMMON_NRT_DLS_LEVEL1_ON 0x01
808 #define RTP_MIDI_SYSEX_COMMON_NRT_DLS_LEVEL1_OFF 0x02
809 #define RTP_MIDI_SYSEX_COMMON_NRT_DLS_LEVEL1_VOICE_ALLOCATION_OFF 0x03
810 #define RTP_MIDI_SYSEX_COMMON_NRT_DLS_LEVEL1_VOICE_ALLOCATION_ON 0x04
813 #define RTP_MIDI_SYSEX_COMMON_NRT_MTC_SPECIAL 0x00
814 #define RTP_MIDI_SYSEX_COMMON_NRT_MTC_PUNCH_IN_POINTS 0x01
815 #define RTP_MIDI_SYSEX_COMMON_NRT_MTC_PUNGH_OUT_POINTS 0x02
816 #define RTP_MIDI_SYSEX_COMMON_NRT_MTC_DELETE_PUNCH_IN_POINTS 0x03
817 #define RTP_MIDI_SYSEX_COMMON_NRT_MTC_DELETE_PUNCH_OUT_POINTS 0x04
818 #define RTP_MIDI_SYSEX_COMMON_NRT_MTC_EVENT_START_POINT 0x05
819 #define RTP_MIDI_SYSEX_COMMON_NRT_MTC_EVENT_STOP_POINT 0x06
820 #define RTP_MIDI_SYSEX_COMMON_NRT_MTC_EVENT_START_POINT_ADD 0x07
821 #define RTP_MIDI_SYSEX_COMMON_NRT_MTC_EVENT_STOP_POINT_ADD 0x08
822 #define RTP_MIDI_SYSEX_COMMON_NRT_MTC_DELETE_EVENT_START_POINT 0x09
823 #define RTP_MIDI_SYSEX_COMMON_NRT_MTC_DELETE_EVENT_STOP_POINT 0x0a
824 #define RTP_MIDI_SYSEX_COMMON_NRT_MTC_CUE_POINTS 0x0b
825 #define RTP_MIDI_SYSEX_COMMON_NRT_MTC_CUE_POINTS_ADD 0x0c
826 #define RTP_MIDI_SYSEX_COMMON_NRT_MTC_DELETE_CUE_POINT 0x0d
827 #define RTP_MIDI_SYSEX_COMMON_NRT_MTC_EVENT_NAME_IN_ADD 0x0e
829 #define RTP_MIDI_SYSEX_COMMON_NRT_SD_EXT_LOOP_POINT_TRANSMISSION 0x01
830 #define RTP_MIDI_SYSEX_COMMON_NRT_SD_EXT_LOOP_POINTS_REQUEST 0x02
832 #define RTP_MIDI_SYSEX_COMMON_NRT_SD_EXT_LP_UNI 0x00
833 #define RTP_MIDI_SYSEX_COMMON_NRT_SD_EXT_LP_BI 0x01
834 #define RTP_MIDI_SYSEX_COMMON_NRT_SD_EXT_LP_OFF 0x7f
836 #define RTP_MIDI_SYSEX_COMMON_NRT_GI_IDENTITY_REQUEST 0x01
837 #define RTP_MIDI_SYSEX_COMMON_NRT_GI_IDENTITY_REPLY 0x02
839 #define RTP_MIDI_SYSEX_COMMON_NRT_FD_HEADER 0x01
840 #define RTP_MIDI_SYSEX_COMMON_NRT_FD_DATA_PACKET 0x02
841 #define RTP_MIDI_SYSEX_COMMON_NRT_FD_REQUEST 0x03
843 #define RTP_MIDI_SYSEX_COMMON_TUNING_BULK_DUMP_REQUEST 0x00
844 #define RTP_MIDI_SYSEX_COMMON_TUNING_BULK_DUMP_REPLY 0x01
845 #define RTP_MIDI_SYSEX_COMMON_TUNING_NOTE_CHANGE 0x02
847 #define RTP_MIDI_SYSEX_COMMON_NRT_GM_ON 0x01
848 #define RTP_MIDI_SYSEX_COMMON_NRT_GM_OFF 0x02
850 #define RTP_MIDI_SYSEX_COMMON_RT_MTC_FULL_MESSAGE 0x01
851 #define RTP_MIDI_SYSEX_COMMON_RT_MTC_USER_BITS 0x02
853 #define RTP_MIDI_SYSEX_COMMON_RT_SCL_EXTENSIONS 0x00
854 #define RTP_MIDI_SYSEX_COMMON_RT_SC_LIGHTING 0x01
855 #define RTP_MIDI_SYSEX_COMMON_RT_SC_MOVING_LIGHTS 0x02
856 #define RTP_MIDI_SYSEX_COMMON_RT_SC_COLOR_CHANGERS 0x03
857 #define RTP_MIDI_SYSEX_COMMON_RT_SC_STROBES 0x04
858 #define RTP_MIDI_SYSEX_COMMON_RT_SCL_LASERS 0x05
859 #define RTP_MIDI_SYSEX_COMMON_RT_SCL_CHASERS 0x06
860 #define RTP_MIDI_SYSEX_COMMON_RT_SC_SOUND 0x10
861 #define RTP_MIDI_SYSEX_COMMON_RT_SC_MUSIC 0x11
862 #define RTP_MIDI_SYSEX_COMMON_RT_SC_CD_PLAYERS 0x12
863 #define RTP_MIDI_SYSEX_COMMON_RT_SC_EPROM_PLAYBACK 0x13
864 #define RTP_MIDI_SYSEX_COMMON_RT_SCL_AUDIO_TAPE_MACHINE 0x14
865 #define RTP_MIDI_SYSEX_COMMON_RT_SC_INTERCOMS 0x15
866 #define RTP_MIDI_SYSEX_COMMON_RT_SC_AMPLIFIERS 0x16
867 #define RTP_MIDI_SYSEX_COMMON_RT_SC_AUDIO_EFFECTS 0x17
868 #define RTP_MIDI_SYSEX_COMMON_RT_SC_EQUALIZERS 0x18
869 #define RTP_MIDI_SYSEX_COMMON_RT_SC_MACHINERY 0x20
870 #define RTP_MIDI_SYSEX_COMMON_RT_SC_RIGGING 0x21
871 #define RTP_MIDI_SYSEX_COMMON_RT_SC_FLYS 0x22
872 #define RTP_MIDI_SYSEX_COMMON_RT_SC_LIFTS 0x23
873 #define RTP_MIDI_SYSEX_COMMON_RT_SC_TURNTABLES 0x24
874 #define RTP_MIDI_SYSEX_COMMON_RT_SC_TRUSSES 0x25
875 #define RTP_MIDI_SYSEX_COMMON_RT_SC_ROBOTS 0x26
876 #define RTP_MIDI_SYSEX_COMMON_RT_SC_ANIMATION 0x27
877 #define RTP_MIDI_SYSEX_COMMON_RT_SC_FLOATS 0x28
878 #define RTP_MIDI_SYSEX_COMMON_RT_SC_BREAKAWAYS 0x29
879 #define RTP_MIDI_SYSEX_COMMON_RT_SC_BARGES 0x2a
880 #define RTP_MIDI_SYSEX_COMMON_RT_SC_VIDEO 0x30
881 #define RTP_MIDI_SYSEX_COMMON_RT_SC_VIDEO_TAPE_MACHINES 0x31
882 #define RTP_MIDI_SYSEX_COMMON_RT_SC_VIDEO_CASSETTE_MACHINES 0x32
883 #define RTP_MIDI_SYSEX_COMMON_RT_SC_VIDEO_DISC_PLAYERS 0x33
884 #define RTP_MIDI_SYSEX_COMMON_RT_SC_VIDEO_SWITCHERS 0x34
885 #define RTP_MIDI_SYSEX_COMMON_RT_SC_VIDEO_EFFECT 0x35
886 #define RTP_MIDI_SYSEX_COMMON_RT_SC_VIDEO_CHARACTER_GENERATORS 0x36
887 #define RTP_MIDI_SYSEX_COMMON_RT_SC_VIDEO_STIL_STORES 0x37
888 #define RTP_MIDI_SYSEX_COMMON_RT_SC_VIDEO_MONITORS 0x38
889 #define RTP_MIDI_SYSEX_COMMON_RT_SC_PROJECTION 0x40
890 #define RTP_MIDI_SYSEX_COMMON_RT_SC_FILM_PROJECTORS 0x41
891 #define RTP_MIDI_SYSEX_COMMON_RT_SC_SLIDE_PROJECTORS 0x42
892 #define RTP_MIDI_SYSEX_COMMON_RT_SC_VIDEO_PROJECTORS 0x43
893 #define RTP_MIDI_SYSEX_COMMON_RT_SC_DISSOLVERS 0x44
894 #define RTP_MIDI_SYSEX_COMMON_RT_SC_SHUTTER_CONTROLS 0x45
895 #define RTP_MIDI_SYSEX_COMMON_RT_SC_PROCESS_CONTROL 0x50
896 #define RTP_MIDI_SYSEX_COMMON_RT_SC_HYDRAULIC_OIL 0x51
897 #define RTP_MIDI_SYSEX_COMMON_RT_SC_H2O 0x52
898 #define RTP_MIDI_SYSEX_COMMON_RT_SC_CO2 0x53
899 #define RTP_MIDI_SYSEX_COMMON_RT_SC_COMPRESSED_AIR 0x54
900 #define RTP_MIDI_SYSEX_COMMON_RT_SC_NATURAL_GAS 0x55
901 #define RTP_MIDI_SYSEX_COMMON_RT_SC_FOG 0x56
902 #define RTP_MIDI_SYSEX_COMMON_RT_SC_SMOKE 0x57
903 #define RTP_MIDI_SYSEX_COMMON_RT_SC_CRACKED_HAZE 0x58
904 #define RTP_MIDI_SYSEX_COMMON_RT_SC_PYRO 0x60
905 #define RTP_MIDI_SYSEX_COMMON_RT_SC_FIREWORKS 0x61
906 #define RTP_MIDI_SYSEX_COMMON_RT_SC_EXPLOSIONS 0x62
907 #define RTP_MIDI_SYSEX_COMMON_RT_SC_FLAME 0x63
908 #define RTP_MIDI_SYSEX_COMMON_RT_SC_SMOKE_POTS 0x64
909 #define RTP_MIDI_SYSEX_COMMON_RT_SC_ALL_TYPES 0x7f
911 #define RTP_MIDI_SYSEX_COMMON_RT_NT_BAR_NUMBER 0x01
912 #define RTP_MIDI_SYSEX_COMMON_RT_NT_TIME_SIGNATURE_IMMEDIATE 0x02
913 #define RTP_MIDI_SYSEX_COMMON_RT_NT_TIME_SIGNATURE_DELAYED 0x42
915 #define RTP_MIDI_SYSEX_COMMON_RT_DC_MASTER_VOLUME 0x01
916 #define RTP_MIDI_SYSEX_COMMON_RT_DC_MASTER_BALANCE 0x02
918 #define RTP_MIDI_SYSEX_COMMON_RT_MTC_CUE_SPECIAL 0x00
919 #define RTP_MIDI_SYSEX_COMMON_RT_MTC_CUE_PUNCH_IN_POINTS 0x01
920 #define RTP_MIDI_SYSEX_COMMON_RT_MTC_CUE_PUNCH_OUT_POINTS 0x02
921 #define RTP_MIDI_SYSEX_COMMON_RT_MTC_CUE_RESERVED_03 0x03
922 #define RTP_MIDI_SYSEX_COMMON_RT_MTC_CUE_RESERVED_04 0x04
923 #define RTP_MIDI_SYSEX_COMMON_RT_MTC_CUE_EVENT_START_POINTS 0x05
924 #define RTP_MIDI_SYSEX_COMMON_RT_MTC_CUE_EVENT_STOP_POINTS 0x06
925 #define RTP_MIDI_SYSEX_COMMON_RT_MTC_CUE_EVENT_START_POINTS_ADD 0x07
926 #define RTP_MIDI_SYSEX_COMMON_RT_MTC_CUE_EVENT_STOP_POINTS_ADD 0x08
927 #define RTP_MIDI_SYSEX_COMMON_RT_MTC_CUE_RESERVED_09 0x09
928 #define RTP_MIDI_SYSEX_COMMON_RT_MTC_CUE_RESERVED_0A 0x0a
929 #define RTP_MIDI_SYSEX_COMMON_RT_MTC_CUE_CUE_POINTS 0x0b
930 #define RTP_MIDI_SYSEX_COMMON_RT_MTC_CUE_CUE_POINTS_ADD 0x0c
931 #define RTP_MIDI_SYSEX_COMMON_RT_MTC_CUE_RESERVED_0D 0x0d
932 #define RTP_MIDI_SYSEX_COMMON_RT_MTC_CUE_EVENT_NAME_ADD 0x0e
934 /* TODO: Add MMC Commands */
936 /* TODO: Add MMC Responses */
940 #define RTP_MIDI_COMMON_MTC_QF_FRAME_LS_NIBBLE 0x00
941 #define RTP_MIDI_COMMON_MTC_QF_FRAME_MS_NIBBLE 0x01
942 #define RTP_MIDI_COMMON_MTC_QF_SECONDS_LS_NIBBLE 0x02
943 #define RTP_MIDI_COMMON_MTC_QF_SECONDS_MS_NIBBLE 0x03
944 #define RTP_MIDI_COMMON_MTC_QF_MINUTES_LS_NIBBLE 0x04
945 #define RTP_MIDI_COMMON_MTC_QF_MINUTES_MS_NIBBLE 0x05
946 #define RTP_MIDI_COMMON_MTC_QF_HOURS_LS_NIBBLE 0x06
947 #define RTP_MIDI_COMMON_MTC_QF_HOURS_MS_NIBBLE 0x07
956 #define RTP_MIDI_TREE_NAME_COMMAND "Command Section"
957 #define RTP_MIDI_TREE_NAME_COMMAND_SYSEX_MANU "Manufacturer specific data"
958 #define RTP_MIDI_TREE_NAME_COMMAND_SYSEX_EDU "Educational data"
959 #define RTP_MIDI_TREE_NAME_JOURNAL "Journal Section"
960 #define RTP_MIDI_TREE_NAME_SYSTEM_JOURNAL "System-Journal"
961 #define RTP_MIDI_TREE_NAME_SYSTEM_CHAPTERS "System-Chapters"
962 #define RTP_MIDI_TREE_NAME_SJ_CHAPTER_D_FIELD_J "System Common 0xF4"
963 #define RTP_MIDI_TREE_NAME_SJ_CHAPTER_D_FIELD_K "System Common 0xF5"
964 #define RTP_MIDI_TREE_NAME_SJ_CHAPTER_D_FIELD_Y "System Common 0xF9"
965 #define RTP_MIDI_TREE_NAME_SJ_CHAPTER_D_FIELD_Z "System Common 0xFD"
966 #define RTP_MIDI_TREE_NAME_SJ_CHAPTER_Q "Sequencer State Commands"
967 #define RTP_MIDI_TREE_NAME_SJ_CHAPTER_F "MIDI Time Code Tape Position"
968 #define RTP_MIDI_TREE_NAME_SJ_CHAPTER_X "System Exclusive"
969 #define RTP_MIDI_TREE_NAME_SJ_CHAPTER_X_DATA "Data field (sysex commands)"
970 #define RTP_MIDI_TREE_NAME_SJ_CHAPTER_X_INVALID_DATA "Data field (invalid sysex commands)"
971 #define RTP_MIDI_TREE_NAME_CHANNEL_JOURNAL "Channel-Journal"
972 #define RTP_MIDI_TREE_NAME_CHANNEL_CHAPTERS "Channel-Chapters"
973 #define RTP_MIDI_TREE_NAME_CJ_CHAPTER_P "Program Change"
974 #define RTP_MIDI_TREE_NAME_CJ_CHAPTER_C "Control Change"
975 #define RTP_MIDI_TREE_NAME_CJ_CHAPTER_C_LOGLIST "Log List"
976 #define RTP_MIDI_TREE_NAME_CJ_CHAPTER_C_LOGITEM "Log Item"
977 #define RTP_MIDI_TREE_NAME_CJ_CHAPTER_M "Parameter System"
978 #define RTP_MIDI_TREE_NAME_CJ_CHAPTER_M_LOGLIST "Log List"
979 #define RTP_MIDI_TREE_NAME_CJ_CHAPTER_M_LOGITEM "Log Item"
980 #define RTP_MIDI_TREE_NAME_CJ_CHAPTER_M_LOG_COUNT "Count"
981 #define RTP_MIDI_TREE_NAME_CJ_CHAPTER_W "Pitch Wheel"
982 #define RTP_MIDI_TREE_NAME_CJ_CHAPTER_N "Note on/off"
983 #define RTP_MIDI_TREE_NAME_CJ_CHAPTER_N_LOGLIST "Log List"
984 #define RTP_MIDI_TREE_NAME_CJ_CHAPTER_N_LOGITEM "Note On"
985 #define RTP_MIDI_TREE_NAME_CJ_CHAPTER_N_OCTETS "Offbit Octets"
986 #define RTP_MIDI_TREE_NAME_CJ_CHAPTER_E "Note Command Extras"
987 #define RTP_MIDI_TREE_NAME_CJ_CHAPTER_E_LOGLIST "Log List"
988 #define RTP_MIDI_TREE_NAME_CJ_CHAPTER_E_LOGITEM1 "Note Off"
989 #define RTP_MIDI_TREE_NAME_CJ_CHAPTER_E_LOGITEM2 "Note On/Off"
990 #define RTP_MIDI_TREE_NAME_CJ_CHAPTER_A "Poly Aftertouch"
991 #define RTP_MIDI_TREE_NAME_CJ_CHAPTER_A_LOGLIST "Log List"
992 #define RTP_MIDI_TREE_NAME_CJ_CHAPTER_A_LOGITEM "Pressure"
994 /* used to mask the most significant bit, which flags the start of a new midi-command! */
995 #define RTP_MIDI_COMMAND_STATUS_FLAG 0x80
997 /* used to mask the lower 7 bits of the single octets that make up the delta-time */
998 #define RTP_MIDI_DELTA_TIME_OCTET_MASK 0x7f
999 /* used to mask the most significant bit, which flags the extension of the delta-time */
1000 #define RTP_MIDI_DELTA_TIME_EXTENSION 0x80
1002 #define RTP_MIDI_CS_FLAG_B 0x80
1003 #define RTP_MIDI_CS_FLAG_J 0x40
1004 #define RTP_MIDI_CS_FLAG_Z 0x20
1005 #define RTP_MIDI_CS_FLAG_P 0x10
1006 #define RTP_MIDI_CS_MASK_SHORTLEN 0x0f
1007 #define RTP_MIDI_CS_MASK_LONGLEN 0x0fff
1009 #define RTP_MIDI_CJ_CHAPTER_M_FLAG_J 0x80
1010 #define RTP_MIDI_CJ_CHAPTER_M_FLAG_K 0x40
1011 #define RTP_MIDI_CJ_CHAPTER_M_FLAG_L 0x20
1012 #define RTP_MIDI_CJ_CHAPTER_M_FLAG_M 0x10
1013 #define RTP_MIDI_CJ_CHAPTER_M_FLAG_N 0x08
1014 #define RTP_MIDI_CJ_CHAPTER_M_FLAG_T 0x04
1015 #define RTP_MIDI_CJ_CHAPTER_M_FLAG_V 0x02
1016 #define RTP_MIDI_CJ_CHAPTER_M_FLAG_R 0x01
1018 #define RTP_MIDI_JS_FLAG_S 0x80
1019 #define RTP_MIDI_JS_FLAG_Y 0x40
1020 #define RTP_MIDI_JS_FLAG_A 0x20
1021 #define RTP_MIDI_JS_FLAG_H 0x10
1022 #define RTP_MIDI_JS_MASK_TOTALCHANNELS 0x0f
1024 #define RTP_MIDI_SJ_FLAG_S 0x8000
1025 #define RTP_MIDI_SJ_FLAG_D 0x4000
1026 #define RTP_MIDI_SJ_FLAG_V 0x2000
1027 #define RTP_MIDI_SJ_FLAG_Q 0x1000
1028 #define RTP_MIDI_SJ_FLAG_F 0x0800
1029 #define RTP_MIDI_SJ_FLAG_X 0x0400
1030 #define RTP_MIDI_SJ_MASK_LENGTH 0x03ff
1032 #define RTP_MIDI_SJ_CHAPTER_D_FLAG_S 0x80
1033 #define RTP_MIDI_SJ_CHAPTER_D_FLAG_B 0x40
1034 #define RTP_MIDI_SJ_CHAPTER_D_FLAG_G 0x20
1035 #define RTP_MIDI_SJ_CHAPTER_D_FLAG_H 0x10
1036 #define RTP_MIDI_SJ_CHAPTER_D_FLAG_J 0x08
1037 #define RTP_MIDI_SJ_CHAPTER_D_FLAG_K 0x04
1038 #define RTP_MIDI_SJ_CHAPTER_D_FLAG_Y 0x02
1039 #define RTP_MIDI_SJ_CHAPTER_D_FLAG_Z 0x01
1041 #define RTP_MIDI_SJ_CHAPTER_D_RESET_FLAG_S 0x80
1042 #define RTP_MIDI_SJ_CHAPTER_D_RESET_COUNT 0x7f
1043 #define RTP_MIDI_SJ_CHAPTER_D_TUNE_FLAG_S 0x80
1044 #define RTP_MIDI_SJ_CHAPTER_D_TUNE_COUNT 0x7f
1045 #define RTP_MIDI_SJ_CHAPTER_D_SONG_SEL_FLAG_S 0x80
1046 #define RTP_MIDI_SJ_CHAPTER_D_SONG_SEL_VALUE 0x7f
1048 #define RTP_MIDI_SJ_CHAPTER_D_SYSCOM_FLAG_S 0x8000
1049 #define RTP_MIDI_SJ_CHAPTER_D_SYSCOM_FLAG_C 0x4000
1050 #define RTP_MIDI_SJ_CHAPTER_D_SYSCOM_FLAG_V 0x2000
1051 #define RTP_MIDI_SJ_CHAPTER_D_SYSCOM_FLAG_L 0x1000
1052 #define RTP_MIDI_SJ_CHAPTER_D_SYSCOM_MASK_DSZ 0x0c00
1053 #define RTP_MIDI_SJ_CHAPTER_D_SYSCOM_MASK_LENGTH 0x03ff
1054 #define RTP_MIDI_SJ_CHAPTER_D_SYSCOM_MASK_COUNT 0xff
1056 #define RTP_MIDI_SJ_CHAPTER_D_SYSREAL_FLAG_S 0x80
1057 #define RTP_MIDI_SJ_CHAPTER_D_SYSREAL_FLAG_C 0x40
1058 #define RTP_MIDI_SJ_CHAPTER_D_SYSREAL_FLAG_L 0x20
1059 #define RTP_MIDI_SJ_CHAPTER_D_SYSREAL_MASK_LENGTH 0x1f
1060 #define RTP_MIDI_SJ_CHAPTER_D_SYSREAL_MASK_COUNT 0xff
1062 #define RTP_MIDI_SJ_CHAPTER_Q_FLAG_S 0x80
1063 #define RTP_MIDI_SJ_CHAPTER_Q_FLAG_N 0x40
1064 #define RTP_MIDI_SJ_CHAPTER_Q_FLAG_D 0x20
1065 #define RTP_MIDI_SJ_CHAPTER_Q_FLAG_C 0x10
1066 #define RTP_MIDI_SJ_CHAPTER_Q_FLAG_T 0x80
1067 #define RTP_MIDI_SJ_CHAPTER_Q_MASK_TOP 0x07
1068 #define RTP_MIDI_SJ_CHAPTER_Q_MASK_CLOCK 0x07ffff
1069 #define RTP_MIDI_SJ_CHAPTER_Q_MASK_TIMETOOLS 0xffffff
1071 #define RTP_MIDI_SJ_CHAPTER_F_FLAG_S 0x80
1072 #define RTP_MIDI_SJ_CHAPTER_F_FLAG_C 0x40
1073 #define RTP_MIDI_SJ_CHAPTER_F_FLAG_P 0x20
1074 #define RTP_MIDI_SJ_CHAPTER_F_FLAG_Q 0x10
1075 #define RTP_MIDI_SJ_CHAPTER_F_FLAG_D 0x08
1076 #define RTP_MIDI_SJ_CHAPTER_F_MASK_POINT 0x07
1077 #define RTP_MIDI_SJ_CHAPTER_F_MASK_MT0 0xf0000000
1078 #define RTP_MIDI_SJ_CHAPTER_F_MASK_MT1 0x0f000000
1079 #define RTP_MIDI_SJ_CHAPTER_F_MASK_MT2 0x00f00000
1080 #define RTP_MIDI_SJ_CHAPTER_F_MASK_MT3 0x000f0000
1081 #define RTP_MIDI_SJ_CHAPTER_F_MASK_MT4 0x0000f000
1082 #define RTP_MIDI_SJ_CHAPTER_F_MASK_MT5 0x00000f00
1083 #define RTP_MIDI_SJ_CHAPTER_F_MASK_MT6 0x000000f0
1084 #define RTP_MIDI_SJ_CHAPTER_F_MASK_MT7 0x0000000f
1085 #define RTP_MIDI_SJ_CHAPTER_F_MASK_HR 0xff000000
1086 #define RTP_MIDI_SJ_CHAPTER_F_MASK_MN 0x00ff0000
1087 #define RTP_MIDI_SJ_CHAPTER_F_MASK_SC 0x0000ff00
1088 #define RTP_MIDI_SJ_CHAPTER_F_MASK_FR 0x000000ff
1090 #define RTP_MIDI_SJ_CHAPTER_X_FLAG_S 0x80
1091 #define RTP_MIDI_SJ_CHAPTER_X_FLAG_T 0x40
1092 #define RTP_MIDI_SJ_CHAPTER_X_FLAG_C 0x20
1093 #define RTP_MIDI_SJ_CHAPTER_X_FLAG_F 0x10
1094 #define RTP_MIDI_SJ_CHAPTER_X_FLAG_D 0x08
1095 #define RTP_MIDI_SJ_CHAPTER_X_FLAG_L 0x04
1096 #define RTP_MIDI_SJ_CHAPTER_X_MASK_STA 0x03
1097 #define RTP_MIDI_SJ_CHAPTER_X_MASK_TCOUNT 0x0
1098 #define RTP_MIDI_SJ_CHAPTER_X_MASK_COUNT 0x0
1100 #define RTP_MIDI_CJ_FLAG_S 0x800000
1101 #define RTP_MIDI_CJ_FLAG_H 0x040000
1102 #define RTP_MIDI_CJ_FLAG_P 0x000080
1103 #define RTP_MIDI_CJ_FLAG_C 0x000040
1104 #define RTP_MIDI_CJ_FLAG_M 0x000020
1105 #define RTP_MIDI_CJ_FLAG_W 0x000010
1106 #define RTP_MIDI_CJ_FLAG_N 0x000008
1107 #define RTP_MIDI_CJ_FLAG_E 0x000004
1108 #define RTP_MIDI_CJ_FLAG_T 0x000002
1109 #define RTP_MIDI_CJ_FLAG_A 0x000001
1110 #define RTP_MIDI_CJ_MASK_LENGTH 0x03ff00
1111 #define RTP_MIDI_CJ_MASK_CHANNEL 0x780000
1112 #define RTP_MIDI_CJ_CHANNEL_SHIFT 19
1114 #define RTP_MIDI_CJ_CHAPTER_M_MASK_LENGTH 0x3f
1116 #define RTP_MIDI_CJ_CHAPTER_N_MASK_LENGTH 0x7f00
1117 #define RTP_MIDI_CJ_CHAPTER_N_MASK_LOW 0x00f0
1118 #define RTP_MIDI_CJ_CHAPTER_N_MASK_HIGH 0x000f
1120 #define RTP_MIDI_CJ_CHAPTER_E_MASK_LENGTH 0x7f
1121 #define RTP_MIDI_CJ_CHAPTER_A_MASK_LENGTH 0x7f
1127 static const char rtp_midi_unknown_value_dec[] = "unknown value: %d";
1128 static const char rtp_midi_unknown_value_hex[] = "unknown value: 0x%x";
1130 static const value_string rtp_midi_note_values[] = {
1131 { 0, "C-1" },
1132 { 1, "C#-1" },
1133 { 2, "D-1" },
1134 { 3, "D#-1" },
1135 { 4, "E-1" },
1136 { 5, "F-1" },
1137 { 6, "F#-1" },
1138 { 7, "G-1" },
1139 { 8, "G#-1" },
1140 { 9, "A-1" },
1141 { 10, "A#-1" },
1142 { 11, "B-1" },
1143 { 12, "C0" },
1144 { 13, "C#0" },
1145 { 14, "D0" },
1146 { 15, "D#0" },
1147 { 16, "E0" },
1148 { 17, "F0" },
1149 { 18, "F#0" },
1150 { 19, "G0" },
1151 { 20, "G#0" },
1152 { 21, "A0" },
1153 { 22, "A#0" },
1154 { 23, "B0" },
1155 { 24, "C1" },
1156 { 25, "C#1" },
1157 { 26, "D1" },
1158 { 27, "D#1" },
1159 { 28, "E1" },
1160 { 29, "F1" },
1161 { 30, "F#1" },
1162 { 31, "G1" },
1163 { 32, "G#1" },
1164 { 33, "A1" },
1165 { 34, "A#1" },
1166 { 35, "B1" },
1167 { 36, "C2" },
1168 { 37, "C#2" },
1169 { 38, "D2" },
1170 { 39, "D#2" },
1171 { 40, "E2" },
1172 { 41, "F2" },
1173 { 42, "F#2" },
1174 { 43, "G2" },
1175 { 44, "G#2" },
1176 { 45, "A2" },
1177 { 46, "A#2" },
1178 { 47, "B2" },
1179 { 48, "C3" },
1180 { 49, "C#3" },
1181 { 50, "D3" },
1182 { 51, "D#3" },
1183 { 52, "E3" },
1184 { 53, "F3" },
1185 { 54, "F#3" },
1186 { 55, "G3" },
1187 { 56, "G#3" },
1188 { 57, "A3" },
1189 { 58, "A#3" },
1190 { 59, "B3" },
1191 { 60, "C4" },
1192 { 61, "C#4" },
1193 { 62, "D4" },
1194 { 63, "D#4" },
1195 { 64, "E4" },
1196 { 65, "F4" },
1197 { 66, "F#4" },
1198 { 67, "G4" },
1199 { 68, "G#4" },
1200 { 69, "A4" },
1201 { 70, "A#4" },
1202 { 71, "B4" },
1203 { 72, "C5" },
1204 { 73, "C#5" },
1205 { 74, "D5" },
1206 { 75, "D#5" },
1207 { 76, "E5" },
1208 { 77, "F5" },
1209 { 78, "F#5" },
1210 { 79, "G5" },
1211 { 80, "G#5" },
1212 { 81, "A5" },
1213 { 82, "A#5" },
1214 { 83, "B5" },
1215 { 84, "C6" },
1216 { 85, "C#6" },
1217 { 86, "D6" },
1218 { 87, "D#6" },
1219 { 88, "E6" },
1220 { 89, "F6" },
1221 { 90, "F#6" },
1222 { 91, "G6" },
1223 { 92, "G#6" },
1224 { 93, "A6" },
1225 { 94, "A#6" },
1226 { 95, "B6" },
1227 { 96, "C7" },
1228 { 97, "C#7" },
1229 { 98, "D7" },
1230 { 99, "D#7" },
1231 { 100, "E7" },
1232 { 101, "F7" },
1233 { 102, "F#7" },
1234 { 103, "G7" },
1235 { 104, "G#7" },
1236 { 105, "A7" },
1237 { 106, "A#7" },
1238 { 107, "B7" },
1239 { 108, "C8" },
1240 { 109, "C#8" },
1241 { 110, "D8" },
1242 { 111, "D#8" },
1243 { 112, "E8" },
1244 { 113, "F8" },
1245 { 114, "F#8" },
1246 { 115, "G8" },
1247 { 116, "G#8" },
1248 { 117, "A8" },
1249 { 118, "A#8" },
1250 { 119, "B8" },
1251 { 120, "C9" },
1252 { 121, "C#9" },
1253 { 122, "D9" },
1254 { 123, "D#9" },
1255 { 124, "E9" },
1256 { 125, "F9" },
1257 { 126, "F#9" },
1258 { 127, "G9" },
1259 { 0, NULL }
1261 static value_string_ext rtp_midi_note_values_ext = VALUE_STRING_EXT_INIT(rtp_midi_note_values);
1265 static const value_string rtp_midi_controller_values[] = {
1266 { RTP_MIDI_CTRL_BANK_SELECT_MSB, "Bank Select (msb)" },
1267 { RTP_MIDI_CTRL_MODULATION_WHEEL_OR_LEVER_MSB, "Modulation Wheel Or Lever (msb)" },
1268 { RTP_MIDI_CTRL_BREATH_CONTROLLER_MSB, "Breath Controller (msb)" },
1269 { RTP_MIDI_CTRL_FOOT_CONTROLLER_MSB, "Foot Controller (msb)" },
1270 { RTP_MIDI_CTRL_PORTAMENTO_TIME_MSB, "Portamento Time (msb)" },
1271 { RTP_MIDI_CTRL_DATA_ENTRY_MSB, "Data Entry (msb)" },
1272 { RTP_MIDI_CTRL_CHANNEL_VOLUME_MSB, "Channel Volume (msb)" },
1273 { RTP_MIDI_CTRL_BALANCE_MSB, "Balance (msb)" },
1274 { RTP_MIDI_CTRL_PAN_MSB, "Pan (msb)" },
1275 { RTP_MIDI_CTRL_EXPRESSION_CONTROLLER_MSB, "Expression Controller (msb)" },
1276 { RTP_MIDI_CTRL_EFFECT_CONTROL_1_MSB, "Effect Control 1 (msb)" },
1277 { RTP_MIDI_CTRL_EFFECT_CONTROL_2_MSB, "Effect Control 2 (msb)" },
1278 { RTP_MIDI_CTRL_GENERAL_PURPOSE_CONTROLLER_1_MSB, "General Purpose Controller 1 (msb)" },
1279 { RTP_MIDI_CTRL_GENERAL_PURPOSE_CONTROLLER_2_MSB, "General Purpose Controller 2 (msb)" },
1280 { RTP_MIDI_CTRL_GENERAL_PURPOSE_CONTROLLER_3_MSB, "General Purpose Controller 3 (msb)" },
1281 { RTP_MIDI_CTRL_GENERAL_PURPOSE_CONTROLLER_4_MSB, "General Purpose Controller 4 (msb)" },
1282 { RTP_MIDI_CTRL_BANK_SELECT_LSB, "Bank Select (lsb)" },
1283 { RTP_MIDI_CTRL_MODULATION_WHEEL_OR_LEVER_LSB, "Modulation Wheel Or Lever (lsb)" },
1284 { RTP_MIDI_CTRL_BREATH_CONTROLLER_LSB, "Breath Controller (lsb)" },
1285 { RTP_MIDI_CTRL_FOOT_CONTROLLER_LSB, "Foot Controller (lsb)" },
1286 { RTP_MIDI_CTRL_PORTAMENTO_TIME_LSB, "Portamento Time (lsb)" },
1287 { RTP_MIDI_CTRL_DATA_ENTRY_LSB, "Data Entry (lsb)" },
1288 { RTP_MIDI_CTRL_CHANNEL_VOLUME_LSB, "Volume (lsb)" },
1289 { RTP_MIDI_CTRL_BALANCE_LSB, "Balance (lsb)" },
1290 { RTP_MIDI_CTRL_PAN_LSB, "Pan (lsb)" },
1291 { RTP_MIDI_CTRL_EXPRESSION_CONTROLLER_LSB, "Expression Controller (lsb)" },
1292 { RTP_MIDI_CTRL_EFFECT_CONTROL_1_LSB, "Effect Control 1 (lsb)" },
1293 { RTP_MIDI_CTRL_EFFECT_CONTROL_2_LSB, "Effect Control 2 (lsb)" },
1294 { RTP_MIDI_CTRL_DAMPER_PEDAL, "Damper Pedal" },
1295 { RTP_MIDI_CTRL_PORTAMENTO_ON_OFF, "Portamento On/Off" },
1296 { RTP_MIDI_CTRL_SUSTENUTO, "Sustenuto" },
1297 { RTP_MIDI_CTRL_SOFT_PEDAL, "Soft Pedal" },
1298 { RTP_MIDI_CTRL_LEGATO_FOOTSWITCH, "Legato Footswitch" },
1299 { RTP_MIDI_CTRL_HOLD_2, "Hold 2" },
1300 { RTP_MIDI_CTRL_SOUND_CONTROLLER_1, "Sound Controller 1 (default: Sound Variation)" },
1301 { RTP_MIDI_CTRL_SOUND_CONTROLLER_2, "Sound Controller 2 (default: Timbre/Harmonic Intensity)" },
1302 { RTP_MIDI_CTRL_SOUND_CONTROLLER_3, "Sound Controller 3 (default: Release Time)" },
1303 { RTP_MIDI_CTRL_SOUND_CONTROLLER_4, "Sound Controller 4 (default: Attack Time)" },
1304 { RTP_MIDI_CTRL_SOUND_CONTROLLER_5, "Sound Controller 5 (default: Brightness)" },
1305 { RTP_MIDI_CTRL_SOUND_CONTROLLER_6, "Sound Controller 6" },
1306 { RTP_MIDI_CTRL_SOUND_CONTROLLER_7, "Sound Controller 7" },
1307 { RTP_MIDI_CTRL_SOUND_CONTROLLER_8, "Sound Controller 8" },
1308 { RTP_MIDI_CTRL_SOUND_CONTROLLER_9, "Sound Controller 9" },
1309 { RTP_MIDI_CTRL_SOUND_CONTROLLER_10, "Sound Controller 10" },
1310 { RTP_MIDI_CTRL_GENERAL_PURPOSE_CONTROLLER_5, "General Purpose Controller 5" },
1311 { RTP_MIDI_CTRL_GENERAL_PURPOSE_CONTROLLER_6, "General Purpose Controller 6" },
1312 { RTP_MIDI_CTRL_GENERAL_PURPOSE_CONTROLLER_7, "General Purpose Controller 7" },
1313 { RTP_MIDI_CTRL_GENERAL_PURPOSE_CONTROLLER_8, "General Purpose Controller 8" },
1314 { RTP_MIDI_CTRL_PORTAMENTO_CONTROL, "Portamento Control" },
1315 { RTP_MIDI_CTRL_EFFECTS_1_DEPTH, "Effects 1 Depth (formerly: External Effects Depth)" },
1316 { RTP_MIDI_CTRL_EFFECTS_2_DEPTH, "Effects 2 Depth (formerly: Tremolo Depth)" },
1317 { RTP_MIDI_CTRL_EFFECTS_3_DEPTH, "Effects 3 Depth (formerly: Chorus Depth)" },
1318 { RTP_MIDI_CTRL_EFFECTS_4_DEPTH, "Effects 4 Depth (formerly: Celeste (Detune) Depth)" },
1319 { RTP_MIDI_CTRL_EFFECTS_5_DEPTH, "Effects 5 Depth (formerly: Phaser Depth)" },
1320 { RTP_MIDI_CTRL_DATA_INCREMENT, "Data Increment" },
1321 { RTP_MIDI_CTRL_DATA_DECREMENT, "Data Decrement" },
1322 { RTP_MIDI_CTRL_NON_REGISTERED_PARAM_LSB, "Non-Registered Parameter (lsb)" },
1323 { RTP_MIDI_CTRL_NON_REGISTERED_PARAM_MSB, "Non-Registered Parameter (msb)" },
1324 { RTP_MIDI_CTRL_REGISTERED_PARAM_LSB, "Registered Parameter (lsb)" },
1325 { RTP_MIDI_CTRL_REGISTERED_PARAM_MSB, "Registered Parameter (msb)" },
1326 { RTP_MIDI_CTRL_ALL_SOUND_OFF, "All Sound Off" },
1327 { RTP_MIDI_CTRL_RESET_ALL_CONTROLLERS, "Reset All Controllers" },
1328 { RTP_MIDI_CTRL_LOCAL_CONTROL_ON_OFF, "Local Control" },
1329 { RTP_MIDI_CTRL_ALL_NOTES_OFF, "All Notes Off" },
1330 { RTP_MIDI_CTRL_OMNI_MODE_OFF, "Omni Mode Off" },
1331 { RTP_MIDI_CTRL_OMNI_MODE_ON, "Omni Mode On" },
1332 { RTP_MIDI_CTRL_MONO_MODE_ON, "Mono Mode On" },
1333 { RTP_MIDI_CTRL_POLY_MODE_ON, "Poly Mode On" },
1334 { 0, NULL }
1336 static value_string_ext rtp_midi_controller_values_ext = VALUE_STRING_EXT_INIT(rtp_midi_controller_values);
1339 static const value_string rtp_midi_manu_short_values[] = {
1340 { RTP_MIDI_MANU_SHORT_ISLONG, "< long id >" },
1341 { RTP_MIDI_MANU_SHORT_SEQUENTIAL_CIRCUITS, "Sequential Circuits" },
1342 { RTP_MIDI_MANU_SHORT_BIG_BRIAR_IDP, "Big Briar / IDP" },
1343 { RTP_MIDI_MANU_SHORT_OCTAVE_PLATEAU_VOYETRA, "Voyetra / Octave-Plateau" },
1344 { RTP_MIDI_MANU_SHORT_MOOG, "Moog" },
1345 { RTP_MIDI_MANU_SHORT_PASSPORT_DESIGNS, "Passport Designs" },
1346 { RTP_MIDI_MANU_SHORT_LEXICON, "Lexicon" },
1347 { RTP_MIDI_MANU_SHORT_KURZWEIL, "Kurzweil" },
1348 { RTP_MIDI_MANU_SHORT_FENDER, "Fender" },
1349 { RTP_MIDI_MANU_SHORT_GULBRANSEN, "Gulbransen" },
1350 { RTP_MIDI_MANU_SHORT_AKG_ACOUSTICS, "AKG Acoustics" },
1351 { RTP_MIDI_MANU_SHORT_VOYCE_MUSIC, "Voyce Music" },
1352 { RTP_MIDI_MANU_SHORT_WAVEFRAME, "Waveframe Corp" },
1353 { RTP_MIDI_MANU_SHORT_ADA_SIGNAL_PROCESSORS, "ADA Signal Processors" },
1354 { RTP_MIDI_MANU_SHORT_GARFIELD_ELECTRONICS, "Garfield Electronics" },
1355 { RTP_MIDI_MANU_SHORT_ENSONIQ, "Ensoniq" },
1356 { RTP_MIDI_MANU_SHORT_OBERHEIM_GIBSON_LABS, "Oberheim / Gibson Labs" },
1357 { RTP_MIDI_MANU_SHORT_APPLE_COMPUTERS, "Apple Computer" },
1358 { RTP_MIDI_MANU_SHORT_GREY_MATTER_RESPONSE, "Grey Matter Response / Simmons" },
1359 { RTP_MIDI_MANU_SHORT_DIGIDESIGN, "DigiDesign" },
1360 { RTP_MIDI_MANU_SHORT_PALMTREE_INSTRUMENTS, "Fairlight / Palmtree Instruments" },
1361 { RTP_MIDI_MANU_SHORT_JL_COOPER, "JL Cooper" },
1362 { RTP_MIDI_MANU_SHORT_LOWREY, "Lowrey" },
1363 { RTP_MIDI_MANU_SHORT_LINN_ADAMS_SMITH, "Linn / Adams-Smith" },
1364 { RTP_MIDI_MANU_SHORT_EMU_SYSTEMS, "Emu Systems" },
1365 { RTP_MIDI_MANU_SHORT_HARMONY_SYSTEMS, "Harmony Systems" },
1366 { RTP_MIDI_MANU_SHORT_ART, "ART" },
1367 { RTP_MIDI_MANU_SHORT_BALDWIN, "Baldwin" },
1368 { RTP_MIDI_MANU_SHORT_EVENTIDE, "Eventide" },
1369 { RTP_MIDI_MANU_SHORT_INVENTRONICS, "Inventronics" },
1370 { RTP_MIDI_MANU_SHORT_CLARITY, "Clarity" },
1371 { RTP_MIDI_MANU_SHORT_PASSAC, "Passac" },
1372 { RTP_MIDI_MANU_SHORT_SIEL, "S.I.E.L." },
1373 { RTP_MIDI_MANU_SHORT_SYNTHE_AXE, "SyntheAxe" },
1374 { RTP_MIDI_MANU_SHORT_STEPP, "Stepp" },
1375 { RTP_MIDI_MANU_SHORT_HOHNER, "Hohner" },
1376 { RTP_MIDI_MANU_SHORT_CRUMAR_TWISTER, "Crumar / Twister" },
1377 { RTP_MIDI_MANU_SHORT_SOLTON, "Solton" },
1378 { RTP_MIDI_MANU_SHORT_JELLINGHAUS_MS, "Jellinghaus MS" },
1379 { RTP_MIDI_MANU_SHORT_SOUTHWORK_MUSIC_SYSTEMS, "Southworks Music Systems" },
1380 { RTP_MIDI_MANU_SHORT_PPG, "PPG" },
1381 { RTP_MIDI_MANU_SHORT_JEN, "JEN" },
1382 { RTP_MIDI_MANU_SHORT_SSL, "SSL (Solid States Logic)" },
1383 { RTP_MIDI_MANU_SHORT_AUDIO_VERITRIEB, "Audio Veritrieb" },
1384 { RTP_MIDI_MANU_SHORT_NEVE_HINTON_INSTRUMENTS, "Neve / Hinton Instruments" },
1385 { RTP_MIDI_MANU_SHORT_SOUNDTRACS, "Soundtracs Ltd" },
1386 { RTP_MIDI_MANU_SHORT_ELKA_GENERAL_MUSIC, "Elka / General Music" },
1387 { RTP_MIDI_MANU_SHORT_DYNACORD, "Dynacord" },
1388 { RTP_MIDI_MANU_SHORT_VISCOUNT, "Viscount" },
1389 { RTP_MIDI_MANU_SHORT_DRAWMER, "Drawmer" },
1390 { RTP_MIDI_MANU_SHORT_CLAVIA_DIGITAL_INSTRUMENTS, "Clavia Digital Instruments" },
1391 { RTP_MIDI_MANU_SHORT_AUDIO_ARCHITECTURE, "Audio Architecture" },
1392 { RTP_MIDI_MANU_SHORT_GENERAL_MUSIC_CORP, "General Music Corp" },
1393 { RTP_MIDI_MANU_SHORT_CHEETAH, "Cheetah Marketing" },
1394 { RTP_MIDI_MANU_SHORT_CTM, "C.T.M" },
1395 { RTP_MIDI_MANU_SHORT_SIMMONS_UK, "Simmons UK" },
1396 { RTP_MIDI_MANU_SHORT_SOUNDCRAFT_ELECTRONICS, "Soundcraft Electronics" },
1397 { RTP_MIDI_MANU_SHORT_STEINBERG_GMBH, "Steinberg GmbH" },
1398 { RTP_MIDI_MANU_SHORT_WERSI, "Wersi" },
1399 { RTP_MIDI_MANU_SHORT_AVAB_ELEKTRONIK_AB, "Avab Electronik Ab" },
1400 { RTP_MIDI_MANU_SHORT_DIGIGRAM, "Digigram" },
1401 { RTP_MIDI_MANU_SHORT_WALDORF, "Waldorf Electronics" },
1402 { RTP_MIDI_MANU_SHORT_QUASIMIDI, "Quasimidi" },
1403 { RTP_MIDI_MANU_SHORT_KAWAI, "Kawai" },
1404 { RTP_MIDI_MANU_SHORT_ROLAND, "Roland" },
1405 { RTP_MIDI_MANU_SHORT_KORG, "Korg" },
1406 { RTP_MIDI_MANU_SHORT_YAMAHA, "Yamaha" },
1407 { RTP_MIDI_MANU_SHORT_CASIO, "Casio" },
1408 { RTP_MIDI_MANU_SHORT_MORIDAIRA, "Moridaira" },
1409 { RTP_MIDI_MANU_SHORT_KAMIYA_STUDIO, "Kamiya Studio" },
1410 { RTP_MIDI_MANU_SHORT_AKAI, "Akai" },
1411 { RTP_MIDI_MANU_SHORT_JAPAN_VICTOR, "Japan Victor" },
1412 { RTP_MIDI_MANU_SHORT_MEISOSHA, "Meisosha" },
1413 { RTP_MIDI_MANU_SHORT_HOSHINO_GAKKI, "Hoshino Gakki" },
1414 { RTP_MIDI_MANU_SHORT_FUJITSU, "Fujitsu" },
1415 { RTP_MIDI_MANU_SHORT_SONY, "Sony" },
1416 { RTP_MIDI_MANU_SHORT_NISSHIN_ONPA, "Nisshin Onpa" },
1417 { RTP_MIDI_MANU_SHORT_TEAC, "TEAC" },
1418 { RTP_MIDI_MANU_SHORT_MATSUSHITA_ELECTRIC, "Matsushita Electric" },
1419 { RTP_MIDI_MANU_SHORT_FOSTEX, "Fostex" },
1420 { RTP_MIDI_MANU_SHORT_ZOOM, "Zoom" },
1421 { RTP_MIDI_MANU_SHORT_MIDORI_ELECTRONICS, "Midori Electronics" },
1422 { RTP_MIDI_MANU_SHORT_MATSUSHITA_COMMUNICATION, "Matsushita Communication" },
1423 { RTP_MIDI_MANU_SHORT_SUZUKI, "Suzuki" },
1424 { RTP_MIDI_MANU_SHORT_FUJI, "Fuji" },
1425 { RTP_MIDI_MANU_SHORT_ACOUSTIC_TECHNICAL_LAB, "Acoustic Technical Lab" },
1426 { RTP_MIDI_MANU_SHORT_FAITH, "Faith" },
1427 { RTP_MIDI_MANU_SHORT_INTERNET_CORPORATION, "Internet Corporation" },
1428 { RTP_MIDI_MANU_SHORT_SEEKERS_CO, "Seekers Co" },
1429 { RTP_MIDI_MANU_SHORT_SD_CARD_ASSOCIATION, "SD Card Assoc" },
1430 { RTP_MIDI_MANU_SHORT_EDUCATIONAL_USE, "Educational Use" },
1431 { RTP_MIDI_MANU_SHORT_NON_REALTIME_UNIVERSAL, "Non-Realtime Universal" },
1432 { RTP_MIDI_MANU_SHORT_REALTIME_UNIVERSAL, "Realtime Universal" },
1433 { 0, NULL }
1435 static value_string_ext rtp_midi_manu_short_values_ext = VALUE_STRING_EXT_INIT(rtp_midi_manu_short_values);
1437 static const value_string rtp_midi_manu_long_values[] = {
1438 /* North American Manufacturers */
1439 { RTP_MIDI_MANU_LONG_TIME_WARNER_INTERACTIVE, "Time Warner Interactive" },
1440 { RTP_MIDI_MANU_LONG_ADVANCED_GRAVIS_COMP, "Advanced Gravis Comp" },
1441 { RTP_MIDI_MANU_LONG_MEDIA_VISION, "Media Vision" },
1442 { RTP_MIDI_MANU_LONG_DORNES_RESEARCH_GROUP, "Dornes Research Group" },
1443 { RTP_MIDI_MANU_LONG_KMUSE, "K-Muse" },
1444 { RTP_MIDI_MANU_LONG_STYPHER, "Stypher" },
1445 { RTP_MIDI_MANU_LONG_DIGITAL_MUSIC_CORPORATION, "Digital Music Corporation" },
1446 { RTP_MIDI_MANU_LONG_IOTA_SYSTEMS, "IOTA Systems" },
1447 { RTP_MIDI_MANU_LONG_NEW_ENGLAND_DIGITAL, "New England Digital" },
1448 { RTP_MIDI_MANU_LONG_ARTISYN, "Artisyn" },
1449 { RTP_MIDI_MANU_LONG_IVL_TECHNOLOGIES, "IVL Technologies" },
1450 { RTP_MIDI_MANU_LONG_SOUTHERN_MUSIC_SYSTEMS, "Southern Music Systems" },
1451 { RTP_MIDI_MANU_LONG_LAKE_BUTLER_SOUND_COMPANY, "Lake Butler Sound Company" },
1452 { RTP_MIDI_MANU_LONG_ALESIS, "Alesis" },
1453 { RTP_MIDI_MANU_LONG_SOUND_CREATION, "Sound Creation" },
1454 { RTP_MIDI_MANU_LONG_DOD_ELECTRONICS, "DOD Electronics" },
1455 { RTP_MIDI_MANU_LONG_STUDER_EDITECH, "Studer-Editech" },
1456 { RTP_MIDI_MANU_LONG_SONUS, "Sonus" },
1457 { RTP_MIDI_MANU_LONG_TEMPORAL_ACUITY_PRODUCTS, "Temporal Acuity Products" },
1458 { RTP_MIDI_MANU_LONG_PERFECT_FRETWORKS, "Perfect Fretworks" },
1459 { RTP_MIDI_MANU_LONG_KAT, "KAT" },
1460 { RTP_MIDI_MANU_LONG_OPCODE, "Opcode" },
1461 { RTP_MIDI_MANU_LONG_RANE_CORP, "Rane Corp" },
1462 { RTP_MIDI_MANU_LONG_SPATIAL_SOUND_ANADI_INC, "Spatial Sound / Anadi Inc" },
1463 { RTP_MIDI_MANU_LONG_KMX, "KMX" },
1464 { RTP_MIDI_MANU_LONG_ALLEN_AND_HEATH_BRENNEL, "Allen & Heath Brenell" },
1465 { RTP_MIDI_MANU_LONG_PEAVEY, "Peavey" },
1466 { RTP_MIDI_MANU_LONG_360_SYSTEMS, "360 Systems" },
1467 { RTP_MIDI_MANU_LONG_SPECTRUM_DESIGN_DEVELOPMENT, "Spectrum Design and Development" },
1468 { RTP_MIDI_MANU_LONG_MARQUIS_MUSIC, "Marquis Music" },
1469 { RTP_MIDI_MANU_LONG_ZETA_SYSTEMS, "Zeta Systems" },
1470 { RTP_MIDI_MANU_LONG_AXXES, "Axxes" },
1471 { RTP_MIDI_MANU_LONG_ORBAN, "Orban" },
1472 { RTP_MIDI_MANU_LONG_INDIAN_VALLEY, "Indian Valley Mfg" },
1473 { RTP_MIDI_MANU_LONG_TRITON, "Triton" },
1474 { RTP_MIDI_MANU_LONG_KTI, "KTI" },
1475 { RTP_MIDI_MANU_LONG_BREAKAWAY_TECHNOLOGIES, "Breakaway Technologies" },
1476 { RTP_MIDI_MANU_LONG_CAE, "CAE" },
1477 { RTP_MIDI_MANU_LONG_HARRISON_SYSTEMS_INC, "Harrison Systems Inc" },
1478 { RTP_MIDI_MANU_LONG_FUTURE_LAB_MARK_KUO, "Future Lab / Mark Kuo" },
1479 { RTP_MIDI_MANU_LONG_ROCKTRON_CORP, "Rocktron Corp" },
1480 { RTP_MIDI_MANU_LONG_PIANODISC, "PianoDisc" },
1481 { RTP_MIDI_MANU_LONG_CANNON_RESEARCH_GROUP, "Cannon Research Group" },
1482 { RTP_MIDI_MANU_LONG_RODGERS_INSTRUMENTS_CORP, "Rodgers Instrument Corp" },
1483 { RTP_MIDI_MANU_LONG_BLUE_SKY_LOGIC, "Blue Sky Logic" },
1484 { RTP_MIDI_MANU_LONG_ENCORE_ELECTRONICS, "Encore Electronics" },
1485 { RTP_MIDI_MANU_LONG_UPTOWN, "Uptown" },
1486 { RTP_MIDI_MANU_LONG_VOCE, "Voce" },
1487 { RTP_MIDI_MANU_LONG_CTI_AUDIO_INC, "CTI Audio, Inc / Music Intel Dev" },
1488 { RTP_MIDI_MANU_LONG_SS_RESEARCH, "S&S Research" },
1489 { RTP_MIDI_MANU_LONG_BRODERBUND_SOFTWARE, "Broderbund Software Inc" },
1490 { RTP_MIDI_MANU_LONG_ALLEN_ORGAN_CO, "Allen Organ Co" },
1491 { RTP_MIDI_MANU_LONG_MUSIC_QUEST, "Music Quest" },
1492 { RTP_MIDI_MANU_LONG_APHEX, "APHEX" },
1493 { RTP_MIDI_MANU_LONG_GALLIEN_KRUEGER, "Gallien Krueger" },
1494 { RTP_MIDI_MANU_LONG_IBM, "IBM" },
1495 { RTP_MIDI_MANU_LONG_MARK_OF_THE_UNICORN, "Mark of the Unicorn" },
1496 { RTP_MIDI_MANU_LONG_HOTZ_INSTRUMENTS_TECH, "Hotz Instruments Technologies" },
1497 { RTP_MIDI_MANU_LONG_ETA_LIGHTING, "ETA Lighting" },
1498 { RTP_MIDI_MANU_LONG_NSI_CORPORATION, "NSI Corporation" },
1499 { RTP_MIDI_MANU_LONG_ADLIB_INC, "PAd Lib, Inc" },
1500 { RTP_MIDI_MANU_LONG_RICHMOND_SOUND_DESIGN, "Richmond Sound Design" },
1501 { RTP_MIDI_MANU_LONG_MICROSOFT, "Microsoft" },
1502 { RTP_MIDI_MANU_LONG_THE_SOFTWARE_TOOLWORKS, "The Software Toolworks" },
1503 { RTP_MIDI_MANU_LONG_RJMG_NICHE, "RJMG / Niche" },
1504 { RTP_MIDI_MANU_LONG_INTONE, "Intone" },
1505 { RTP_MIDI_MANU_LONG_ADVANCED_REMOTE_TECH, "Advanced Remote Tech" },
1506 { RTP_MIDI_MANU_LONG_GT_ELECTRONICS_GROOVE_TUBES, "GT Electronics / Groove Tubes" },
1507 { RTP_MIDI_MANU_LONG_INTERMIDI, "InterMIDI" },
1508 { RTP_MIDI_MANU_LONG_TIMELINE_VISTA, "Timeline Vista" },
1509 { RTP_MIDI_MANU_LONG_MESA_BOOGIE, "Mesa Boogie" },
1510 { RTP_MIDI_MANU_LONG_SEQUOIA_DEVELOPMENT, "Sequoia Development" },
1511 { RTP_MIDI_MANU_LONG_STUDIO_ELECTRONICS, "Studio Electronics" },
1512 { RTP_MIDI_MANU_LONG_EUPHONIX, "Euphonix" },
1513 { RTP_MIDI_MANU_LONG_INTERMIDI2, "InterMIDI" },
1514 { RTP_MIDI_MANU_LONG_MIDI_SOLUTIONS, "MIDI Solutions" },
1515 { RTP_MIDI_MANU_LONG_3DO_COMPANY, "3DO Company" },
1516 { RTP_MIDI_MANU_LONG_LIGHTWAVE_RESEARCH, "Lightwave Research" },
1517 { RTP_MIDI_MANU_LONG_MICROW, "Micro-W" },
1518 { RTP_MIDI_MANU_LONG_SPECTRAL_SYNTHESIS, "Spectral Synthesis" },
1519 { RTP_MIDI_MANU_LONG_LONE_WOLF, "Lone Wolf" },
1520 { RTP_MIDI_MANU_LONG_STUDIO_TECHNOLOGIES, "Studio Technologies" },
1521 { RTP_MIDI_MANU_LONG_PETERSON_EMP, "Peterson EMP" },
1522 { RTP_MIDI_MANU_LONG_ATARI, "Atari" },
1523 { RTP_MIDI_MANU_LONG_MARION_SYSTEMS, "Marion Systems" },
1524 { RTP_MIDI_MANU_LONG_DESIGN_EVENT, "Design Event" },
1525 { RTP_MIDI_MANU_LONG_WINJAMMER_SOFTWARE, "Winjammer Software" },
1526 { RTP_MIDI_MANU_LONG_ATT_BELL_LABS, "AT&T Bell Labs" },
1527 { RTP_MIDI_MANU_LONG_SYMETRIX, "Symetrix" },
1528 { RTP_MIDI_MANU_LONG_MIDI_THE_WORLD, "MIDI the world" },
1529 { RTP_MIDI_MANU_LONG_DESPER_PRODUCTS, "Desper Products" },
1530 { RTP_MIDI_MANU_LONG_MICROS_N_MIDI, "Micros 'n MIDI" },
1531 { RTP_MIDI_MANU_LONG_ACCORDIANS_INTL, "Accodians Intl" },
1532 { RTP_MIDI_MANU_LONG_EUPHONICS, "EuPhonics" },
1533 { RTP_MIDI_MANU_LONG_MUSONIX, "Musonix" },
1534 { RTP_MIDI_MANU_LONG_TURTLE_BEACH_SYSTEMS, "Turtle Beach Systems" },
1535 { RTP_MIDI_MANU_LONG_MACKIE_DESIGNS, "Mackie Designs" },
1536 { RTP_MIDI_MANU_LONG_COMPUSERVE, "Compuserve" },
1537 { RTP_MIDI_MANU_LONG_BES_TECHNOLOGIES, "BES Technologies" },
1538 { RTP_MIDI_MANU_LONG_QRS_MUSIC_ROLLS, "QRS Music Rolls" },
1539 { RTP_MIDI_MANU_LONG_P_G_MUSIC, "P G Music" },
1540 { RTP_MIDI_MANU_LONG_SIERRA_SEMICONDUCTOR, "Sierra Semiconductor" },
1541 { RTP_MIDI_MANU_LONG_EPIGRAF_AUDIO_VISUAL, "EpiGraf Audio Visual" },
1542 { RTP_MIDI_MANU_LONG_ELECTRONICS_DIVERSIFIED, "Electronics Diversified" },
1543 { RTP_MIDI_MANU_LONG_TUNE_1000, "Tune 1000" },
1544 { RTP_MIDI_MANU_LONG_ADVANCED_MICRO_DEVICES, "Advanced Micro Devices" },
1545 { RTP_MIDI_MANU_LONG_MEDIAMATION, "Mediamation" },
1546 { RTP_MIDI_MANU_LONG_SABINE_MUSIC, "Sabine Music" },
1547 { RTP_MIDI_MANU_LONG_WOOG_LABS, "Woog Labs" },
1548 { RTP_MIDI_MANU_LONG_MIRCOPOLIS, "Micropolis" },
1549 { RTP_MIDI_MANU_LONG_TA_HORNG_MUSICAL_INSTRUMENT, "Ta Horng Musical Instrument" },
1550 { RTP_MIDI_MANU_LONG_ETEK_LABS_FORTE_TECH, "e-Tek Labs (Forte Tech)" },
1551 { RTP_MIDI_MANU_LONG_ELECTRO_VOICE, "Electro-Voice" },
1552 { RTP_MIDI_MANU_LONG_MIDISOFT_CORPORATION, "Midisoft Corporation" },
1553 { RTP_MIDI_MANU_LONG_QSOUND_LABS, "Q-Sound Labs" },
1554 { RTP_MIDI_MANU_LONG_WESTREX, "Westrex" },
1555 { RTP_MIDI_MANU_LONG_NVIDIA, "NVidia" },
1556 { RTP_MIDI_MANU_LONG_ESS_TECHNOLOGY, "ESS Technology" },
1557 { RTP_MIDI_MANU_LONG_MEDIATRIX_PERIPHERALS, "MediaTrix Peripherals" },
1558 { RTP_MIDI_MANU_LONG_BROOKTREE_CORP, "Brooktree Corp" },
1559 { RTP_MIDI_MANU_LONG_OTARI_CORP, "Otari Corp" },
1560 { RTP_MIDI_MANU_LONG_KEY_ELECTRONICS, "Key Electronics" },
1561 { RTP_MIDI_MANU_LONG_SHURE_INCORPORATED, "Shure Incorporated" },
1562 { RTP_MIDI_MANU_LONG_AURA_SOUND, "Aura Sound" },
1563 { RTP_MIDI_MANU_LONG_CRYSTAL_SEMICONDUCTOR, "Crystal Semiconductor" },
1564 { RTP_MIDI_MANU_LONG_CONEXANT_ROCKWELL, "Conexant (Rockwell)" },
1565 { RTP_MIDI_MANU_LONG_SILICON_GRAPHICS, "Silicon Graphics" },
1566 { RTP_MIDI_MANU_LONG_MAUDIO_MIDIMAN, "M-Audio (Midiman)" },
1567 { RTP_MIDI_MANU_LONG_PRESONUS, "PreSonus" },
1568 { RTP_MIDI_MANU_LONG_TOPAZ_ENTERPRISES, "Topaz Enterprises" },
1569 { RTP_MIDI_MANU_LONG_CAST_LIGHTING, "Cast Lighting" },
1570 { RTP_MIDI_MANU_LONG_MICROSOFT_CONSUMER_DIVISION, "Microsoft (Consumer Division)" },
1571 { RTP_MIDI_MANU_LONG_SONIC_FOUNDRY, "Sonic Foundry" },
1572 { RTP_MIDI_MANU_LONG_LINE6_FAST_FORWARD, "Line 6 (Fast Forward)" },
1573 { RTP_MIDI_MANU_LONG_BEATNIK_INC, "Beatnik Inc" },
1574 { RTP_MIDI_MANU_LONG_VAN_KOEVERING_COMPANY, "Van Koevering Company" },
1575 { RTP_MIDI_MANU_LONG_ALTECH_SYSTEMS, "DiAltech Systemsgit" },
1576 { RTP_MIDI_MANU_LONG_S_S_RESEARCH, "S&S Research" },
1577 { RTP_MIDI_MANU_LONG_VLSI_TECHNOLOGY, "VLSI Technology" },
1578 { RTP_MIDI_MANU_LONG_CHROMATIC_RESEARCH, "Chromatic Research" },
1579 { RTP_MIDI_MANU_LONG_SAPPHIRE, "Sapphire" },
1580 { RTP_MIDI_MANU_LONG_IDRC, "IDRC" },
1581 { RTP_MIDI_MANU_LONG_JUSTONIC_TUNING, "Justonic Tuning" },
1582 { RTP_MIDI_MANU_LONG_TORCOMP_RESEARCH_INC, "TorComp Research Inc" },
1583 { RTP_MIDI_MANU_LONG_NEWTEK_INC, "NewTek Inc" },
1584 { RTP_MIDI_MANU_LONG_SOUND_SCULPTURE, "Sound Sculpture" },
1585 { RTP_MIDI_MANU_LONG_WALKER_TECHNICAL, "Walker Technical" },
1586 { RTP_MIDI_MANU_LONG_DIGITAL_HARMONY, "Digital Harmony" },
1587 { RTP_MIDI_MANU_LONG_INVISION_INTERACTIVE, "InVision Interactive" },
1588 { RTP_MIDI_MANU_LONG_TSQUARE_DESIGN, "T-Square Design" },
1589 { RTP_MIDI_MANU_LONG_NEMESYS_MUSIC_TECHNOLOGY, "Nemesys Music Technology" },
1590 { RTP_MIDI_MANU_LONG_DBX_PROFESSIONAL_HARMAN_INTL, "DBX Professional (Harman Intl)" },
1591 { RTP_MIDI_MANU_LONG_SYNDYNE_CORPORATION, "Syndyne Corporation" },
1592 { RTP_MIDI_MANU_LONG_BITHEADZ, "Bitheadz" },
1593 { RTP_MIDI_MANU_LONG_CAKEWALK_MUSIC_SOFTWARE, "Cakewalk Music Software" },
1594 { RTP_MIDI_MANU_LONG_ANALOG_DEVICES, "Analog Devices" },
1595 { RTP_MIDI_MANU_LONG_NATIONAL_SEMICONDUCTOR, "National Semiconductor" },
1596 { RTP_MIDI_MANU_LONG_BOOM_THEORY, "Boom Theory" },
1597 { RTP_MIDI_MANU_LONG_VIRTUAL_DSP_CORPORATION, "Virtual DSP Corporation" },
1598 { RTP_MIDI_MANU_LONG_ANTARES_SYSTEMS, "Antares Systems" },
1599 { RTP_MIDI_MANU_LONG_ANGEL_SOFTWARE, "Angel Software" },
1600 { RTP_MIDI_MANU_LONG_ST_LOUIS_MUSIC, "St Louis Music" },
1601 { RTP_MIDI_MANU_LONG_LYRRUS_DBA_GVOX, "Lyrrus dba G-VOX" },
1602 { RTP_MIDI_MANU_LONG_ASHLEY_AUDIO_INC, "Ashley Audio Inc" },
1603 { RTP_MIDI_MANU_LONG_VARILITE_INC, "Vari-Lite Inc" },
1604 { RTP_MIDI_MANU_LONG_SUMMIT_AUDIO_INC, "Summit Audio Inc" },
1605 { RTP_MIDI_MANU_LONG_AUREAL_SEMICONDUCTOR_INC, "Aureal Semiconductor Inc" },
1606 { RTP_MIDI_MANU_LONG_SEASOUND_LLC, "SeaSound LLC" },
1607 { RTP_MIDI_MANU_LONG_US_ROBOTICS, "U.S. Robotics" },
1608 { RTP_MIDI_MANU_LONG_AURISIS_RESEARCH, "Aurisis Research" },
1609 { RTP_MIDI_MANU_LONG_NEARFIELD_MULTIMEDIA, "Nearfield Multimedia" },
1610 { RTP_MIDI_MANU_LONG_FM7_INC, "FM7 Inc" },
1611 { RTP_MIDI_MANU_LONG_SWIVEL_SYSTEMS, "Swivel Systems" },
1612 { RTP_MIDI_MANU_LONG_HYPERACTIVE_AUDIO_SYSTEMS, "Hyperactive Audio Systems" },
1613 { RTP_MIDI_MANU_LONG_MIDILITE_CASTE_STUDIO_PROD, "MidiLite (Castle Studios Productions)" },
1614 { RTP_MIDI_MANU_LONG_RADIKAL_TECHNOLOGIES, "Radikal Technologies" },
1615 { RTP_MIDI_MANU_LONG_ROGER_LINN_DESIGN, "Roger Linn Design" },
1616 { RTP_MIDI_MANU_LONG_TCHELION_VOCAL_TECHNOLOGIES, "TC-Helicon Vocal Technologies" },
1617 { RTP_MIDI_MANU_LONG_EVENT_ELECTRONICS, "Event Electronics" },
1618 { RTP_MIDI_MANU_LONG_SONIC_NETWORK_INC, "Sonic Network Inc" },
1619 { RTP_MIDI_MANU_LONG_REALTIME_MUSIC_SOLUTIONS, "Realtime Music Solutions" },
1620 { RTP_MIDI_MANU_LONG_APOGEE_DIGITAL, "Apogee Digital" },
1621 { RTP_MIDI_MANU_LONG_CLASSICAL_ORGANS_INC, "Classical Organs, Inc" },
1622 { RTP_MIDI_MANU_LONG_MICROTOOLS_INC, "Microtools Inc" },
1623 { RTP_MIDI_MANU_LONG_NUMARK_INDUSTRIES, "Numark Industries" },
1624 { RTP_MIDI_MANU_LONG_FRONTIER_DESIGN_GROUP_LLC, "Frontier Design Group LLC" },
1625 { RTP_MIDI_MANU_LONG_RECORDARE_LLC, "Recordare LLC" },
1626 { RTP_MIDI_MANU_LONG_STARR_LABS, "Starr Labs" },
1627 { RTP_MIDI_MANU_LONG_VOYAGER_SOUND_INC, "Voyager Sound Inc" },
1628 { RTP_MIDI_MANU_LONG_MANIFOLD_LABS, "Manifold Labs" },
1629 { RTP_MIDI_MANU_LONG_AVIOM_INC, "Aviom Inc" },
1630 { RTP_MIDI_MANU_LONG_MIXMEISTER_TECHNOLOGY, "Mixmeister Technology" },
1631 { RTP_MIDI_MANU_LONG_NOTATION_SOFTWARE, "Notation Software" },
1632 { RTP_MIDI_MANU_LONG_MERCURIAL_COMMUNICATIONS, "Mercurial Communications" },
1633 { RTP_MIDI_MANU_LONG_WAVE_ARTS, "Wave Arts" },
1634 { RTP_MIDI_MANU_LONG_LOGIC_SEQUENCING_DEVICES, "Logic Sequencing Devices" },
1635 { RTP_MIDI_MANU_LONG_AXESS_ELECTRONICS, "Axess Electronics" },
1636 { RTP_MIDI_MANU_LONG_MUSE_RESEARCH, "Muse Research" },
1637 { RTP_MIDI_MANU_LONG_OPEN_LABS, "Open Labs" },
1638 { RTP_MIDI_MANU_LONG_GUILLEMOT_RD_INC, "Guillemot R&D Inc" },
1639 { RTP_MIDI_MANU_LONG_SAMSON_TECHNOLOGIES, "Samson Technologies" },
1640 { RTP_MIDI_MANU_LONG_ELECTRONIC_THEATRE_CONTROLS, "Electronic Theatre Controls" },
1641 { RTP_MIDI_MANU_LONG_RESEARCH_IN_MOTION, "Research In Motion" },
1642 { RTP_MIDI_MANU_LONG_MOBILEER, "Mobileer" },
1643 { RTP_MIDI_MANU_LONG_SYNTHOGY, "Synthogy" },
1644 { RTP_MIDI_MANU_LONG_LYNX_STUDIO_TECHNOLOGY_INC, "Lynx Studio Technology Inc" },
1645 { RTP_MIDI_MANU_LONG_DAMAGE_CONTROL_ENGINEERING, "Damage Control Engineering LLC" },
1646 { RTP_MIDI_MANU_LONG_YOST_ENGINEERING_INC, "Yost Engineering Inc" },
1647 { RTP_MIDI_MANU_LONG_BROOKS_FORSMAN_DESIGNS_LLC, "Brooks & Forsman Designs LLC" },
1648 { RTP_MIDI_MANU_LONG_MAGNEKEY, "Magnekey" },
1649 { RTP_MIDI_MANU_LONG_GARRITAN_CORP, "Garritan Corp" },
1650 { RTP_MIDI_MANU_LONG_PLOQUE_ART_ET_TECHNOLOGIE, "Ploque Art et Technologie, Inc" },
1651 { RTP_MIDI_MANU_LONG_RJM_MUSIC_TECHNOLOGY, "RJM Music Technology" },
1652 { RTP_MIDI_MANU_LONG_CUSTOM_SOLUTIONS_SOFTWARE, "Custom Solutions Software" },
1653 { RTP_MIDI_MANU_LONG_SONARCANA_LLC, "Sonarcana LLC" },
1654 { RTP_MIDI_MANU_LONG_CENTRANCE, "Centrance" },
1655 { RTP_MIDI_MANU_LONG_KESUMO_LLC, "Kesumo LLC" },
1656 { RTP_MIDI_MANU_LONG_STANTON, "Stanton" },
1657 { RTP_MIDI_MANU_LONG_LIVID_INSTRUMENTS, "Livid Instruments" },
1658 { RTP_MIDI_MANU_LONG_FIRST_ACT_745_MEDIA, "First Act / 745 Media" },
1659 { RTP_MIDI_MANU_LONG_PYGRAPHICS_INC, "Pygraphics, Inc" },
1660 { RTP_MIDI_MANU_LONG_PANADIGM_INNOVATIONS_LTD, "Panadigm Innovations Ltd" },
1661 { RTP_MIDI_MANU_LONG_AVEDIS_ZILDJIAN_CO, "Avedis Zildjian Co" },
1662 { RTP_MIDI_MANU_LONG_AUVITAL_MUSIC_CORP, "Auvital Music Corp" },
1663 { RTP_MIDI_MANU_LONG_INSPIRED_INSTRUMENTS_INC, "Inspired Instruments Inc" },
1664 { RTP_MIDI_MANU_LONG_CHRIS_GRIGG_DESIGNS, "Chris Grigg Designs" },
1665 { RTP_MIDI_MANU_LONG_SLATE_DIGITAL_LLC, "Slate Digital LLC" },
1666 { RTP_MIDI_MANU_LONG_MIXWARE, "Mixware" },
1667 { RTP_MIDI_MANU_LONG_SOCIAL_ENTROPY, "Social Entropy" },
1668 { RTP_MIDI_MANU_LONG_SOURCE_AUDIO_LLC, "Source Audio LLC" },
1669 { RTP_MIDI_MANU_LONG_RESERVED_016d, "reserved" },
1670 { RTP_MIDI_MANU_LONG_RESERVED_016e, "reserved" },
1671 { RTP_MIDI_MANU_LONG_RESERVED_016f, "reserved" },
1672 { RTP_MIDI_MANU_LONG_AMERICAN_AUDIO_DJ, "American Audio/DJ" },
1673 { RTP_MIDI_MANU_LONG_MEGA_CONTROL_SYSTEMS, "Mega Control Systems" },
1674 { RTP_MIDI_MANU_LONG_KILPATRICK_AUDIO, "Kilpatrick Audio" },
1675 { RTP_MIDI_MANU_LONG_IKINGDOM_CORP, "iKingdom Corp" },
1676 { RTP_MIDI_MANU_LONG_FRACTAL_AUDIO, "Fractal Audio" },
1677 { RTP_MIDI_MANU_LONG_NETLOGIC_MICROSYSTEMS, "NetLogic Microsystems" },
1678 { RTP_MIDI_MANU_LONG_MUSIC_COMPUTING, "Music Computing" },
1679 { RTP_MIDI_MANU_LONG_NEKTAR_TECHNOLOGY_INC, "Nektar Technology Inc" },
1680 { RTP_MIDI_MANU_LONG_ZENPH_SOUND_INNOVATIONS, "Zenph Sound Innovations" },
1681 { RTP_MIDI_MANU_LONG_DJTECHTOOLS_COM, "DJTechTools.com" },
1682 { RTP_MIDI_MANU_LONG_RESERVED_017a, "reserved" },
1684 /* European Manufacturers */
1685 { RTP_MIDI_MANU_LONG_DREAM, "Dream" },
1686 { RTP_MIDI_MANU_LONG_STRAND_LIGHTING, "Strand Lighting" },
1687 { RTP_MIDI_MANU_LONG_AMEK_SYSTEMS, "Amek Systems" },
1688 { RTP_MIDI_MANU_LONG_CASA_DI_RISPARMIO_DI_LORETO, "Cas Di Risparmio Di Loreto" },
1689 { RTP_MIDI_MANU_LONG_BOHM_ELECTRONIC, "Bohm electronic" },
1690 { RTP_MIDI_MANU_LONG_SYNTEC_DIGITAL_AUDIO, "Syntec Digital Audio" },
1691 { RTP_MIDI_MANU_LONG_TRIDENT_AUDIO, "Trident Audio" },
1692 { RTP_MIDI_MANU_LONG_REAL_WORLD_STUDIO, "Real World Studio" },
1693 { RTP_MIDI_MANU_LONG_EVOLUTION_SYNTHESIS, "Evolution Synthesis" },
1694 { RTP_MIDI_MANU_LONG_YES_TECHNOLOGY, "Yes Technology" },
1695 { RTP_MIDI_MANU_LONG_AUDIOMATICA, "Audiomatica" },
1696 { RTP_MIDI_MANU_LONG_BONTEMPI_FARFISA, "Bontempi / Farfisa" },
1697 { RTP_MIDI_MANU_LONG_FBT_ELETTRONICA, "F.B.T. Elettronica" },
1698 { RTP_MIDI_MANU_LONG_MIDITEMP, "Miditemp" },
1699 { RTP_MIDI_MANU_LONG_LA_AUDIO_LARKING_AUDIO, "LA Audio (Larking Audio)" },
1700 { RTP_MIDI_MANU_LONG_ZERO_88_LIGHTING_LIMITED, "Zero 88 Lighting Limited" },
1701 { RTP_MIDI_MANU_LONG_MICON_AUDIO_ELECTRONICS_GMBH, "Micon Audio Electronics GmbH" },
1702 { RTP_MIDI_MANU_LONG_FOREFRONT_TECHNOLOGY, "Forefront Technology" },
1703 { RTP_MIDI_MANU_LONG_STUDIO_AUDIO_AND_VIDEO_LTD, "Studio Audio and Video Ltd" },
1704 { RTP_MIDI_MANU_LONG_KENTON_ELECTRONICS, "Kenton Electronics" },
1705 { RTP_MIDI_MANU_LONG_CELCO_DIVISON_OF_ELECTRONICS, "Celco Division of Electrosonic" },
1706 { RTP_MIDI_MANU_LONG_ADB, "ADB" },
1707 { RTP_MIDI_MANU_LONG_MARSHALL_PRODUCTS, "Marshall Products" },
1708 { RTP_MIDI_MANU_LONG_DDA, "DDA" },
1709 { RTP_MIDI_MANU_LONG_BBS, "BSS" },
1710 { RTP_MIDI_MANU_LONG_MA_LIGHTING_TECHNOLOGY, "MA Lighting Technology" },
1711 { RTP_MIDI_MANU_LONG_FATAR, "Fatar" },
1712 { RTP_MIDI_MANU_LONG_QSC_AUDIO, "QSC Audio" },
1713 { RTP_MIDI_MANU_LONG_ARTISAN_CLASSIC_ORGAN, "Artisan Classic Organ" },
1714 { RTP_MIDI_MANU_LONG_ORLA_SPA, "Rola Spa" },
1715 { RTP_MIDI_MANU_LONG_PINNACLE_AUDIO, "Pinnacle Audio" },
1716 { RTP_MIDI_MANU_LONG_TC_ELECTRONICS, "TC Electronics" },
1717 { RTP_MIDI_MANU_LONG_DOEPFER_MUSIKELEKTRONIK, "Doepfer Musikelektronik" },
1718 { RTP_MIDI_MANU_LONG_CREATIVE_TECHNOLOGY_PTE, "Creative Technology Pte" },
1719 { RTP_MIDI_MANU_LONG_MINAMI_SEIYDDO, "Minami / Seiyddo" },
1720 { RTP_MIDI_MANU_LONG_MIDISOFT_SAS_DI_M_CIMA, "Goldstar" },
1721 { RTP_MIDI_MANU_LONG_SAMICK, "Samick" },
1722 { RTP_MIDI_MANU_LONG_PENNY_AND_GILES, "Penny and Giles" },
1723 { RTP_MIDI_MANU_LONG_ACORN_COMPUTER, "Acorn Computer" },
1724 { RTP_MIDI_MANU_LONG_LSC_ELECTRONICS, "LSC Electronics" },
1725 { RTP_MIDI_MANU_LONG_NOVATION_EMS, "Novation EMS" },
1726 { RTP_MIDI_MANU_LONG_SAMKYUNG_MECHATRONICS, "Samkyung Mechatronics" },
1727 { RTP_MIDI_MANU_LONG_MEDELI_ELECTRONICS_CO, "Medeli Electronics Co" },
1728 { RTP_MIDI_MANU_LONG_CHARLIE_LAB_SRL, "Charlie Lab SRL" },
1729 { RTP_MIDI_MANU_LONG_BLUE_CHIP_MUSIC_TECHNOLOGY, "Blue Chip Music Technology" },
1730 { RTP_MIDI_MANU_LONG_BEE_OH_CORP, "BEE OH Corp" },
1731 { RTP_MIDI_MANU_LONG_LG_SEMICON_AMERICA, "LG Semicon America" },
1732 { RTP_MIDI_MANU_LONG_TESI, "TESI" },
1733 { RTP_MIDI_MANU_LONG_EMAGIC, "EMAGIC" },
1734 { RTP_MIDI_MANU_LONG_BEHRINGER_GMBH, "Behringer GmbH" },
1735 { RTP_MIDI_MANU_LONG_ACCESS_MUSIC_ELECTRONICS, "Access Music Electronics" },
1736 { RTP_MIDI_MANU_LONG_SYNOPTIC, "Synoptic" },
1737 { RTP_MIDI_MANU_LONG_HANMESOFT_CORP, "Hanmesoft Corp" },
1738 { RTP_MIDI_MANU_LONG_TERRATEC_ELECTRONIC_GMBH, "Terratec Electronic GmbH" },
1739 { RTP_MIDI_MANU_LONG_PROEL_SPA, "Proel SpA" },
1740 { RTP_MIDI_MANU_LONG_IBK_MIDI, "IBK MIDI" },
1741 { RTP_MIDI_MANU_LONG_IRCAM, "IRCAM" },
1742 { RTP_MIDI_MANU_LONG_PROPELLERHEAD_SOFTWARE, "Propellerhead Software" },
1743 { RTP_MIDI_MANU_LONG_RED_SOUND_SYSTEMS_LTD, "Red Sound Systems Ltd" },
1744 { RTP_MIDI_MANU_LONG_ELEKTRON_ESI_AB, "Elektron ESI AB" },
1745 { RTP_MIDI_MANU_LONG_SINTEFEX_AUDIO, "Sintefex Audio" },
1746 { RTP_MIDI_MANU_LONG_MAM_MUSIC_AND_MORE, "MAM (Music and More)" },
1747 { RTP_MIDI_MANU_LONG_AMSARO_GMBH, "Amsaro GmbH" },
1748 { RTP_MIDI_MANU_LONG_CDS_ADVANCED_TECHNOLOGY_BV, "CDS Advanced Technology BV" },
1749 { RTP_MIDI_MANU_LONG_TOUCHED_BY_SOUND_GMBH, "Touched By Sound GmbH" },
1750 { RTP_MIDI_MANU_LONG_DSP_ARTS, "DSP Arts" },
1751 { RTP_MIDI_MANU_LONG_PHIL_REES_MUSIC_TECH, "Phil Rees Music Tech" },
1752 { RTP_MIDI_MANU_LONG_STAMER_MUSIKANLAGEN_GMBH, "Stamer Musikanlagen GmbH" },
1753 { RTP_MIDI_MANU_LONG_MUSICAL_MUNTANER_SA_DBA, "Musical Muntaner S.A. dba Soundart" },
1754 { RTP_MIDI_MANU_LONG_CMEXX_SOFTWARE, "C-Mexx Software" },
1755 { RTP_MIDI_MANU_LONG_KLAVIS_TECHNOLOGIES, "Klavis Technologies" },
1756 { RTP_MIDI_MANU_LONG_NOTEHEADS_AB, "Noteheads AB" },
1757 { RTP_MIDI_MANU_LONG_ALGORITHMIX, "Algorithmix" },
1758 { RTP_MIDI_MANU_LONG_SKRYDSTRUP_RD, "Skrydstrup R&D" },
1759 { RTP_MIDI_MANU_LONG_PROFRESSIONAL_AUDIO_COMPANY, "Professional Audio Company" },
1760 { RTP_MIDI_MANU_LONG_DBTECH_MADWAVES, "DBTECH/MadWaves" },
1761 { RTP_MIDI_MANU_LONG_VERMONA, "Vermona" },
1762 { RTP_MIDI_MANU_LONG_NOKIA, "Nokia" },
1763 { RTP_MIDI_MANU_LONG_WAVE_IDEA, "Wave Idea" },
1764 { RTP_MIDI_MANU_LONG_HARTMANN_GMBH, "Hartmann GmbH" },
1765 { RTP_MIDI_MANU_LONG_LIONS_TRACK, "Lion's Track" },
1766 { RTP_MIDI_MANU_LONG_ANALOGUE_SYSTEMS, "Analogue Systems" },
1767 { RTP_MIDI_MANU_LONG_FOCAL_JMLAB, "Focal-JMlab" },
1768 { RTP_MIDI_MANU_LONG_RINGWAY_ELECTRONICS, "Ringway Electronics" },
1769 { RTP_MIDI_MANU_LONG_FAITH_TECHNOLOGIES_DIGIPLUG, "Faith Technologies (Digiplug)" },
1770 { RTP_MIDI_MANU_LONG_SHOWWORKS, "Showworks" },
1771 { RTP_MIDI_MANU_LONG_MANIKIN_ELECTRONIC, "Manikin Electronic" },
1772 { RTP_MIDI_MANU_LONG_1_COME_TECH, "1 Come Tech" },
1773 { RTP_MIDI_MANU_LONG_PHONIC_CORP, "Phonic Corp" },
1774 { RTP_MIDI_MANU_LONG_LAKE_TECHNOLOGY, "Lake Technology" },
1775 { RTP_MIDI_MANU_LONG_SILANSYS_TECHNOLOGIES, "Silansys Technologies" },
1776 { RTP_MIDI_MANU_LONG_WINBOND_ELECTRONICS, "Winbond Electronics" },
1777 { RTP_MIDI_MANU_LONG_CINETIX_MEDIEN_UND_INTERFACE, "Cinetix Medien und Interface GmbH" },
1778 { RTP_MIDI_MANU_LONG_AG_SOLUTIONI_DIGITALI, "A&G Soluzioni Digitali" },
1779 { RTP_MIDI_MANU_LONG_SEQUENTIX_MUSIC_SYSTEMS, "Sequentix Music Systems" },
1780 { RTP_MIDI_MANU_LONG_ORAM_PRO_AUDIO, "Oram Pro Audio" },
1781 { RTP_MIDI_MANU_LONG_BE4_LTD, "Be4 Ltd" },
1782 { RTP_MIDI_MANU_LONG_INFECTION_MUSIC, "Infection Music" },
1783 { RTP_MIDI_MANU_LONG_CENTRAL_MUSIC_CO_CME, "Central Music Co. (CME)" },
1784 { RTP_MIDI_MANU_LONG_GENOQS_MACHINES, "GenoQs Machines" },
1785 { RTP_MIDI_MANU_LONG_MEDIALON, "Medialon" },
1786 { RTP_MIDI_MANU_LONG_WAVES_AUDIO_LTD, "Waves Audio Ltd" },
1787 { RTP_MIDI_MANU_LONG_JERASH_LABS, "Jerash Labs" },
1788 { RTP_MIDI_MANU_LONG_DA_FACT, "Da Fact" },
1789 { RTP_MIDI_MANU_LONG_ELBY_DESIGNS, "Elby Designs" },
1790 { RTP_MIDI_MANU_LONG_SPECTRAL_AUDIO, "Spectral Audio" },
1791 { RTP_MIDI_MANU_LONG_ARTURIA, "Arturia" },
1792 { RTP_MIDI_MANU_LONG_VIXID, "Vixid" },
1793 { RTP_MIDI_MANU_LONG_C_THRU_MUSIC, "C-Thru Music" },
1794 { RTP_MIDI_MANU_LONG_YA_HORNG_ELECTRONIC_CO_LTD, "Ya Horng Electronic Co LTD" },
1795 { RTP_MIDI_MANU_LONG_SM_PRO_AUDIO, "SM Pro Audio" },
1796 { RTP_MIDI_MANU_LONG_OTO_MACHINES, "OTO MACHINES" },
1797 { RTP_MIDI_MANU_LONG_ELZAB_SA_G_LAB, "ELZAB S.A., G LAB" },
1798 { RTP_MIDI_MANU_LONG_BLACKSTAR_AMPLIFICATION_LTD, "Blackstar Amplification Ltd" },
1799 { RTP_MIDI_MANU_LONG_M3I_TECHNOLOGIES_GMBH, "M3i Technologies GmbH" },
1800 { RTP_MIDI_MANU_LONG_GEMALTO, "Gemalto" },
1801 { RTP_MIDI_MANU_LONG_PROSTAGE_SL, "Prostage SL" },
1802 { RTP_MIDI_MANU_LONG_TEENAGE_ENGINEERING, "Teenage Engineering" },
1803 { RTP_MIDI_MANU_LONG_TOBIAS_ERICHSEN, "Tobias Erichsen" },
1804 { RTP_MIDI_MANU_LONG_NIXER_LTD, "Nixer Ltd" },
1805 { RTP_MIDI_MANU_LONG_HANPIN_ELECTRON_CO_LTD, "Hanpin Electron Co Ltd" },
1806 { RTP_MIDI_MANU_LONG_MIDI_HARDWARE_R_SOWA, "MIDI-hardware R.Sowa" },
1807 { RTP_MIDI_MANU_LONG_BEYOND_MUSIC_INDUSTRIAL_LTD, "Beyond Music Industrial Ltd" },
1808 { RTP_MIDI_MANU_LONG_KISS_BOX_BV, "Kiss Box B.V." },
1809 { RTP_MIDI_MANU_LONG_MISA_DIGITAL_TECHNOLOGIES_LTD, "Misa Digital Technologies Ltd" },
1810 { RTP_MIDI_MANU_LONG_AI_MUSICS_TECHNOLOGY_INC, "AI Musics Technology Inc" },
1811 { RTP_MIDI_MANU_LONG_SERATO_INC_LP, "Serato Inc LP" },
1812 { RTP_MIDI_MANU_LONG_LIMEX_MUSIC_HANDLES_GMBH, "Limex Music Handles GmbH" },
1813 { RTP_MIDI_MANU_LONG_KYODDAY_TOKAI, "Kyodday/Tokai" },
1814 { RTP_MIDI_MANU_LONG_MUTABLE_INSTRUMENTS, "Mutable Instruments" },
1815 { RTP_MIDI_MANU_LONG_PRESONUS_SOFTWARE_LTD, "PreSonus Software Ltd" },
1816 { RTP_MIDI_MANU_LONG_XIRING, "Xiring" },
1817 { RTP_MIDI_MANU_LONG_FAIRLIGHT_INTRUMENTS_PTY_LTD, "Fairlight Instruments Pty Ltd" },
1818 { RTP_MIDI_MANU_LONG_MUSICOM_LAB, "Musicom Lab" },
1819 { RTP_MIDI_MANU_LONG_VACO_LOCO, "VacoLoco" },
1820 { RTP_MIDI_MANU_LONG_RWA_HONG_KONG_LIMITED, "RWA (Hong Kong) Limited" },
1823 /* Japanese Manufacturers */
1824 { RTP_MIDI_MANU_LONG_CRIMSON_TECHNOLOGY_INC, "Crimson Technology Inc" },
1825 { RTP_MIDI_MANU_LONG_SOFTBANK_MOBILE_CORP, "Softbank Mobile Corp" },
1826 { RTP_MIDI_MANU_LONG_DM_HOLDINGS_INC, "D&M Holdings Inc." },
1827 { 0, NULL }
1829 static value_string_ext rtp_midi_manu_long_values_ext = VALUE_STRING_EXT_INIT(rtp_midi_manu_long_values);
1831 static const value_string rtp_midi_channels[] = {
1832 { RTP_MIDI_CHANNEL_1, "Channel 1" },
1833 { RTP_MIDI_CHANNEL_2, "Channel 2" },
1834 { RTP_MIDI_CHANNEL_3, "Channel 3" },
1835 { RTP_MIDI_CHANNEL_4, "Channel 4" },
1836 { RTP_MIDI_CHANNEL_5, "Channel 5" },
1837 { RTP_MIDI_CHANNEL_6, "Channel 6" },
1838 { RTP_MIDI_CHANNEL_7, "Channel 7" },
1839 { RTP_MIDI_CHANNEL_8, "Channel 8" },
1840 { RTP_MIDI_CHANNEL_9, "Channel 9" },
1841 { RTP_MIDI_CHANNEL_10, "Channel 10" },
1842 { RTP_MIDI_CHANNEL_11, "Channel 11" },
1843 { RTP_MIDI_CHANNEL_12, "Channel 12" },
1844 { RTP_MIDI_CHANNEL_13, "Channel 13" },
1845 { RTP_MIDI_CHANNEL_14, "Channel 14" },
1846 { RTP_MIDI_CHANNEL_15, "Channel 15" },
1847 { RTP_MIDI_CHANNEL_16, "Channel 16" },
1848 { 0, NULL }
1853 static const char rtp_midi_channel_status_special_off[] = "Note Off*";
1854 static const char rtp_midi_common_status_sysex_segment_end[] = "End of Sysex-Segment";
1855 static const char rtp_midi_common_status_sysex_segment_start[] = "Start of Sysex-Segment";
1856 static const char rtp_midi_common_status_sysex_segment[] = "Middle Sysex-Segment";
1857 static const char rtp_midi_common_status_sysex_segment_complete[] = "Full Sysex-Command";
1858 static const char rtp_midi_common_status_sysex_cancel[] = "Sysex-Cancel";
1860 static const value_string rtp_midi_channel_status[] = {
1861 /* Channel */
1862 { RTP_MIDI_STATUS_CHANNEL_NOTE_OFF, "Note Off" },
1863 { RTP_MIDI_STATUS_CHANNEL_NOTE_ON, "Note On" },
1864 { RTP_MIDI_STATUS_CHANNEL_POLYPHONIC_KEY_PRESSURE, "Polyphonic Key Pressure" },
1865 { RTP_MIDI_STATUS_CHANNEL_CONTROL_CHANGE, "Control Change" },
1866 { RTP_MIDI_STATUS_CHANNEL_PROGRAM_CHANGE, "Program Change" },
1867 { RTP_MIDI_STATUS_CHANNEL_CHANNEL_PRESSURE, "Channel Pressure" },
1868 { RTP_MIDI_STATUS_CHANNEL_PITCH_BEND_CHANGE, "Pitch Bend Change" },
1869 { 0, NULL }
1872 static const value_string rtp_midi_common_status[] = {
1873 /* Common 0xf0 - 0xf7 */
1874 { RTP_MIDI_STATUS_COMMON_SYSEX_START, "SOX: Start Of System-Exclusive / End of System-Exclusive Segment" },
1875 { RTP_MIDI_STATUS_COMMON_MTC_QUARTER_FRAME, "MTC Quarter Frame" },
1876 { RTP_MIDI_STATUS_COMMON_SONG_POSITION_POINTER, "Song Position Pointer" },
1877 { RTP_MIDI_STATUS_COMMON_SONG_SELECT, "Song Select" },
1878 { RTP_MIDI_STATUS_COMMON_UNDEFINED_F4, "Systems Exclusive Cancel" }, /* not defined, special use in RTP-MIDI */
1879 { RTP_MIDI_STATUS_COMMON_UNDEFINED_F5, "Undefined 0xf5" }, /* not defined */
1880 { RTP_MIDI_STATUS_COMMON_TUNE_REQUEST, "Tune Request" },
1881 { RTP_MIDI_STATUS_COMMON_SYSEX_END, "EOX: Start of System-Exclusive Segment / End of System-Exclusive" },
1882 /* Realtime 0xf8 - 0xff */
1883 { RTP_MIDI_STATUS_COMMON_REALTIME_TIMING_CLOCK, "RT: Timing Clock" },
1884 { RTP_MIDI_STATUS_COMMON_REALTIME_MIDI_TICK, "RT: Midi Tick" }, /* undefined ??? */
1885 { RTP_MIDI_STATUS_COMMON_REALTIME_START, "RT: Start" },
1886 { RTP_MIDI_STATUS_COMMON_REALTIME_CONTINUE, "RT: Continue" },
1887 { RTP_MIDI_STATUS_COMMON_REALTIME_STOP, "RT: Stop" },
1888 { RTP_MIDI_STATUS_COMMON_REALTIME_UNDEFINED_FD, "RT: Undefined 0xfd" },
1889 { RTP_MIDI_STATUS_COMMON_REALTIME_ACTIVE_SENSING, "RT: Active sensing" },
1890 { RTP_MIDI_STATUS_COMMON_REALTIME_SYSTEM_RESET, "RT: Systems reset" },
1891 { 0, NULL }
1894 static const value_string rtp_midi_sysex_common_rt_mtc_cue[] = {
1895 { RTP_MIDI_SYSEX_COMMON_RT_MTC_CUE_SPECIAL, "Special" },
1896 { RTP_MIDI_SYSEX_COMMON_RT_MTC_CUE_PUNCH_IN_POINTS, "Punch In Points" },
1897 { RTP_MIDI_SYSEX_COMMON_RT_MTC_CUE_PUNCH_OUT_POINTS, "Punch Out Points" },
1898 { RTP_MIDI_SYSEX_COMMON_RT_MTC_CUE_RESERVED_03, "(Reserved 0x03)" },
1899 { RTP_MIDI_SYSEX_COMMON_RT_MTC_CUE_RESERVED_04, "(Reserved 0x04)" },
1900 { RTP_MIDI_SYSEX_COMMON_RT_MTC_CUE_EVENT_START_POINTS, "Event Start Points" },
1901 { RTP_MIDI_SYSEX_COMMON_RT_MTC_CUE_EVENT_STOP_POINTS, "Event Stop Points" },
1902 { RTP_MIDI_SYSEX_COMMON_RT_MTC_CUE_EVENT_START_POINTS_ADD, "Event Start Points with additional Info" },
1903 { RTP_MIDI_SYSEX_COMMON_RT_MTC_CUE_EVENT_STOP_POINTS_ADD, "Event Stop Points with additional Info" },
1904 { RTP_MIDI_SYSEX_COMMON_RT_MTC_CUE_RESERVED_09, "(Reserved 0x09)" },
1905 { RTP_MIDI_SYSEX_COMMON_RT_MTC_CUE_RESERVED_0A, "(Reserved 0x0a)" },
1906 { RTP_MIDI_SYSEX_COMMON_RT_MTC_CUE_CUE_POINTS, "Cue Points" },
1907 { RTP_MIDI_SYSEX_COMMON_RT_MTC_CUE_CUE_POINTS_ADD, "Cue Points with additional Info" },
1908 { RTP_MIDI_SYSEX_COMMON_RT_MTC_CUE_RESERVED_0D, "(Reserved 0x0d)" },
1909 { RTP_MIDI_SYSEX_COMMON_RT_MTC_CUE_EVENT_NAME_ADD, "Event Name in additional Info" },
1910 { 0, NULL }
1914 static const value_string rtp_midi_sysex_common_nrt_mtc[] = {
1915 { RTP_MIDI_SYSEX_COMMON_NRT_MTC_SPECIAL, "Special" },
1916 { RTP_MIDI_SYSEX_COMMON_NRT_MTC_PUNCH_IN_POINTS, "Punch In Points" },
1917 { RTP_MIDI_SYSEX_COMMON_NRT_MTC_PUNGH_OUT_POINTS, "Punch Out Points" },
1918 { RTP_MIDI_SYSEX_COMMON_NRT_MTC_DELETE_PUNCH_IN_POINTS, "Delete Punch In Points" },
1919 { RTP_MIDI_SYSEX_COMMON_NRT_MTC_DELETE_PUNCH_OUT_POINTS, "Delete Punch Out Points" },
1920 { RTP_MIDI_SYSEX_COMMON_NRT_MTC_EVENT_START_POINT, "Event Start Point" },
1921 { RTP_MIDI_SYSEX_COMMON_NRT_MTC_EVENT_STOP_POINT, "Event Stop Point" },
1922 { RTP_MIDI_SYSEX_COMMON_NRT_MTC_EVENT_START_POINT_ADD, "Event Start Point with additional Info" },
1923 { RTP_MIDI_SYSEX_COMMON_NRT_MTC_EVENT_STOP_POINT_ADD, "Event Stop Point with additional Info" },
1924 { RTP_MIDI_SYSEX_COMMON_NRT_MTC_DELETE_EVENT_START_POINT, "Delete Event Start Point" },
1925 { RTP_MIDI_SYSEX_COMMON_NRT_MTC_DELETE_EVENT_STOP_POINT, "Delete Event Stop Point" },
1926 { RTP_MIDI_SYSEX_COMMON_NRT_MTC_CUE_POINTS, "Cue Points" },
1927 { RTP_MIDI_SYSEX_COMMON_NRT_MTC_CUE_POINTS_ADD, "Cue Points with additional Info" },
1928 { RTP_MIDI_SYSEX_COMMON_NRT_MTC_DELETE_CUE_POINT, "Delete Cue Point" },
1929 { RTP_MIDI_SYSEX_COMMON_NRT_MTC_EVENT_NAME_IN_ADD, "Event Name in additional Info" },
1930 { 0, NULL }
1933 static const value_string rtp_midi_sysex_common_nrt_sd_ext[] = {
1934 { RTP_MIDI_SYSEX_COMMON_NRT_SD_EXT_LOOP_POINT_TRANSMISSION, "Loop Point Transmission" },
1935 { RTP_MIDI_SYSEX_COMMON_NRT_SD_EXT_LOOP_POINTS_REQUEST, "Loop Points Request" },
1936 { 0, NULL }
1939 static const value_string rtp_midi_sysex_common_nrt_sd_lt[] = {
1940 { RTP_MIDI_SYSEX_COMMON_NRT_SD_EXT_LP_UNI, "Forwards only (unidirectional)" },
1941 { RTP_MIDI_SYSEX_COMMON_NRT_SD_EXT_LP_BI, "Backwards/Forwards (bi-directional)" },
1942 { RTP_MIDI_SYSEX_COMMON_NRT_SD_EXT_LP_OFF, "Off" },
1943 { 0, NULL }
1946 static const value_string rtp_midi_sysex_common_nrt_gi[] = {
1947 { RTP_MIDI_SYSEX_COMMON_NRT_GI_IDENTITY_REQUEST, "Identity Request" },
1948 { RTP_MIDI_SYSEX_COMMON_NRT_GI_IDENTITY_REPLY, "Identity Reply" },
1949 { 0, NULL }
1952 static const value_string rtp_midi_sysex_common_nrt_fd[] = {
1953 { RTP_MIDI_SYSEX_COMMON_NRT_FD_HEADER, "Header" },
1954 { RTP_MIDI_SYSEX_COMMON_NRT_FD_DATA_PACKET, "Data Packet" },
1955 { RTP_MIDI_SYSEX_COMMON_NRT_FD_REQUEST, "Request" },
1956 { 0, NULL }
1959 static const value_string rtp_midi_sysex_common_tuning[] = {
1960 { RTP_MIDI_SYSEX_COMMON_TUNING_BULK_DUMP_REQUEST, "Bulk Dump Request" },
1961 { RTP_MIDI_SYSEX_COMMON_TUNING_BULK_DUMP_REPLY, "Bulk Dump Reply" },
1962 { RTP_MIDI_SYSEX_COMMON_TUNING_NOTE_CHANGE, "Note Change" },
1963 { 0, NULL }
1966 static const value_string rtp_midi_sysex_common_nrt_gm[] = {
1967 { RTP_MIDI_SYSEX_COMMON_NRT_GM_ON, "General MIDI System On" },
1968 { RTP_MIDI_SYSEX_COMMON_NRT_GM_OFF, "General MIDI System Off" },
1969 { 0, NULL }
1972 static const value_string rtp_midi_sysex_common_nrt_dls[] = {
1973 { RTP_MIDI_SYSEX_COMMON_NRT_DLS_LEVEL1_ON, "DLS Level 1 On" },
1974 { RTP_MIDI_SYSEX_COMMON_NRT_DLS_LEVEL1_OFF, "DLS Level 1 Off" },
1975 { RTP_MIDI_SYSEX_COMMON_NRT_DLS_LEVEL1_VOICE_ALLOCATION_OFF, "DLS Level 1 Voice Allocation Off" },
1976 { RTP_MIDI_SYSEX_COMMON_NRT_DLS_LEVEL1_VOICE_ALLOCATION_ON, "DLS Level 1 Voice Allocation On" },
1977 { 0, NULL }
1981 static const value_string rtp_midi_sysex_common_rt_mtc[] = {
1982 { RTP_MIDI_SYSEX_COMMON_RT_MTC_FULL_MESSAGE, "Full Message" },
1983 { RTP_MIDI_SYSEX_COMMON_RT_MTC_USER_BITS, "User Bits" },
1984 { 0, NULL }
1987 static const value_string rtp_midi_sysex_common_rt_show_control[] = {
1988 { RTP_MIDI_SYSEX_COMMON_RT_SCL_EXTENSIONS, "Extensions" },
1989 { RTP_MIDI_SYSEX_COMMON_RT_SC_LIGHTING, "Lighting (General Category)" },
1990 { RTP_MIDI_SYSEX_COMMON_RT_SC_MOVING_LIGHTS, "Moving Lights" },
1991 { RTP_MIDI_SYSEX_COMMON_RT_SC_COLOR_CHANGERS, "Color Changers" },
1992 { RTP_MIDI_SYSEX_COMMON_RT_SC_STROBES, "Strobes" },
1993 { RTP_MIDI_SYSEX_COMMON_RT_SCL_LASERS, "Lasers" },
1994 { RTP_MIDI_SYSEX_COMMON_RT_SCL_CHASERS, "Chasers" },
1995 { RTP_MIDI_SYSEX_COMMON_RT_SC_SOUND, "Sound (General Category)" },
1996 { RTP_MIDI_SYSEX_COMMON_RT_SC_MUSIC, "Music" },
1997 { RTP_MIDI_SYSEX_COMMON_RT_SC_CD_PLAYERS, "CD Players" },
1998 { RTP_MIDI_SYSEX_COMMON_RT_SC_EPROM_PLAYBACK, "EPROM Playback" },
1999 { RTP_MIDI_SYSEX_COMMON_RT_SCL_AUDIO_TAPE_MACHINE, "Audio Tape Machine" },
2000 { RTP_MIDI_SYSEX_COMMON_RT_SC_INTERCOMS, "Intercoms" },
2001 { RTP_MIDI_SYSEX_COMMON_RT_SC_AMPLIFIERS, "Amplifiers" },
2002 { RTP_MIDI_SYSEX_COMMON_RT_SC_AUDIO_EFFECTS, "Audio Effects Devices" },
2003 { RTP_MIDI_SYSEX_COMMON_RT_SC_EQUALIZERS, "Equalizers" },
2004 { RTP_MIDI_SYSEX_COMMON_RT_SC_MACHINERY, "Machinery (General Category" },
2005 { RTP_MIDI_SYSEX_COMMON_RT_SC_RIGGING, "Rigging" },
2006 { RTP_MIDI_SYSEX_COMMON_RT_SC_FLYS, "Flys" },
2007 { RTP_MIDI_SYSEX_COMMON_RT_SC_LIFTS, "Lifts" },
2008 { RTP_MIDI_SYSEX_COMMON_RT_SC_TURNTABLES, "Turntables" },
2009 { RTP_MIDI_SYSEX_COMMON_RT_SC_TRUSSES, "Trusses" },
2010 { RTP_MIDI_SYSEX_COMMON_RT_SC_ROBOTS, "Robots" },
2011 { RTP_MIDI_SYSEX_COMMON_RT_SC_ANIMATION, "Animation" },
2012 { RTP_MIDI_SYSEX_COMMON_RT_SC_FLOATS, "Floats" },
2013 { RTP_MIDI_SYSEX_COMMON_RT_SC_BREAKAWAYS, "Breakaways" },
2014 { RTP_MIDI_SYSEX_COMMON_RT_SC_BARGES, "Barges" },
2015 { RTP_MIDI_SYSEX_COMMON_RT_SC_VIDEO, "Video (General Category" },
2016 { RTP_MIDI_SYSEX_COMMON_RT_SC_VIDEO_TAPE_MACHINES, "Video Tape Machines" },
2017 { RTP_MIDI_SYSEX_COMMON_RT_SC_VIDEO_CASSETTE_MACHINES, "Video Cassette Machines" },
2018 { RTP_MIDI_SYSEX_COMMON_RT_SC_VIDEO_DISC_PLAYERS, "Video Disc Players" },
2019 { RTP_MIDI_SYSEX_COMMON_RT_SC_VIDEO_SWITCHERS, "Video Switchers" },
2020 { RTP_MIDI_SYSEX_COMMON_RT_SC_VIDEO_EFFECT, "Video Effects" },
2021 { RTP_MIDI_SYSEX_COMMON_RT_SC_VIDEO_CHARACTER_GENERATORS, "Video Character Generators" },
2022 { RTP_MIDI_SYSEX_COMMON_RT_SC_VIDEO_STIL_STORES, "Video Still Stores" },
2023 { RTP_MIDI_SYSEX_COMMON_RT_SC_VIDEO_MONITORS, "Video Monitors" },
2024 { RTP_MIDI_SYSEX_COMMON_RT_SC_PROJECTION, "Projections (General)" },
2025 { RTP_MIDI_SYSEX_COMMON_RT_SC_FILM_PROJECTORS, "Film Projectors" },
2026 { RTP_MIDI_SYSEX_COMMON_RT_SC_SLIDE_PROJECTORS, "Slide Projectors" },
2027 { RTP_MIDI_SYSEX_COMMON_RT_SC_VIDEO_PROJECTORS, "Video Projectors" },
2028 { RTP_MIDI_SYSEX_COMMON_RT_SC_DISSOLVERS, "Dissolvers" },
2029 { RTP_MIDI_SYSEX_COMMON_RT_SC_SHUTTER_CONTROLS, "Shutter Controls" },
2030 { RTP_MIDI_SYSEX_COMMON_RT_SC_PROCESS_CONTROL, "Process Control (General)" },
2031 { RTP_MIDI_SYSEX_COMMON_RT_SC_HYDRAULIC_OIL, "Hydraulic Oil" },
2032 { RTP_MIDI_SYSEX_COMMON_RT_SC_H2O, "H2O" },
2033 { RTP_MIDI_SYSEX_COMMON_RT_SC_CO2, "CO2" },
2034 { RTP_MIDI_SYSEX_COMMON_RT_SC_COMPRESSED_AIR, "Compressed Air" },
2035 { RTP_MIDI_SYSEX_COMMON_RT_SC_NATURAL_GAS, "Natural Gas" },
2036 { RTP_MIDI_SYSEX_COMMON_RT_SC_FOG, "Fog" },
2037 { RTP_MIDI_SYSEX_COMMON_RT_SC_SMOKE, "Smoke" },
2038 { RTP_MIDI_SYSEX_COMMON_RT_SC_CRACKED_HAZE, "Cracked Haze" },
2039 { RTP_MIDI_SYSEX_COMMON_RT_SC_PYRO, "Pyro (General Category)" },
2040 { RTP_MIDI_SYSEX_COMMON_RT_SC_FIREWORKS, "Fireworks" },
2041 { RTP_MIDI_SYSEX_COMMON_RT_SC_EXPLOSIONS, "Explosions" },
2042 { RTP_MIDI_SYSEX_COMMON_RT_SC_FLAME, "Flame" },
2043 { RTP_MIDI_SYSEX_COMMON_RT_SC_SMOKE_POTS, "Smoke Pots" },
2044 { RTP_MIDI_SYSEX_COMMON_RT_SC_ALL_TYPES, "All Types" },
2045 { 0, NULL }
2047 static value_string_ext rtp_midi_sysex_common_rt_show_control_ext =
2048 VALUE_STRING_EXT_INIT(rtp_midi_sysex_common_rt_show_control);
2050 static const value_string rtp_midi_sysex_common_rt_notations[] = {
2051 { RTP_MIDI_SYSEX_COMMON_RT_NT_BAR_NUMBER, "Bar Number" },
2052 { RTP_MIDI_SYSEX_COMMON_RT_NT_TIME_SIGNATURE_IMMEDIATE, "Time Signature (Immediate)" },
2053 { RTP_MIDI_SYSEX_COMMON_RT_NT_TIME_SIGNATURE_DELAYED, "Time Signature (Delayed)" },
2054 { 0, NULL }
2057 static const value_string rtp_midi_sysex_common_rt_device_control[] = {
2058 { RTP_MIDI_SYSEX_COMMON_RT_DC_MASTER_VOLUME, "Master Volume" },
2059 { RTP_MIDI_SYSEX_COMMON_RT_DC_MASTER_BALANCE, "Master Balance" },
2060 { 0, NULL }
2064 /* TODO: Add MMC Commands */
2065 static const value_string rtp_midi_sysex_common_rt_mmc_commands[] = {
2066 { 0, NULL }
2069 /* TODO: Add MMC Responses */
2070 static const value_string rtp_midi_sysex_common_rt_mmc_responses[] = {
2071 { 0, NULL }
2076 static const value_string rtp_midi_sysex_common_nrt[] = {
2077 { RTP_MIDI_SYSEX_COMMON_NRT_SAMPLE_DUMP_HEADER, "Common NRT: Sample Dump Header" },
2078 { RTP_MIDI_SYSEX_COMMON_NRT_SAMPLE_DATA_PACKET, "Common NRT: Sample Data Packet" },
2079 { RTP_MIDI_SYSEX_COMMON_NRT_SAMPLE_DUMP_REQUEST, "Common NRT: Sample Dump Request" },
2080 { RTP_MIDI_SYSEX_COMMON_NRT_MTC, "Common NRT: MIDI Time Code (MTC)" },
2081 { RTP_MIDI_SYSEX_COMMON_NRT_SAMPLE_DUMP_EXTENSIONS, "Common NRT: Sample Dump Extensions" },
2082 { RTP_MIDI_SYSEX_COMMON_NRT_GENERAL_INFORMATION, "Common NRT: General Information" },
2083 { RTP_MIDI_SYSEX_COMMON_NRT_FILE_DUMP, "Common NRT: File Dump" },
2084 { RTP_MIDI_SYSEX_COMMON_NRT_MIDI_TUNING_STANDARD, "Common NRT: Midi Tuning Standard" },
2085 { RTP_MIDI_SYSEX_COMMON_NRT_GENERAL_MIDI, "Common NRT: General MIDI (GM)" },
2086 { RTP_MIDI_SYSEX_COMMON_NRT_DOWNLOADABLE_SOUNDS, "Common NRT: Downloadable Sounds (DLS)" },
2087 { RTP_MIDI_SYSEX_COMMON_NRT_END_OF_FILE, "Common NRT: End Of File" },
2088 { RTP_MIDI_SYSEX_COMMON_NRT_WAIT, "Common NRT: Wait" },
2089 { RTP_MIDI_SYSEX_COMMON_NRT_CANCEL, "Common NRT: Cancel" },
2090 { RTP_MIDI_SYSEX_COMMON_NRT_NAK, "Common NRT: NAK" },
2091 { RTP_MIDI_SYSEX_COMMON_NRT_ACK, "Common NRT: ACK" },
2092 { 0, NULL }
2096 static const value_string rtp_midi_sysex_common_rt[] = {
2097 { RTP_MIDI_SYSEX_COMMON_RT_MIDI_TIME_CODE, "Common RT: MIDI Time Code (MTC)" },
2098 { RTP_MIDI_SYSEX_COMMON_RT_MIDI_SHOW_CONTROL, "Common RT: MIDI Show Control" },
2099 { RTP_MIDI_SYSEX_COMMON_RT_NOTATION_INFORMATION, "Common RT: Notation Information" },
2100 { RTP_MIDI_SYSEX_COMMON_RT_DEVICE_CONTROL, "Common RT: Device Control" },
2101 { RTP_MIDI_SYSEX_COMMON_RT_MTC_CUEING, "Common RT: Real Time MTC Cueing" },
2102 { RTP_MIDI_SYSEX_COMMON_RT_MIDI_MACHINE_CONTROL_COMMAND, "Common RT: MIDI Machine Control Command" },
2103 { RTP_MIDI_SYSEX_COMMON_RT_MIDI_MACHINE_CONTROL_RESPONSE, "Common RT: MIDI Machine Control Response" },
2104 { RTP_MIDI_SYSEX_COMMON_RT_MIDI_TUNING_STANDARD, "Common RT: MIDI Tuning Standard" },
2105 { 0, NULL }
2110 static const value_string rtp_midi_js_tot_channels[] = {
2111 { 0, "1 channel" },
2112 { 1, "2 channels" },
2113 { 2, "3 channels" },
2114 { 3, "4 channels" },
2115 { 4, "5 channels" },
2116 { 5, "6 channels" },
2117 { 6, "7 channels" },
2118 { 7, "8 channels" },
2119 { 8, "9 channels" },
2120 { 9, "10 channels" },
2121 { 10, "11 channels" },
2122 { 11, "12 channels" },
2123 { 12, "13 channels" },
2124 { 13, "14 channels" },
2125 { 14, "15 channels" },
2126 { 15, "16 channels" },
2127 { 0, NULL }
2130 static const value_string rtp_midi_qft_values[] = {
2131 { RTP_MIDI_COMMON_MTC_QF_FRAME_LS_NIBBLE, "Frame count LS nibble" },
2132 { RTP_MIDI_COMMON_MTC_QF_FRAME_MS_NIBBLE, "Frame count MS nibble" },
2133 { RTP_MIDI_COMMON_MTC_QF_SECONDS_LS_NIBBLE, "Seconds count LS nibble" },
2134 { RTP_MIDI_COMMON_MTC_QF_SECONDS_MS_NIBBLE, "Seconds count MS nibble" },
2135 { RTP_MIDI_COMMON_MTC_QF_MINUTES_LS_NIBBLE, "Minutes count LS nibble" },
2136 { RTP_MIDI_COMMON_MTC_QF_MINUTES_MS_NIBBLE, "Minutes count MS nibble" },
2137 { RTP_MIDI_COMMON_MTC_QF_HOURS_LS_NIBBLE, "Hours count LS nibble" },
2138 { RTP_MIDI_COMMON_MTC_QF_HOURS_MS_NIBBLE, "Hours count MS nibble" },
2139 { 0, NULL }
2142 static const value_string rtp_midi_sj_chapter_d_syscom_dsz_values[] = {
2143 { 0, "Command has 0 octets" },
2144 { 1, "Command has 1 octet" },
2145 { 2, "Command has 2 octets" },
2146 { 3, "Command has 3 or more octets" },
2147 { 0, NULL }
2150 static const value_string rtp_midi_mtc_fm_type_values[] = {
2151 { 0, "24 Frames/Second" },
2152 { 1, "25 Frames/Second" },
2153 { 2, "30 Frames/Second (drop frame)" },
2154 { 3, "30 Frames/Second (non-drop frame)" },
2155 { 0, NULL }
2158 static const true_false_string rtp_midi_cs_flag_b= {
2159 "Long Header: 2 octets",
2160 "Short Header: 1 octet"
2163 static const true_false_string rtp_midi_cs_flag_j= {
2164 "Journal present",
2165 "No Journal present"
2168 static const true_false_string rtp_midi_cs_flag_z= {
2169 "Delta-Time present for first MIDI-command",
2170 "No Delta-Time for first MIDI-command"
2173 static const true_false_string rtp_midi_cs_flag_p= {
2174 "Status byte was NOT present in original MIDI-command",
2175 "Status byte was present in original MIDI-command"
2178 static const true_false_string rtp_midi_js_flag_y = {
2179 "System-journal present",
2180 "System-journal NOT present"
2183 static const true_false_string rtp_midi_js_flag_s = {
2184 "Standard journal behaviour",
2185 "Journal encodes data in preceding RTP-packet"
2188 static const true_false_string rtp_midi_js_flag_a = {
2189 "Channel-journal present",
2190 "Channel-journal NOT present"
2193 static const true_false_string rtp_midi_js_flag_h = {
2194 "Enhanced Encoding",
2195 "Standard Encoding"
2198 static const true_false_string rtp_midi_sj_flag_d = {
2199 "Chapter D journal present",
2200 "Chapter D journal NOT present"
2203 static const true_false_string rtp_midi_sj_flag_v = {
2204 "Chapter V journal present",
2205 "Chapter V journal NOT present"
2208 static const true_false_string rtp_midi_sj_flag_q = {
2209 "Chapter Q journal present",
2210 "Chapter Q journal NOT present"
2213 static const true_false_string rtp_midi_sj_flag_f = {
2214 "Chapter F journal present",
2215 "Chapter F journal NOT present"
2218 static const true_false_string rtp_midi_sj_flag_x = {
2219 "Chapter X journal present",
2220 "Chapter X journal NOT present"
2223 static const true_false_string rtp_midi_cj_flag_p = {
2224 "Chapter P journal present",
2225 "Chapter P journal NOT present"
2228 static const true_false_string rtp_midi_cj_flag_c = {
2229 "Chapter C journal present",
2230 "Chapter C journal NOT present"
2233 static const true_false_string rtp_midi_cj_flag_m = {
2234 "Chapter M journal present",
2235 "Chapter M journal NOT present"
2238 static const true_false_string rtp_midi_cj_flag_w = {
2239 "Chapter W journal present",
2240 "Chapter W journal NOT present"
2243 static const true_false_string rtp_midi_cj_flag_n = {
2244 "Chapter N journal present",
2245 "Chapter N journal NOT present"
2248 static const true_false_string rtp_midi_cj_flag_e = {
2249 "Chapter E journal present",
2250 "Chapter E journal NOT present"
2253 static const true_false_string rtp_midi_cj_flag_t = {
2254 "Chapter T journal present",
2255 "Chapter T journal NOT present"
2258 static const true_false_string rtp_midi_cj_flag_a = {
2259 "Chapter A journal present",
2260 "Chapter A journal NOT present"
2263 static const true_false_string rtp_midi_cj_chapter_c_flag_a = {
2264 "Alternative Coding",
2265 "Value Coding"
2268 static const true_false_string rtp_midi_cj_chapter_m_flag_p = {
2269 "Pending field is encoded",
2270 "Pending field is NOT encoded"
2273 static const true_false_string rtp_midi_cj_chapter_m_flag_e = {
2274 "Initiated transaction is in progress",
2275 "NO transaction in progress"
2278 static const true_false_string rtp_midi_cj_chapter_m_flag_u = {
2279 "All parameters are RPNs",
2280 "Parameters may include NRPNs"
2283 static const true_false_string rtp_midi_cj_chapter_m_flag_w = {
2284 "All parameters are NRPNs",
2285 "Parameters may include RPNs"
2288 static const true_false_string rtp_midi_cj_chapter_m_flag_z = {
2289 "Only LSB parameters",
2290 "Parameters may have LSB & MSB"
2293 static const true_false_string rtp_midi_cj_chapter_m_flag_q = {
2294 "Pending encodes NRPN MSB",
2295 "Pending encodes RPN MSB"
2298 static const true_false_string rtp_midi_cj_chapter_m_log_flag_q = {
2299 "NRPN parameter encoded",
2300 "RPN parameter encoded"
2303 static const true_false_string rtp_midi_cj_chapter_m_log_flag_j = {
2304 "ENTRY-MSB field present",
2305 "ENTRY-MSB field NOT present"
2308 static const true_false_string rtp_midi_cj_chapter_m_log_flag_k = {
2309 "ENTRY-LSB field present",
2310 "ENTRY-LSB field NOT present"
2313 static const true_false_string rtp_midi_cj_chapter_m_log_flag_l = {
2314 "A-Button field present",
2315 "A-Button field NOT present"
2318 static const true_false_string rtp_midi_cj_chapter_m_log_flag_m = {
2319 "C-Button field present",
2320 "C-Button field NOT present"
2323 static const true_false_string rtp_midi_cj_chapter_m_log_flag_n = {
2324 "Count field present",
2325 "Count field NOT present"
2328 static const true_false_string rtp_midi_cj_chapter_m_log_flag_t = {
2329 "Count Tool used",
2330 "Count Tool NOT used"
2333 static const true_false_string rtp_midi_cj_chapter_m_log_flag_v = {
2334 "Value Tool used",
2335 "Value Tool NOT used"
2338 static const true_false_string rtp_midi_cj_chapter_m_log_flag_r = {
2339 "Reserved-Flag set",
2340 "Reserved-Flag NOT set"
2343 static const true_false_string rtp_midi_cj_chapter_m_log_flag_x = {
2344 "Precedes most recent Control Change command for ctrl=121",
2345 "Does not precede most recent Control Change command for ctrl=121"
2348 static const true_false_string rtp_midi_cj_chapter_m_log_flag_g = {
2349 "negative value",
2350 "positive value"
2353 static const true_false_string rtp_midi_cj_chapter_n_log_flag_y = {
2354 "Execute Note-On",
2355 "Skip Note-On"
2358 static const true_false_string rtp_midi_cj_chapter_e_log_flag_v = {
2359 "Encodes Note-Off velocity",
2360 "Encodes Note-On/Off count"
2363 static const true_false_string rtp_midi_cj_chapter_a_log_flag_x = {
2364 "Precedes most recent Control Change command for ctrl=123-127",
2365 "Does not precede most recent Control Change command for ctrl=123-127"
2368 static const true_false_string rtp_midi_cj_chapter_p_log_flag_x = {
2369 "Reset all controllers received between MSB and LSB",
2370 "NO Reset all controllers received between MSB and LSB"
2373 static const true_false_string rtp_midi_sj_chapter_d_flag_b = {
2374 "Reset field present",
2375 "Reset field NOT present"
2378 static const true_false_string rtp_midi_sj_chapter_d_flag_g = {
2379 "Tune request field present",
2380 "Tune request field NOT present"
2383 static const true_false_string rtp_midi_sj_chapter_d_flag_h = {
2384 "Song select field present",
2385 "Song select field NOT present"
2388 static const true_false_string rtp_midi_sj_chapter_d_flag_j = {
2389 "Undefined system common 0xF4 field present",
2390 "Undefined system common 0xF4 field NOT present"
2393 static const true_false_string rtp_midi_sj_chapter_d_flag_k = {
2394 "Undefined system common 0xF5 field present",
2395 "Undefined system common 0xF5 field NOT present"
2398 static const true_false_string rtp_midi_sj_chapter_d_flag_y = {
2399 "Undefined system common 0xF9 field present",
2400 "Undefined system common 0xF9 field NOT present"
2403 static const true_false_string rtp_midi_sj_chapter_d_flag_z = {
2404 "Undefined system common 0xFD field present",
2405 "Undefined system common 0xFD field NOT present"
2408 static const true_false_string rtp_midi_sj_chapter_d_syscom_flag_c = {
2409 "Count field present",
2410 "Count field NOT present"
2413 static const true_false_string rtp_midi_sj_chapter_d_syscom_flag_v = {
2414 "Value field present",
2415 "Value field NOT present"
2418 static const true_false_string rtp_midi_sj_chapter_d_syscom_flag_l = {
2419 "Legal field present",
2420 "Legal field NOT present"
2423 static const true_false_string rtp_midi_sj_chapter_q_flag_n = {
2424 "Active Start / Continue",
2425 "NO active Start / Stop Continue"
2428 static const true_false_string rtp_midi_sj_chapter_q_flag_d = {
2429 "Song position already reached",
2430 "Song position yet to be reached"
2433 static const true_false_string rtp_midi_sj_chapter_q_flag_c = {
2434 "Clock field present",
2435 "Clock field NOT present"
2438 static const true_false_string rtp_midi_sj_chapter_q_flag_t = {
2439 "Timetools field present",
2440 "Timetools field NOT present"
2443 static const true_false_string rtp_midi_sj_chapter_f_flag_c = {
2444 "Complete field present",
2445 "Complete field NOT present"
2448 static const true_false_string rtp_midi_sj_chapter_f_flag_p = {
2449 "Partial field present",
2450 "Partial field NOT present"
2453 static const true_false_string rtp_midi_sj_chapter_f_flag_q = {
2454 "Complete field contains quarter frames",
2455 "Complete field contains full frame format"
2458 static const true_false_string rtp_midi_sj_chapter_f_flag_d = {
2459 "Tape head is moving reverse",
2460 "Tape head is moving forward or undefined"
2463 static const true_false_string rtp_midi_sj_chapter_x_flag_t = {
2464 "TCOUNT field present",
2465 "TCOUNT field NOT present"
2468 static const true_false_string rtp_midi_sj_chapter_x_flag_c = {
2469 "COUNT field present",
2470 "COUNT field NOT present"
2473 static const true_false_string rtp_midi_sj_chapter_x_flag_f = {
2474 "FIRST field present",
2475 "FIRST field NOT present"
2478 static const true_false_string rtp_midi_sj_chapter_x_flag_d = {
2479 "DATA field present",
2480 "DATA field not present"
2483 static const true_false_string rtp_midi_sj_chapter_x_flag_l = {
2484 "List Tool used",
2485 "Recency Tool used"
2490 static int hf_rtp_midi_bflag;
2491 static int hf_rtp_midi_jflag;
2492 static int hf_rtp_midi_zflag;
2493 static int hf_rtp_midi_pflag;
2494 static int hf_rtp_midi_shortlen;
2495 static int hf_rtp_midi_longlen;
2497 static int hf_rtp_midi_sflag;
2498 static int hf_rtp_midi_yflag;
2499 static int hf_rtp_midi_aflag;
2500 static int hf_rtp_midi_hflag;
2501 static int hf_rtp_midi_totchan;
2502 static int hf_rtp_midi_check_seq_num;
2504 static int hf_rtp_midi_deltatime1;
2505 static int hf_rtp_midi_deltatime2;
2506 static int hf_rtp_midi_deltatime3;
2507 static int hf_rtp_midi_deltatime4;
2509 static int hf_rtp_midi_channel_status;
2510 static int hf_rtp_midi_common_status;
2511 static int hf_rtp_midi_channel;
2512 static int hf_rtp_midi_note;
2513 static int hf_rtp_midi_velocity;
2514 static int hf_rtp_midi_pressure;
2515 static int hf_rtp_midi_controller;
2516 static int hf_rtp_midi_controller_value;
2517 static int hf_rtp_midi_program;
2518 static int hf_rtp_midi_channel_pressure;
2519 static int hf_rtp_midi_pitch_bend;
2520 /* static int hf_rtp_midi_pitch_bend_truncated; */
2522 static int hf_rtp_midi_manu_short;
2523 static int hf_rtp_midi_manu_long;
2525 static int hf_rtp_midi_sysjour_toc_s;
2526 static int hf_rtp_midi_sysjour_toc_d;
2527 static int hf_rtp_midi_sysjour_toc_v;
2528 static int hf_rtp_midi_sysjour_toc_q;
2529 static int hf_rtp_midi_sysjour_toc_f;
2530 static int hf_rtp_midi_sysjour_toc_x;
2531 static int hf_rtp_midi_sysjour_len;
2533 static int hf_rtp_midi_chanjour_sflag;
2534 static int hf_rtp_midi_chanjour_chan;
2535 static int hf_rtp_midi_chanjour_hflag;
2536 static int hf_rtp_midi_chanjour_len;
2537 static int hf_rtp_midi_chanjour_toc_p;
2538 static int hf_rtp_midi_chanjour_toc_c;
2539 static int hf_rtp_midi_chanjour_toc_m;
2540 static int hf_rtp_midi_chanjour_toc_w;
2541 static int hf_rtp_midi_chanjour_toc_n;
2542 static int hf_rtp_midi_chanjour_toc_e;
2543 static int hf_rtp_midi_chanjour_toc_t;
2544 static int hf_rtp_midi_chanjour_toc_a;
2546 static int hf_rtp_midi_cj_chapter_p_sflag;
2547 static int hf_rtp_midi_cj_chapter_p_program;
2548 static int hf_rtp_midi_cj_chapter_p_bflag;
2549 static int hf_rtp_midi_cj_chapter_p_bank_msb;
2550 static int hf_rtp_midi_cj_chapter_p_xflag;
2551 static int hf_rtp_midi_cj_chapter_p_bank_lsb;
2553 static int hf_rtp_midi_cj_chapter_c_sflag;
2554 static int hf_rtp_midi_cj_chapter_c_length;
2555 static int hf_rtp_midi_cj_chapter_c_number;
2556 static int hf_rtp_midi_cj_chapter_c_aflag;
2557 static int hf_rtp_midi_cj_chapter_c_value;
2558 static int hf_rtp_midi_cj_chapter_c_tflag;
2559 static int hf_rtp_midi_cj_chapter_c_alt;
2561 static int hf_rtp_midi_cj_chapter_m_sflag;
2562 static int hf_rtp_midi_cj_chapter_m_pflag;
2563 static int hf_rtp_midi_cj_chapter_m_eflag;
2564 static int hf_rtp_midi_cj_chapter_m_uflag;
2565 static int hf_rtp_midi_cj_chapter_m_wflag;
2566 static int hf_rtp_midi_cj_chapter_m_zflag;
2567 static int hf_rtp_midi_cj_chapter_m_length;
2568 static int hf_rtp_midi_cj_chapter_m_qflag;
2569 static int hf_rtp_midi_cj_chapter_m_pending;
2570 static int hf_rtp_midi_cj_chapter_m_log_sflag;
2571 static int hf_rtp_midi_cj_chapter_m_log_pnum_lsb;
2572 static int hf_rtp_midi_cj_chapter_m_log_qflag;
2573 static int hf_rtp_midi_cj_chapter_m_log_pnum_msb;
2574 static int hf_rtp_midi_cj_chapter_m_log_jflag;
2575 static int hf_rtp_midi_cj_chapter_m_log_kflag;
2576 static int hf_rtp_midi_cj_chapter_m_log_lflag;
2577 static int hf_rtp_midi_cj_chapter_m_log_mflag;
2578 static int hf_rtp_midi_cj_chapter_m_log_nflag;
2579 static int hf_rtp_midi_cj_chapter_m_log_tflag;
2580 static int hf_rtp_midi_cj_chapter_m_log_vflag;
2581 static int hf_rtp_midi_cj_chapter_m_log_rflag;
2582 static int hf_rtp_midi_cj_chapter_m_log_msb;
2583 static int hf_rtp_midi_cj_chapter_m_log_msb_x;
2584 static int hf_rtp_midi_cj_chapter_m_log_msb_entry;
2585 static int hf_rtp_midi_cj_chapter_m_log_lsb;
2586 static int hf_rtp_midi_cj_chapter_m_log_lsb_x;
2587 static int hf_rtp_midi_cj_chapter_m_log_lsb_entry;
2588 static int hf_rtp_midi_cj_chapter_m_log_a_button_g;
2589 static int hf_rtp_midi_cj_chapter_m_log_a_button_x;
2590 static int hf_rtp_midi_cj_chapter_m_log_a_button;
2591 static int hf_rtp_midi_cj_chapter_m_log_a_button_full;
2592 static int hf_rtp_midi_cj_chapter_m_log_c_button;
2593 static int hf_rtp_midi_cj_chapter_m_log_c_button_g;
2594 static int hf_rtp_midi_cj_chapter_m_log_c_button_r;
2595 static int hf_rtp_midi_cj_chapter_m_log_c_button_full;
2596 static int hf_rtp_midi_cj_chapter_m_log_count;
2597 static int hf_rtp_midi_cj_chapter_m_log_count_x;
2598 static int hf_rtp_midi_cj_chapter_m_log_count_full;
2600 static int hf_rtp_midi_cj_chapter_w_sflag;
2601 static int hf_rtp_midi_cj_chapter_w_first;
2602 static int hf_rtp_midi_cj_chapter_w_rflag;
2603 static int hf_rtp_midi_cj_chapter_w_second;
2605 static int hf_rtp_midi_cj_chapter_n_bflag;
2606 static int hf_rtp_midi_cj_chapter_n_len;
2607 static int hf_rtp_midi_cj_chapter_n_low;
2608 static int hf_rtp_midi_cj_chapter_n_high;
2609 static int hf_rtp_midi_cj_chapter_n_log_sflag;
2610 static int hf_rtp_midi_cj_chapter_n_log_notenum;
2611 static int hf_rtp_midi_cj_chapter_n_log_yflag;
2612 static int hf_rtp_midi_cj_chapter_n_log_velocity;
2613 static int hf_rtp_midi_cj_chapter_n_log_octet;
2615 static int hf_rtp_midi_cj_chapter_e_sflag;
2616 static int hf_rtp_midi_cj_chapter_e_len;
2617 static int hf_rtp_midi_cj_chapter_e_log_sflag;
2618 static int hf_rtp_midi_cj_chapter_e_log_notenum;
2619 static int hf_rtp_midi_cj_chapter_e_log_vflag;
2620 static int hf_rtp_midi_cj_chapter_e_log_velocity;
2621 static int hf_rtp_midi_cj_chapter_e_log_count;
2623 static int hf_rtp_midi_cj_chapter_t_channel_aftertouch;
2624 static int hf_rtp_midi_cj_chapter_t_sflag;
2625 static int hf_rtp_midi_cj_chapter_t_pressure;
2627 static int hf_rtp_midi_cj_chapter_a_sflag;
2628 static int hf_rtp_midi_cj_chapter_a_len;
2629 static int hf_rtp_midi_cj_chapter_a_log_sflag;
2630 static int hf_rtp_midi_cj_chapter_a_log_notenum;
2631 static int hf_rtp_midi_cj_chapter_a_log_xflag;
2632 static int hf_rtp_midi_cj_chapter_a_log_pressure;
2634 static int hf_rtp_midi_sj_chapter_v;
2635 static int hf_rtp_midi_sj_chapter_v_sflag;
2636 static int hf_rtp_midi_sj_chapter_v_count;
2638 static int hf_rtp_midi_sj_chapter_d_simple_system_commands;
2639 static int hf_rtp_midi_sj_chapter_d_sflag;
2640 static int hf_rtp_midi_sj_chapter_d_bflag;
2641 static int hf_rtp_midi_sj_chapter_d_gflag;
2642 static int hf_rtp_midi_sj_chapter_d_hflag;
2643 static int hf_rtp_midi_sj_chapter_d_jflag;
2644 static int hf_rtp_midi_sj_chapter_d_kflag;
2645 static int hf_rtp_midi_sj_chapter_d_yflag;
2646 static int hf_rtp_midi_sj_chapter_d_zflag;
2648 static int hf_rtp_midi_sj_chapter_d_reset;
2649 static int hf_rtp_midi_sj_chapter_d_reset_sflag;
2650 static int hf_rtp_midi_sj_chapter_d_reset_count;
2651 static int hf_rtp_midi_sj_chapter_d_tune;
2652 static int hf_rtp_midi_sj_chapter_d_tune_sflag;
2653 static int hf_rtp_midi_sj_chapter_d_tune_count;
2654 static int hf_rtp_midi_sj_chapter_d_song_sel;
2655 static int hf_rtp_midi_sj_chapter_d_song_sel_sflag;
2656 static int hf_rtp_midi_sj_chapter_d_song_sel_value;
2658 static int hf_rtp_midi_sj_chapter_d_syscom_sflag;
2659 static int hf_rtp_midi_sj_chapter_d_syscom_cflag;
2660 static int hf_rtp_midi_sj_chapter_d_syscom_vflag;
2661 static int hf_rtp_midi_sj_chapter_d_syscom_lflag;
2662 static int hf_rtp_midi_sj_chapter_d_syscom_dsz;
2663 static int hf_rtp_midi_sj_chapter_d_syscom_length;
2664 static int hf_rtp_midi_sj_chapter_d_syscom_count;
2665 static int hf_rtp_midi_sj_chapter_d_syscom_value;
2666 static int hf_rtp_midi_sj_chapter_d_syscom_legal;
2667 static int hf_rtp_midi_sj_chapter_d_syscom_data;
2669 static int hf_rtp_midi_sj_chapter_d_sysreal_sflag;
2670 static int hf_rtp_midi_sj_chapter_d_sysreal_cflag;
2671 static int hf_rtp_midi_sj_chapter_d_sysreal_lflag;
2672 static int hf_rtp_midi_sj_chapter_d_sysreal_length;
2673 static int hf_rtp_midi_sj_chapter_d_sysreal_count;
2674 static int hf_rtp_midi_sj_chapter_d_sysreal_legal;
2675 static int hf_rtp_midi_sj_chapter_d_sysreal_data;
2677 static int hf_rtp_midi_sj_chapter_q_sflag;
2678 static int hf_rtp_midi_sj_chapter_q_nflag;
2679 static int hf_rtp_midi_sj_chapter_q_dflag;
2680 static int hf_rtp_midi_sj_chapter_q_cflag;
2681 static int hf_rtp_midi_sj_chapter_q_tflag;
2682 static int hf_rtp_midi_sj_chapter_q_top;
2683 static int hf_rtp_midi_sj_chapter_q_clock;
2684 static int hf_rtp_midi_sj_chapter_q_timetools;
2686 static int hf_rtp_midi_sj_chapter_f_sflag;
2687 static int hf_rtp_midi_sj_chapter_f_cflag;
2688 static int hf_rtp_midi_sj_chapter_f_pflag;
2689 static int hf_rtp_midi_sj_chapter_f_qflag;
2690 static int hf_rtp_midi_sj_chapter_f_dflag;
2691 static int hf_rtp_midi_sj_chapter_f_point;
2692 static int hf_rtp_midi_sj_chapter_f_complete;
2693 static int hf_rtp_midi_sj_chapter_f_partial;
2694 static int hf_rtp_midi_sj_chapter_f_mt0;
2695 static int hf_rtp_midi_sj_chapter_f_mt1;
2696 static int hf_rtp_midi_sj_chapter_f_mt2;
2697 static int hf_rtp_midi_sj_chapter_f_mt3;
2698 static int hf_rtp_midi_sj_chapter_f_mt4;
2699 static int hf_rtp_midi_sj_chapter_f_mt5;
2700 static int hf_rtp_midi_sj_chapter_f_mt6;
2701 static int hf_rtp_midi_sj_chapter_f_mt7;
2702 static int hf_rtp_midi_sj_chapter_f_hr;
2703 static int hf_rtp_midi_sj_chapter_f_mn;
2704 static int hf_rtp_midi_sj_chapter_f_sc;
2705 static int hf_rtp_midi_sj_chapter_f_fr;
2707 static int hf_rtp_midi_sj_chapter_x_sflag;
2708 static int hf_rtp_midi_sj_chapter_x_tflag;
2709 static int hf_rtp_midi_sj_chapter_x_cflag;
2710 static int hf_rtp_midi_sj_chapter_x_fflag;
2711 static int hf_rtp_midi_sj_chapter_x_dflag;
2712 static int hf_rtp_midi_sj_chapter_x_lflag;
2713 static int hf_rtp_midi_sj_chapter_x_sta;
2714 static int hf_rtp_midi_sj_chapter_x_tcount;
2715 static int hf_rtp_midi_sj_chapter_x_count;
2716 static int hf_rtp_midi_sj_chapter_x_first1;
2717 static int hf_rtp_midi_sj_chapter_x_first2;
2718 static int hf_rtp_midi_sj_chapter_x_first3;
2719 static int hf_rtp_midi_sj_chapter_x_first4;
2720 static int hf_rtp_midi_sj_chapter_x_data;
2721 static int hf_rtp_midi_sj_chapter_x_invalid_data;
2723 static int hf_rtp_midi_quarter_frame_type;
2724 static int hf_rtp_midi_quarter_frame_value;
2725 /* static int hf_rtp_midi_spp_truncated; */
2726 static int hf_rtp_midi_spp;
2727 static int hf_rtp_midi_song_select;
2728 static int hf_rtp_midi_manu_data;
2729 static int hf_rtp_midi_edu_data;
2730 static int hf_rtp_midi_unknown_data;
2731 static int hf_rtp_midi_sysex_common_non_realtime;
2732 static int hf_rtp_midi_sysex_common_realtime;
2733 static int hf_rtp_midi_sysex_common_device_id;
2735 static int hf_rtp_midi_sysex_common_nrt_mtc;
2736 static int hf_rtp_midi_sysex_common_nrt_sd_ext;
2737 static int hf_rtp_midi_sysex_common_nrt_gi;
2738 static int hf_rtp_midi_sysex_common_nrt_fd;
2739 static int hf_rtp_midi_sysex_common_tuning;
2740 static int hf_rtp_midi_sysex_common_nrt_gm;
2741 static int hf_rtp_midi_sysex_common_nrt_dls;
2743 static int hf_rtp_midi_sysex_common_rt_mtc;
2744 static int hf_rtp_midi_sysex_common_rt_sc;
2745 static int hf_rtp_midi_sysex_common_rt_ni;
2746 static int hf_rtp_midi_sysex_common_rt_dc;
2747 static int hf_rtp_midi_sysex_common_rt_mtc_cueing;
2748 static int hf_rtp_midi_sysex_common_rt_mmc_commands;
2749 static int hf_rtp_midi_sysex_common_rt_mmc_responses;
2751 static int hf_rtp_midi_sysex_common_nrt_gi_device_family;
2752 static int hf_rtp_midi_sysex_common_nrt_gi_device_family_member;
2753 static int hf_rtp_midi_sysex_common_nrt_gi_software_rev;
2755 static int hf_rtp_midi_sysex_common_nrt_sd_packet_number;
2757 static int hf_rtp_midi_sysex_common_nrt_sd_header_sn;
2758 static int hf_rtp_midi_sysex_common_nrt_sd_header_sf;
2759 static int hf_rtp_midi_sysex_common_nrt_sd_header_sp;
2760 static int hf_rtp_midi_sysex_common_nrt_sd_header_sl;
2761 static int hf_rtp_midi_sysex_common_nrt_sd_header_ls;
2762 static int hf_rtp_midi_sysex_common_nrt_sd_header_le;
2763 static int hf_rtp_midi_sysex_common_nrt_sd_header_lt;
2765 static int hf_rtp_midi_sysex_common_nrt_sd_packet_count;
2766 static int hf_rtp_midi_sysex_common_nrt_sd_packet_check;
2767 static int hf_rtp_midi_sysex_common_nrt_sd_packet_data;
2769 static int hf_rtp_midi_sysex_common_nrt_sd_ext_ln;
2771 static int hf_rtp_midi_sysex_common_nrt_fd_device_id;
2772 static int hf_rtp_midi_sysex_common_nrt_fd_type;
2773 static int hf_rtp_midi_sysex_common_nrt_fd_name;
2774 static int hf_rtp_midi_sysex_common_nrt_fd_length;
2775 static int hf_rtp_midi_sysex_common_nrt_fd_packet_num;
2776 static int hf_rtp_midi_sysex_common_nrt_fd_byte_count;
2777 static int hf_rtp_midi_sysex_common_nrt_fd_packet_data;
2778 static int hf_rtp_midi_sysex_common_nrt_fd_checksum;
2780 static int hf_rtp_midi_sysex_common_tune_program;
2781 static int hf_rtp_midi_sysex_common_tune_name;
2782 static int hf_rtp_midi_sysex_common_tune_freq;
2783 static int hf_rtp_midi_sysex_common_tune_checksum;
2784 static int hf_rtp_midi_sysex_common_tune_changes;
2785 static int hf_rtp_midi_sysex_common_tune_note;
2787 static int hf_rtp_midi_sysex_common_rt_mtc_fm_type;
2788 static int hf_rtp_midi_sysex_common_rt_mtc_fm_hr;
2789 static int hf_rtp_midi_sysex_common_rt_mtc_fm_mn;
2790 static int hf_rtp_midi_sysex_common_rt_mtc_fm_sc;
2791 static int hf_rtp_midi_sysex_common_rt_mtc_fm_fr;
2793 static int hf_rtp_midi_sysex_common_rt_mtc_ub_u1;
2794 static int hf_rtp_midi_sysex_common_rt_mtc_ub_u2;
2795 static int hf_rtp_midi_sysex_common_rt_mtc_ub_u3;
2796 static int hf_rtp_midi_sysex_common_rt_mtc_ub_u4;
2797 static int hf_rtp_midi_sysex_common_rt_mtc_ub_u5;
2798 static int hf_rtp_midi_sysex_common_rt_mtc_ub_u6;
2799 static int hf_rtp_midi_sysex_common_rt_mtc_ub_u7;
2800 static int hf_rtp_midi_sysex_common_rt_mtc_ub_u8;
2801 static int hf_rtp_midi_sysex_common_rt_mtc_ub_u9;
2803 static int hf_rtp_midi_sysex_common_nrt_mtc_type;
2804 static int hf_rtp_midi_sysex_common_nrt_mtc_hr;
2805 static int hf_rtp_midi_sysex_common_nrt_mtc_mn;
2806 static int hf_rtp_midi_sysex_common_nrt_mtc_sc;
2807 static int hf_rtp_midi_sysex_common_nrt_mtc_fr;
2808 static int hf_rtp_midi_sysex_common_nrt_mtc_ff;
2809 static int hf_rtp_midi_sysex_common_nrt_mtc_enl;
2810 static int hf_rtp_midi_sysex_common_nrt_mtc_enm;
2811 static int hf_rtp_midi_sysex_common_nrt_mtc_add;
2813 static int hf_rtp_midi_sysex_common_rt_mtc_cue_enl;
2814 static int hf_rtp_midi_sysex_common_rt_mtc_cue_enm;
2815 static int hf_rtp_midi_sysex_common_rt_mtc_cue_add;
2817 static int hf_rtp_midi_sysex_common_rt_ni_bar_num;
2818 static int hf_rtp_midi_sysex_common_rt_ni_bytes;
2819 static int hf_rtp_midi_sysex_common_rt_ni_numerator;
2820 static int hf_rtp_midi_sysex_common_rt_ni_denominator;
2821 static int hf_rtp_midi_sysex_common_rt_ni_midi_clocks;
2822 static int hf_rtp_midi_sysex_common_rt_ni_32nds;
2824 static int hf_rtp_midi_sysex_common_rt_dc_volume;
2825 static int hf_rtp_midi_sysex_common_rt_dc_balance;
2828 /* RTP MIDI fields defining a subtree */
2830 static int ett_rtp_midi;
2831 static int ett_rtp_midi_commands;
2832 static int ett_rtp_midi_journal;
2833 static int ett_rtp_midi_command;
2834 static int ett_rtp_midi_systemjournal;
2835 static int ett_rtp_midi_channeljournals;
2836 static int ett_rtp_midi_systemchapters;
2837 static int ett_rtp_midi_sj_chapter_d;
2838 static int ett_rtp_midi_sj_chapter_d_field_b;
2839 static int ett_rtp_midi_sj_chapter_d_field_g;
2840 static int ett_rtp_midi_sj_chapter_d_field_h;
2841 static int ett_rtp_midi_sj_chapter_d_field_j;
2842 static int ett_rtp_midi_sj_chapter_d_field_k;
2843 static int ett_rtp_midi_sj_chapter_d_field_y;
2844 static int ett_rtp_midi_sj_chapter_d_field_z;
2845 static int ett_rtp_midi_sj_chapter_v;
2846 static int ett_rtp_midi_sj_chapter_q;
2847 static int ett_rtp_midi_sj_chapter_f;
2848 static int ett_rtp_midi_sj_chapter_f_complete;
2849 static int ett_rtp_midi_sj_chapter_f_partial;
2850 static int ett_rtp_midi_sj_chapter_x;
2851 static int ett_rtp_midi_sj_chapter_x_first;
2852 static int ett_rtp_midi_sj_chapter_x_data;
2853 static int ett_rtp_midi_channeljournal;
2854 static int ett_rtp_midi_channelchapters;
2855 static int ett_rtp_midi_cj_chapter_p;
2856 static int ett_rtp_midi_cj_chapter_c;
2857 static int ett_rtp_midi_cj_chapter_c_loglist;
2858 static int ett_rtp_midi_cj_chapter_c_logitem;
2859 static int ett_rtp_midi_cj_chapter_m;
2860 static int ett_rtp_midi_cj_chapter_m_loglist;
2861 static int ett_rtp_midi_cj_chapter_m_logitem;
2862 static int ett_rtp_midi_cj_chapter_m_log_msb;
2863 static int ett_rtp_midi_cj_chapter_m_log_lsb;
2864 static int ett_rtp_midi_cj_chapter_m_log_a_button;
2865 static int ett_rtp_midi_cj_chapter_m_log_c_button;
2866 static int ett_rtp_midi_cj_chapter_m_log_count;
2867 static int ett_rtp_midi_cj_chapter_w;
2868 static int ett_rtp_midi_cj_chapter_n;
2869 static int ett_rtp_midi_cj_chapter_n_loglist;
2870 static int ett_rtp_midi_cj_chapter_n_logitem;
2871 static int ett_rtp_midi_cj_chapter_n_octets;
2872 static int ett_rtp_midi_cj_chapter_e;
2873 static int ett_rtp_midi_cj_chapter_e_loglist;
2874 static int ett_rtp_midi_cj_chapter_e_logitem;
2875 static int ett_rtp_midi_cj_chapter_t;
2876 static int ett_rtp_midi_cj_chapter_a;
2877 static int ett_rtp_midi_cj_chapter_a_loglist;
2878 static int ett_rtp_midi_cj_chapter_a_logitem;
2879 static int ett_rtp_midi_sysex_data;
2880 static int ett_rtp_midi_sysex_edu;
2881 static int ett_rtp_midi_sysex_manu;
2882 static int ett_rtp_midi_sysex_common_rt;
2883 static int ett_rtp_midi_sysex_common_nrt;
2884 static int ett_rtp_midi_sysex_common_tune_note;
2887 static int proto_rtp_midi;
2890 static dissector_handle_t rtp_midi_handle;
2893 void proto_reg_handoff_rtp_midi( void );
2897 * This decodes the delta-time before a MIDI-command
2899 static int
2900 decodetime(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int offset)
2902 uint8_t octet;
2903 unsigned int consumed;
2904 unsigned int i;
2905 unsigned int deltatime;
2907 consumed = 0;
2908 deltatime = 0;
2911 /* RTP-MIDI deltatime is "compressed" using only the necessary amount of octets */
2912 for ( i=0; i < 4; i++ ) {
2914 octet = tvb_get_uint8( tvb, offset + consumed );
2915 deltatime = ( deltatime << 7 ) | ( octet & RTP_MIDI_DELTA_TIME_OCTET_MASK );
2916 consumed++;
2918 if ( ( octet & RTP_MIDI_DELTA_TIME_EXTENSION ) == 0 ) {
2919 break;
2923 switch (consumed) {
2924 case 1:
2925 proto_tree_add_uint ( tree, hf_rtp_midi_deltatime1, tvb, offset, consumed, deltatime );
2926 break;
2927 case 2:
2928 proto_tree_add_uint ( tree, hf_rtp_midi_deltatime2, tvb, offset, consumed, deltatime );
2929 break;
2930 case 3:
2931 proto_tree_add_uint ( tree, hf_rtp_midi_deltatime3, tvb, offset, consumed, deltatime );
2932 break;
2933 case 4:
2934 proto_tree_add_uint ( tree, hf_rtp_midi_deltatime4, tvb, offset, consumed, deltatime );
2935 break;
2939 return consumed;
2945 * Here a Note-Off command is decoded.
2947 static int
2948 decode_note_off(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, unsigned int cmd_count, unsigned int offset, uint8_t status, unsigned int rsoffset, bool using_rs ) {
2950 uint8_t note;
2951 uint8_t velocity;
2952 const char *status_str;
2953 const char *note_str;
2954 proto_tree *command_tree;
2956 status_str = val_to_str( status >> 4, rtp_midi_channel_status, rtp_midi_unknown_value_hex );
2957 note = tvb_get_uint8( tvb, offset );
2958 note_str = val_to_str_ext( note, &rtp_midi_note_values_ext, rtp_midi_unknown_value_dec );
2959 velocity = tvb_get_uint8( tvb, offset + 1 );
2961 if ( using_rs ) {
2962 command_tree = proto_tree_add_subtree_format( tree, tvb, offset, 2, ett_rtp_midi_command, NULL,
2963 "%s (c=%d, n=%s, v=%d)", status_str, ( status & RTP_MIDI_CHANNEL_MASK ) + 1, note_str, velocity );
2964 proto_tree_add_item( command_tree, hf_rtp_midi_channel_status, tvb, rsoffset, 1, ENC_BIG_ENDIAN );
2965 proto_tree_add_item( command_tree, hf_rtp_midi_channel, tvb, rsoffset, 1, ENC_BIG_ENDIAN );
2966 proto_tree_add_item( command_tree, hf_rtp_midi_note, tvb, offset, 1, ENC_BIG_ENDIAN );
2967 proto_tree_add_item( command_tree, hf_rtp_midi_velocity, tvb, offset + 1, 1, ENC_BIG_ENDIAN );
2968 } else {
2969 command_tree = proto_tree_add_subtree_format(tree, tvb, offset - 1, 3, ett_rtp_midi_command , NULL,
2970 "%s (c=%d, n=%s, v=%d)", status_str, ( status & RTP_MIDI_CHANNEL_MASK ) + 1, note_str, velocity );
2971 proto_tree_add_item( command_tree, hf_rtp_midi_channel_status, tvb, offset - 1, 1, ENC_BIG_ENDIAN );
2972 proto_tree_add_item( command_tree, hf_rtp_midi_channel, tvb, offset - 1, 1, ENC_BIG_ENDIAN );
2973 proto_tree_add_item( command_tree, hf_rtp_midi_note, tvb, offset, 1, ENC_BIG_ENDIAN );
2974 proto_tree_add_item( command_tree, hf_rtp_midi_velocity, tvb, offset + 1, 1, ENC_BIG_ENDIAN );
2977 if ( cmd_count ) {
2978 col_append_fstr(pinfo->cinfo, COL_INFO,", %s (c=%d, n=%s, v=%d)", status_str, ( status & RTP_MIDI_CHANNEL_MASK ) + 1, note_str, velocity );
2979 } else {
2980 col_append_fstr(pinfo->cinfo, COL_INFO, "%s (c=%d, n=%s, v=%d)", status_str, ( status & RTP_MIDI_CHANNEL_MASK ) + 1, note_str, velocity );
2982 return 2;
2987 * Here a Note-On command is decoded.
2989 static int
2990 decode_note_on(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, unsigned int cmd_count, unsigned int offset, uint8_t status, unsigned int rsoffset, bool using_rs ) {
2992 uint8_t note;
2993 uint8_t velocity;
2994 const char *status_str;
2995 const char *note_str;
2996 proto_tree *command_tree;
2998 status_str = val_to_str( status >> 4, rtp_midi_channel_status, rtp_midi_unknown_value_hex );
2999 note = tvb_get_uint8( tvb, offset );
3000 note_str = val_to_str_ext( note, &rtp_midi_note_values_ext, rtp_midi_unknown_value_dec );
3001 velocity = tvb_get_uint8( tvb, offset + 1 );
3003 /* special case velocity=0 for Note-On means Note-Off (to preserve running-status!) */
3004 if ( velocity == 0 ) {
3005 status_str = rtp_midi_channel_status_special_off;
3008 if ( using_rs ) {
3009 command_tree = proto_tree_add_subtree_format( tree, tvb, offset, 2, ett_rtp_midi_command, NULL,
3010 "%s (c=%d, n=%s, v=%d)", status_str, ( status & RTP_MIDI_CHANNEL_MASK ) + 1, note_str, velocity );
3011 proto_tree_add_item( command_tree, hf_rtp_midi_channel_status, tvb, rsoffset, 1, ENC_BIG_ENDIAN );
3012 proto_tree_add_item( command_tree, hf_rtp_midi_channel, tvb, rsoffset, 1, ENC_BIG_ENDIAN );
3013 proto_tree_add_item( command_tree, hf_rtp_midi_note, tvb, offset, 1, ENC_BIG_ENDIAN );
3014 proto_tree_add_item( command_tree, hf_rtp_midi_velocity, tvb, offset + 1, 1, ENC_BIG_ENDIAN );
3015 } else {
3016 command_tree = proto_tree_add_subtree_format(tree, tvb, offset - 1, 3, ett_rtp_midi_command, NULL,
3017 "%s (c=%d, n=%s, v=%d)", status_str, ( status & RTP_MIDI_CHANNEL_MASK ) + 1, note_str, velocity );
3018 proto_tree_add_item( command_tree, hf_rtp_midi_channel_status, tvb, offset - 1, 1, ENC_BIG_ENDIAN );
3019 proto_tree_add_item( command_tree, hf_rtp_midi_channel, tvb, offset - 1, 1, ENC_BIG_ENDIAN );
3020 proto_tree_add_item( command_tree, hf_rtp_midi_note, tvb, offset, 1, ENC_BIG_ENDIAN );
3021 proto_tree_add_item( command_tree, hf_rtp_midi_velocity, tvb, offset + 1, 1, ENC_BIG_ENDIAN);
3024 if ( cmd_count ) {
3025 col_append_fstr(pinfo->cinfo, COL_INFO,", %s (c=%d, n=%s, v=%d)", status_str, ( status & RTP_MIDI_CHANNEL_MASK ) + 1, note_str, velocity );
3026 } else {
3027 col_append_fstr(pinfo->cinfo, COL_INFO, "%s (c=%d, n=%s, v=%d)", status_str, ( status & RTP_MIDI_CHANNEL_MASK ) + 1, note_str, velocity );
3029 return 2;
3036 * Here polyphonic aftertouch is decoded.
3038 static int
3039 decode_poly_pressure(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, unsigned int cmd_count, unsigned int offset, uint8_t status, unsigned int rsoffset, bool using_rs ) {
3041 uint8_t note;
3042 uint8_t pressure;
3043 const char *status_str;
3044 const char *note_str;
3045 proto_tree *command_tree;
3047 status_str = val_to_str( status >> 4, rtp_midi_channel_status, rtp_midi_unknown_value_hex );
3048 note = tvb_get_uint8( tvb, offset );
3049 note_str = val_to_str_ext( note, &rtp_midi_note_values_ext, rtp_midi_unknown_value_dec );
3050 pressure = tvb_get_uint8( tvb, offset + 1 );
3052 if ( using_rs ) {
3053 command_tree = proto_tree_add_subtree_format( tree, tvb, offset, 2, ett_rtp_midi_command, NULL,
3054 "%s (c=%d, n=%s, p=%d)", status_str, ( status & RTP_MIDI_CHANNEL_MASK ) + 1, note_str, pressure );
3055 proto_tree_add_item( command_tree, hf_rtp_midi_channel_status, tvb, rsoffset, 1, ENC_BIG_ENDIAN );
3056 proto_tree_add_item( command_tree, hf_rtp_midi_channel, tvb, rsoffset, 1, ENC_BIG_ENDIAN );
3057 proto_tree_add_item( command_tree, hf_rtp_midi_note, tvb, offset, 1, ENC_BIG_ENDIAN );
3058 proto_tree_add_item( command_tree, hf_rtp_midi_pressure, tvb, offset + 1, 1, ENC_BIG_ENDIAN );
3059 } else {
3060 command_tree = proto_tree_add_subtree_format(tree, tvb, offset - 1, 3, ett_rtp_midi_command, NULL,
3061 "%s (c=%d, n=%s, p=%d)", status_str, ( status & RTP_MIDI_CHANNEL_MASK ) + 1, note_str, pressure );
3062 proto_tree_add_item( command_tree, hf_rtp_midi_channel_status, tvb, offset - 1, 1, ENC_BIG_ENDIAN );
3063 proto_tree_add_item( command_tree, hf_rtp_midi_channel, tvb, offset - 1, 1, ENC_BIG_ENDIAN );
3064 proto_tree_add_item( command_tree, hf_rtp_midi_note, tvb, offset, 1, ENC_BIG_ENDIAN );
3065 proto_tree_add_item( command_tree, hf_rtp_midi_pressure, tvb, offset + 1, 1, ENC_BIG_ENDIAN);
3068 if ( cmd_count ) {
3069 col_append_fstr(pinfo->cinfo, COL_INFO,", %s (c=%d, n=%s, p=%d)", status_str, ( status & RTP_MIDI_CHANNEL_MASK ) + 1, note_str, pressure );
3070 } else {
3071 col_append_fstr(pinfo->cinfo, COL_INFO, "%s (c=%d, n=%s, p=%d)", status_str, ( status & RTP_MIDI_CHANNEL_MASK ) + 1, note_str, pressure );
3073 return 2;
3078 * Here channel aftertouch is decoded.
3080 static int
3081 decode_channel_pressure(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, unsigned int cmd_count, unsigned int offset, uint8_t status, unsigned int rsoffset, bool using_rs ) {
3083 uint8_t pressure;
3084 const char *status_str;
3085 proto_tree *command_tree;
3087 status_str = val_to_str( status >> 4, rtp_midi_channel_status, rtp_midi_unknown_value_hex );
3088 pressure = tvb_get_uint8( tvb, offset );
3090 if ( using_rs ) {
3091 command_tree = proto_tree_add_subtree_format( tree, tvb, offset, 1, ett_rtp_midi_command, NULL,
3092 "%s (c=%d, p=%d)", status_str, ( status & RTP_MIDI_CHANNEL_MASK ) + 1, pressure );
3093 proto_tree_add_item( command_tree, hf_rtp_midi_channel_status, tvb, rsoffset, 1, ENC_BIG_ENDIAN );
3094 proto_tree_add_item( command_tree, hf_rtp_midi_channel, tvb, rsoffset, 1, ENC_BIG_ENDIAN );
3095 proto_tree_add_item( command_tree, hf_rtp_midi_channel_pressure, tvb, offset, 1, ENC_BIG_ENDIAN );
3096 } else {
3097 command_tree = proto_tree_add_subtree_format(tree, tvb, offset - 1, 2, ett_rtp_midi_command, NULL,
3098 "%s (c=%d, p=%d)", status_str, ( status & RTP_MIDI_CHANNEL_MASK ) + 1, pressure );
3099 proto_tree_add_item( command_tree, hf_rtp_midi_channel_status, tvb, offset - 1, 1, ENC_BIG_ENDIAN );
3100 proto_tree_add_item( command_tree, hf_rtp_midi_channel, tvb, offset - 1, 1, ENC_BIG_ENDIAN );
3101 proto_tree_add_item( command_tree, hf_rtp_midi_channel_pressure, tvb, offset, 1, ENC_BIG_ENDIAN);
3104 if ( cmd_count ) {
3105 col_append_fstr(pinfo->cinfo, COL_INFO,", %s (c=%d, p=%d)", status_str, ( status & RTP_MIDI_CHANNEL_MASK ) + 1, pressure );
3106 } else {
3107 col_append_fstr(pinfo->cinfo, COL_INFO, "%s (c=%d, p=%d)", status_str, ( status & RTP_MIDI_CHANNEL_MASK ) + 1, pressure );
3109 return 1;
3115 * Here pitch-bend is decoded.
3117 static int
3118 decode_pitch_bend_change(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int cmd_count, unsigned int offset, uint8_t status, unsigned int rsoffset, bool using_rs ) {
3120 uint8_t octet1;
3121 uint8_t octet2;
3122 uint8_t pitch;
3123 const char *status_str;
3124 proto_tree *command_tree;
3126 status_str = val_to_str( status >> 4, rtp_midi_channel_status, rtp_midi_unknown_value_hex );
3127 octet1 = tvb_get_uint8( tvb, offset );
3128 octet2 = tvb_get_uint8( tvb, offset + 1 );
3129 pitch = ( octet1 << 7 ) | octet2;
3131 if ( using_rs ) {
3132 command_tree = proto_tree_add_subtree_format( tree, tvb, offset, 2, ett_rtp_midi_command, NULL,
3133 "%s (c=%d, pb=%d)", status_str, ( status & RTP_MIDI_CHANNEL_MASK ) + 1, pitch );
3134 proto_tree_add_item( command_tree, hf_rtp_midi_channel_status, tvb, rsoffset, 1, ENC_BIG_ENDIAN );
3135 proto_tree_add_item( command_tree, hf_rtp_midi_channel, tvb, rsoffset, 1, ENC_BIG_ENDIAN );
3136 proto_tree_add_item( command_tree, hf_rtp_midi_pitch_bend, tvb, offset, 2, ENC_BIG_ENDIAN );
3137 } else {
3138 command_tree = proto_tree_add_subtree_format(tree, tvb, offset - 1, 3, ett_rtp_midi_command, NULL,
3139 "%s (c=%d, pb=%d)", status_str, ( status & RTP_MIDI_CHANNEL_MASK ) + 1, pitch );
3140 proto_tree_add_item( command_tree, hf_rtp_midi_channel_status, tvb, offset - 1, 1, ENC_BIG_ENDIAN );
3141 proto_tree_add_item( command_tree, hf_rtp_midi_channel, tvb, offset - 1, 1, ENC_BIG_ENDIAN );
3142 proto_tree_add_item( command_tree, hf_rtp_midi_pitch_bend, tvb, offset, 2, ENC_BIG_ENDIAN );
3145 if ( cmd_count ) {
3146 col_append_fstr(pinfo->cinfo, COL_INFO,", %s (c=%d, pb=%d)", status_str, ( status & RTP_MIDI_CHANNEL_MASK ) + 1, pitch );
3147 } else {
3148 col_append_fstr(pinfo->cinfo, COL_INFO, "%s (c=%d, pb=%d)", status_str, ( status & RTP_MIDI_CHANNEL_MASK ) + 1, pitch );
3150 return 2;
3157 * Here program_change is decoded.
3159 static int
3160 decode_program_change(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, unsigned int cmd_count, unsigned int offset, uint8_t status, unsigned int rsoffset, bool using_rs ) {
3162 uint8_t program;
3163 const char *status_str;
3164 proto_tree *command_tree;
3166 status_str = val_to_str( status >> 4, rtp_midi_channel_status, rtp_midi_unknown_value_hex );
3167 program = tvb_get_uint8( tvb, offset );
3169 if ( using_rs ) {
3170 command_tree = proto_tree_add_subtree_format( tree, tvb, offset, 1, ett_rtp_midi_command, NULL,
3171 "%s (c=%d, p=%d)", status_str, ( status & RTP_MIDI_CHANNEL_MASK ) + 1, program );
3172 proto_tree_add_item( command_tree, hf_rtp_midi_channel_status, tvb, rsoffset, 1, ENC_BIG_ENDIAN );
3173 proto_tree_add_item( command_tree, hf_rtp_midi_channel, tvb, rsoffset, 1, ENC_BIG_ENDIAN );
3174 proto_tree_add_item( command_tree, hf_rtp_midi_program, tvb, offset, 1, ENC_BIG_ENDIAN );
3175 } else {
3176 command_tree = proto_tree_add_subtree_format(tree, tvb, offset - 1, 2, ett_rtp_midi_command, NULL,
3177 "%s (c=%d, p=%d)", status_str, ( status & RTP_MIDI_CHANNEL_MASK ) + 1, program );
3178 proto_tree_add_item( command_tree, hf_rtp_midi_channel_status, tvb, offset - 1, 1, ENC_BIG_ENDIAN );
3179 proto_tree_add_item( command_tree, hf_rtp_midi_channel, tvb, offset - 1, 1, ENC_BIG_ENDIAN );
3180 proto_tree_add_item( command_tree, hf_rtp_midi_program, tvb, offset, 1, ENC_BIG_ENDIAN);
3183 if ( cmd_count ) {
3184 col_append_fstr(pinfo->cinfo, COL_INFO,", %s (c=%d, p=%d)", status_str, ( status & RTP_MIDI_CHANNEL_MASK ) + 1, program );
3185 } else {
3186 col_append_fstr(pinfo->cinfo, COL_INFO, "%s (c=%d, p=%d)", status_str, ( status & RTP_MIDI_CHANNEL_MASK ) + 1, program );
3189 return 1;
3195 * Here control change is decoded.
3197 static int
3198 decode_control_change(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, unsigned int cmd_count, unsigned int offset, uint8_t status, unsigned int rsoffset, bool using_rs ) {
3200 uint8_t controller;
3201 uint8_t value;
3202 const char *status_str;
3203 const char *ctrl_str;
3204 proto_tree *command_tree;
3206 status_str = val_to_str( status >> 4, rtp_midi_channel_status, rtp_midi_unknown_value_hex );
3207 controller = tvb_get_uint8( tvb, offset );
3208 ctrl_str = val_to_str_ext( controller, &rtp_midi_controller_values_ext, "Unknown: %d" );
3209 value = tvb_get_uint8( tvb, offset + 1 );
3211 if ( using_rs ) {
3212 command_tree = proto_tree_add_subtree_format( tree, tvb, offset, 2, ett_rtp_midi_command, NULL,
3213 "%s (c=%d, ctrl=%s, v=%d)", status_str, ( status & RTP_MIDI_CHANNEL_MASK ) + 1, ctrl_str, value );
3214 proto_tree_add_item( command_tree, hf_rtp_midi_channel_status, tvb, rsoffset, 1, ENC_BIG_ENDIAN );
3215 proto_tree_add_item( command_tree, hf_rtp_midi_channel, tvb, rsoffset, 1, ENC_BIG_ENDIAN );
3216 proto_tree_add_item( command_tree, hf_rtp_midi_controller, tvb, offset, 1, ENC_BIG_ENDIAN );
3217 proto_tree_add_item( command_tree, hf_rtp_midi_controller_value, tvb, offset + 1, 1, ENC_BIG_ENDIAN );
3218 } else {
3219 command_tree = proto_tree_add_subtree_format(tree, tvb, offset - 1, 3, ett_rtp_midi_command, NULL,
3220 "%s (c=%d, ctrl=%s, v=%d)", status_str, ( status & RTP_MIDI_CHANNEL_MASK ) + 1, ctrl_str, value );
3221 proto_tree_add_item( command_tree, hf_rtp_midi_channel_status, tvb, offset - 1, 1, ENC_BIG_ENDIAN );
3222 proto_tree_add_item( command_tree, hf_rtp_midi_channel, tvb, offset - 1, 1, ENC_BIG_ENDIAN );
3223 proto_tree_add_item( command_tree, hf_rtp_midi_controller, tvb, offset, 1, ENC_BIG_ENDIAN );
3224 proto_tree_add_item( command_tree, hf_rtp_midi_controller_value, tvb, offset + 1, 1, ENC_BIG_ENDIAN);
3227 if ( cmd_count ) {
3228 col_append_fstr(pinfo->cinfo, COL_INFO,", %s (c=%d, ctrl=%s, p=%d)", status_str, ( status & RTP_MIDI_CHANNEL_MASK ) + 1, ctrl_str, value );
3229 } else {
3230 col_append_fstr(pinfo->cinfo, COL_INFO, "%s (c=%d, ctrl=%s, p=%d)", status_str, ( status & RTP_MIDI_CHANNEL_MASK ) + 1, ctrl_str, value );
3232 return 2;
3237 * Here a Sysex-Common Non-Realtime Sample Dump Header command is decoded.
3239 static unsigned int
3240 decode_sysex_common_nrt_sd_hdr( tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int offset ) {
3241 unsigned int start_offset = offset;
3243 /* sample number */
3244 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_sd_header_sn, tvb, offset, 2, ENC_BIG_ENDIAN );
3245 offset += 2;
3247 /* sample format */
3248 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_sd_header_sf, tvb, offset, 1, ENC_BIG_ENDIAN );
3249 offset++;
3251 /* sample period */
3252 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_sd_header_sp, tvb, offset, 3, ENC_BIG_ENDIAN );
3253 offset += 3;
3255 /* sample length */
3256 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_sd_header_sl, tvb, offset, 3, ENC_BIG_ENDIAN );
3257 offset += 3;
3259 /* loop start */
3260 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_sd_header_ls, tvb, offset, 3, ENC_BIG_ENDIAN );
3261 offset += 3;
3263 /* loop end */
3264 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_sd_header_le, tvb, offset, 3, ENC_BIG_ENDIAN );
3265 offset += 3;
3267 /* loop type */
3268 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_sd_header_lt, tvb, offset, 1, ENC_BIG_ENDIAN );
3269 offset++;
3271 return offset-start_offset;
3275 * Here a Sysex-Common Non-Realtime Sample Dump Packet command is decoded.
3277 static unsigned int
3278 decode_sysex_common_nrt_sd_packet( tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int offset, unsigned int data_len ) {
3279 unsigned int start_offset = offset;
3281 /* sample number */
3282 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_sd_packet_count, tvb, offset, 1, ENC_BIG_ENDIAN );
3283 offset++;
3285 /* do we have sample-data? */
3286 if ( data_len - 1 > 1 ) {
3288 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_sd_packet_data, tvb, offset, data_len - 2, ENC_NA );
3290 offset += ( data_len - 2 );
3293 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_sd_packet_check, tvb, offset, 1, ENC_BIG_ENDIAN );
3294 offset++;
3296 return offset-start_offset;
3300 * Here a Sysex-Common Non-Realtime Sample Dump Request command is decoded.
3302 static unsigned int
3303 decode_sysex_common_nrt_sd_req( tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int offset) {
3305 /* sample number */
3306 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_sd_header_sn, tvb, offset, 2, ENC_BIG_ENDIAN );
3308 return 2;
3313 * Here a Sysex-Common Non-Realtime Sample Dump Extension command is decoded.
3315 static unsigned int
3316 decode_sysex_common_nrt_sd_ext( tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int offset, unsigned int data_len ) {
3317 uint8_t sub_id;
3318 unsigned int start_offset = offset;
3320 if ( data_len < 1 )
3321 return 0;
3323 /* first we retrieve the sub-command */
3324 sub_id = tvb_get_uint8( tvb, offset );
3325 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_sd_ext, tvb, offset, 1, ENC_BIG_ENDIAN );
3326 offset++;
3328 if ( sub_id == RTP_MIDI_SYSEX_COMMON_NRT_SD_EXT_LOOP_POINT_TRANSMISSION ) {
3330 /* sample number */
3331 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_sd_header_sn, tvb, offset, 2, ENC_BIG_ENDIAN );
3332 offset += 2;
3334 /* loop number */
3335 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_sd_ext_ln, tvb, offset, 2, ENC_BIG_ENDIAN );
3336 offset += 2;
3338 /* loop type */
3339 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_sd_header_lt, tvb, offset, 1, ENC_BIG_ENDIAN );
3340 offset++;
3342 /* loop start */
3343 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_sd_header_ls, tvb, offset, 3, ENC_BIG_ENDIAN );
3344 offset += 3;
3346 /* loop end */
3347 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_sd_header_le, tvb, offset, 3, ENC_BIG_ENDIAN );
3348 offset += 3;
3350 } else if ( sub_id == RTP_MIDI_SYSEX_COMMON_NRT_SD_EXT_LOOP_POINTS_REQUEST ) {
3352 /* sample number */
3353 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_sd_header_sn, tvb, offset, 2, ENC_BIG_ENDIAN );
3354 offset += 2;
3356 /* loop number */
3357 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_sd_ext_ln, tvb, offset, 2, ENC_BIG_ENDIAN );
3358 offset += 2;
3361 return offset-start_offset;
3365 * Here a Sysex-Common Non-Realtime General Information command is decoded.
3367 static unsigned int
3368 decode_sysex_common_nrt_gi( tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int offset, unsigned int data_len ) {
3369 uint8_t sub_id;
3370 int consumed = 0;
3372 if ( data_len < 1 )
3373 return consumed;
3375 /* first we retrieve the sub-command */
3376 sub_id = tvb_get_uint8( tvb, offset );
3377 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_gi, tvb, offset, 1, ENC_BIG_ENDIAN );
3378 offset++;
3379 data_len--;
3380 consumed++;
3383 /* This is the only sub-command that we know that we can decode,
3384 * the Identity Request has already been decoded up to this point. */
3385 if ( sub_id == RTP_MIDI_SYSEX_COMMON_NRT_GI_IDENTITY_REQUEST ) {
3387 /* nothing more to do... */
3389 } else if ( sub_id == RTP_MIDI_SYSEX_COMMON_NRT_GI_IDENTITY_REPLY ) {
3390 uint8_t manu_short;
3392 if ( data_len < 1 ) {
3393 return consumed;
3396 /* the manu-id should follow */
3397 proto_tree_add_item( tree, hf_rtp_midi_manu_short, tvb, offset, 1, ENC_BIG_ENDIAN );
3398 manu_short = tvb_get_uint8( tvb, offset );
3399 offset++;
3400 data_len--;
3401 consumed++;
3403 /* possibly escaped to be a long manu-id */
3404 if ( manu_short == RTP_MIDI_MANU_SHORT_ISLONG ) {
3405 if ( data_len < 2 ) {
3406 return consumed;
3408 proto_tree_add_item( tree, hf_rtp_midi_manu_long, tvb, offset, 2, ENC_BIG_ENDIAN );
3409 offset += 2 ;
3410 data_len -= 2;
3411 consumed += 2;
3414 /* lets see if we can get the device family for this unit */
3415 if ( data_len < 2 ) {
3416 return consumed;
3418 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_gi_device_family, tvb, offset, 2, ENC_BIG_ENDIAN );
3419 offset += 2 ;
3420 data_len -= 2;
3421 consumed += 2;
3423 /* ...also get the detailed member of this family... */
3424 if ( data_len < 2 ) {
3425 return consumed;
3427 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_gi_device_family_member, tvb, offset, 2, ENC_BIG_ENDIAN );
3428 offset += 2 ;
3429 data_len -= 2;
3430 consumed += 2;
3432 /* and even the software-revision-level */
3433 if ( data_len < 4 ) {
3434 return consumed;
3436 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_gi_software_rev, tvb, offset, 4, ENC_BIG_ENDIAN );
3437 consumed += 4;
3440 return consumed;
3444 * Here a Sysex-Common Non-Realtime File Dump command is decoded.
3446 static unsigned int
3447 decode_sysex_common_nrt_fd( tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int offset, unsigned int data_len ) {
3448 uint8_t sub_id;
3449 unsigned int start_offset = offset;
3451 if ( data_len < 1 )
3452 return 0;
3454 /* first we retrieve the sub-command */
3455 sub_id = tvb_get_uint8( tvb, offset );
3456 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_fd, tvb, offset, 1, ENC_BIG_ENDIAN );
3457 offset++;
3458 data_len--;
3460 if ( sub_id == RTP_MIDI_SYSEX_COMMON_NRT_FD_HEADER ) {
3462 /* type */
3463 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_fd_device_id, tvb, offset, 1, ENC_BIG_ENDIAN );
3464 offset++;
3465 data_len--;
3467 /* file type */
3468 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_fd_type, tvb, offset, 4, ENC_ASCII );
3469 offset += 4;
3470 data_len -= 4;
3472 /* file length */
3473 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_fd_length, tvb, offset, 4, ENC_BIG_ENDIAN );
3474 offset += 4;
3475 data_len -= 4;
3477 if ( data_len ) {
3479 /* file-name */
3480 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_fd_name, tvb, offset, data_len, ENC_ASCII );
3481 offset += data_len;
3484 } else if ( sub_id == RTP_MIDI_SYSEX_COMMON_NRT_FD_DATA_PACKET ) {
3486 /* packet-num */
3487 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_fd_packet_num, tvb, offset, 1, ENC_BIG_ENDIAN );
3488 offset++;
3489 data_len--;
3491 /* byte count */
3492 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_fd_byte_count, tvb, offset, 1, ENC_BIG_ENDIAN );
3493 offset++;
3494 data_len--;
3496 /* do we have file-data? */
3497 if ( data_len > 1 ) {
3499 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_fd_packet_data, tvb, offset, data_len - 1, ENC_NA );
3501 offset += ( data_len - 1 );
3504 proto_tree_add_checksum(tree, tvb, offset, hf_rtp_midi_sysex_common_nrt_fd_checksum, -1, NULL, pinfo, 0, ENC_BIG_ENDIAN, PROTO_CHECKSUM_NO_FLAGS);
3505 offset++;
3507 } else if ( sub_id == RTP_MIDI_SYSEX_COMMON_NRT_FD_REQUEST ) {
3509 /* type */
3510 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_fd_device_id, tvb, offset, 1, ENC_BIG_ENDIAN );
3511 offset++;
3512 data_len--;
3514 /* file type */
3515 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_fd_type, tvb, offset, 4, ENC_ASCII );
3516 offset += 4;
3517 data_len -= 4;
3519 if ( data_len ) {
3521 /* file-name */
3522 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_fd_name, tvb, offset, data_len, ENC_ASCII );
3523 offset += data_len;
3527 return offset-start_offset;
3531 * Here a Sysex-Common (Non-)Realtime MIDI Tuning Standard command is decoded.
3532 * As the code-points do not overlap, both RT and NRT are decoded here...
3534 static unsigned int
3535 decode_sysex_common_tuning( tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int offset, unsigned int data_len ) {
3537 proto_tree *tune_tree;
3538 const char *note_str;
3539 uint8_t sub_id;
3540 unsigned int start_offset = offset;
3541 unsigned int i;
3543 if ( data_len < 1 )
3544 return 0;
3546 /* first we retrieve the sub-command */
3547 sub_id = tvb_get_uint8( tvb, offset );
3548 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_tuning, tvb, offset, 1, ENC_BIG_ENDIAN );
3549 offset++;
3551 if ( sub_id == RTP_MIDI_SYSEX_COMMON_TUNING_BULK_DUMP_REQUEST ) {
3553 /* type */
3554 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_tune_program, tvb, offset, 1, ENC_BIG_ENDIAN );
3555 offset++;
3557 } else if ( sub_id == RTP_MIDI_SYSEX_COMMON_TUNING_BULK_DUMP_REPLY ) {
3559 /* type */
3560 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_tune_program, tvb, offset, 1, ENC_BIG_ENDIAN );
3561 offset++;
3563 /* file length */
3564 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_tune_name, tvb, offset, 16, ENC_ASCII );
3565 offset += 16;
3567 for ( i=0; i < 128; i++ ) {
3568 note_str = val_to_str_ext( i, &rtp_midi_note_values_ext, rtp_midi_unknown_value_dec );
3570 tune_tree = proto_tree_add_subtree_format(tree, tvb, offset, 3, ett_rtp_midi_sysex_common_tune_note, NULL, "Note: %s", note_str );
3572 /* frequency */
3573 proto_tree_add_item( tune_tree, hf_rtp_midi_sysex_common_tune_freq, tvb, offset, 3, ENC_BIG_ENDIAN );
3574 offset += 3;
3577 /* checksum */
3578 proto_tree_add_checksum(tree, tvb, offset, hf_rtp_midi_sysex_common_tune_checksum, -1, NULL, pinfo, 0, ENC_BIG_ENDIAN, PROTO_CHECKSUM_NO_FLAGS);
3579 offset++;
3581 } else if ( sub_id == RTP_MIDI_SYSEX_COMMON_TUNING_NOTE_CHANGE ) {
3582 uint8_t changes;
3584 /* type */
3585 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_tune_program, tvb, offset, 1, ENC_BIG_ENDIAN );
3586 offset++;
3588 /* changes */
3589 changes = tvb_get_uint8( tvb, offset );
3590 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_tune_changes, tvb, offset, 1, ENC_BIG_ENDIAN );
3591 offset++;
3593 for ( i=0; i < changes; i++ ) {
3594 uint8_t note;
3596 note = tvb_get_uint8( tvb, offset );
3598 note_str = val_to_str_ext( note, &rtp_midi_note_values_ext, rtp_midi_unknown_value_dec );
3600 tune_tree = proto_tree_add_subtree_format(tree, tvb, offset, 3, ett_rtp_midi_sysex_common_tune_note, NULL, "Note: %s", note_str );
3602 /* note */
3603 proto_tree_add_item( tune_tree, hf_rtp_midi_sysex_common_tune_note, tvb, offset, 1, ENC_BIG_ENDIAN );
3604 offset++;
3606 /* frequency */
3607 proto_tree_add_item( tune_tree, hf_rtp_midi_sysex_common_tune_freq, tvb, offset, 3, ENC_BIG_ENDIAN );
3608 offset += 3;
3613 return offset-start_offset;
3617 * Here a Sysex-Common Non-Realtime General MIDI command is decoded.
3619 static unsigned int
3620 decode_sysex_common_nrt_gm( tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int offset, unsigned int data_len ) {
3621 if ( data_len < 1 )
3622 return 0;
3624 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_gm, tvb, offset, 1, ENC_BIG_ENDIAN );
3625 return 1;
3629 * Here a Sysex-Common Non-Realtime Downloadable Sounds command is decoded.
3631 static unsigned int
3632 decode_sysex_common_nrt_dls( tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int offset, unsigned int data_len ) {
3633 if ( data_len < 1 )
3634 return 0;
3636 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_dls, tvb, offset, 1, ENC_BIG_ENDIAN );
3637 return 1;
3641 * Here a Sysex-Common Non-Realtime End Of File command is decoded.
3643 static unsigned int
3644 decode_sysex_common_nrt_eof( tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int offset, unsigned int data_len ) {
3645 if ( data_len < 1 )
3646 return 0;
3648 /* we only have a packet-number */
3649 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_sd_packet_number, tvb, offset, 1, ENC_BIG_ENDIAN );
3651 return 1;
3655 * Here a Sysex-Common Non-Realtime Wait command is decoded.
3657 static unsigned int
3658 decode_sysex_common_nrt_wait( tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int offset, unsigned int data_len ) {
3660 if ( data_len < 1 )
3661 return 0;
3663 /* we only have a packet-number */
3664 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_sd_packet_number, tvb, offset, 1, ENC_BIG_ENDIAN );
3666 return 1;
3670 * Here a Sysex-Common Non-Realtime Cancel command is decoded.
3672 static unsigned int
3673 decode_sysex_common_nrt_cancel( tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int offset, unsigned int data_len ) {
3675 if ( data_len < 1 )
3676 return 0;
3678 /* we only have a packet-number */
3679 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_sd_packet_number, tvb, offset, 1, ENC_BIG_ENDIAN );
3681 return 1;
3685 * Here a Sysex-Common Non-Realtime NAK command is decoded.
3687 static unsigned int
3688 decode_sysex_common_nrt_nak( tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int offset, unsigned int data_len ) {
3690 if ( data_len < 1 )
3691 return 0;
3693 /* we only have a packet-number */
3694 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_sd_packet_number, tvb, offset, 1, ENC_BIG_ENDIAN );
3696 return 1;
3700 * Here a Sysex-Common Non-Realtime ACK command is decoded.
3702 static unsigned int
3703 decode_sysex_common_nrt_ack( tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int offset, unsigned int data_len ) {
3705 if ( data_len < 1 )
3706 return 0;
3708 /* we only have a packet-number */
3709 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_sd_packet_number, tvb, offset, 1, ENC_BIG_ENDIAN );
3711 return 1;
3715 * here a sysex-common non-realtime midi time code cueing command is decoded.
3716 * as the codepoints are the same, we decode both realtime and non-realtime here.
3718 static unsigned int
3719 decode_sysex_common_nrt_mtc( tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int offset, unsigned int data_len ) {
3720 unsigned int start_offset = offset;
3722 if ( data_len < 1 )
3723 return 0;
3725 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_mtc, tvb, offset, 1, ENC_BIG_ENDIAN );
3726 offset++;
3727 data_len--;
3729 /* type and hours */
3730 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_mtc_type, tvb, offset, 1, ENC_BIG_ENDIAN );
3731 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_mtc_hr, tvb, offset, 1, ENC_BIG_ENDIAN );
3732 offset++;
3733 data_len--;
3735 /* minutes */
3736 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_mtc_mn, tvb, offset, 1, ENC_BIG_ENDIAN );
3737 offset++;
3738 data_len--;
3740 /* seconds */
3741 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_mtc_sc, tvb, offset, 1, ENC_BIG_ENDIAN );
3742 offset++;
3743 data_len--;
3745 /* frames */
3746 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_mtc_fr, tvb, offset, 1, ENC_BIG_ENDIAN );
3747 offset++;
3748 data_len--;
3750 /* fractional frames */
3751 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_mtc_ff, tvb, offset, 1, ENC_BIG_ENDIAN );
3752 offset++;
3753 data_len--;
3755 /* event-number (lsb) */
3756 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_mtc_enl, tvb, offset, 1, ENC_BIG_ENDIAN );
3757 offset++;
3758 data_len--;
3760 /* event-number (msb) */
3761 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_mtc_enm, tvb, offset, 1, ENC_BIG_ENDIAN );
3762 offset++;
3763 data_len--;
3765 if ( data_len ) {
3767 /* additional data */
3768 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_nrt_mtc_add, tvb, offset, data_len, ENC_NA );
3769 offset += data_len;
3772 return offset-start_offset;
3776 * Here a Sysex-Common Realtime MIDI Time Code Cueing command is decoded.
3777 * As the codepoints are the same, we decode both realtime and non-realtime here.
3779 static unsigned int
3780 decode_sysex_common_rt_mtc_cue( tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int offset, unsigned int data_len ) {
3781 unsigned int start_offset = offset;
3783 if ( data_len < 1 )
3784 return 0;
3786 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_rt_mtc_cueing, tvb, offset, 1, ENC_BIG_ENDIAN );
3787 offset++;
3788 data_len--;
3790 /* event-number (lsb) */
3791 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_rt_mtc_cue_enl, tvb, offset, 1, ENC_BIG_ENDIAN );
3792 offset++;
3793 data_len--;
3795 /* event-number (msb) */
3796 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_rt_mtc_cue_enm, tvb, offset, 1, ENC_BIG_ENDIAN );
3797 offset++;
3798 data_len--;
3800 if ( data_len ) {
3802 /* additional data */
3803 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_rt_mtc_cue_add, tvb, offset, data_len, ENC_NA );
3804 offset += data_len;
3807 return offset-start_offset;
3814 * Here a Sysex-Common Non-Realtime command is decoded.
3816 static unsigned int
3817 decode_sysex_common_nrt( tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int offset, unsigned int data_len ) {
3818 uint8_t common_nrt;
3819 const char *nrt_str;
3820 proto_tree *command_tree;
3821 int consumed = 0;
3822 int ext_consumed = 0;
3824 if ( data_len < 1 )
3825 return consumed;
3827 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_device_id, tvb, offset, 1, ENC_BIG_ENDIAN );
3828 offset++;
3829 data_len--;
3830 consumed++;
3832 if ( data_len < 1 ) {
3833 return consumed;
3836 common_nrt = tvb_get_uint8( tvb, offset );
3838 nrt_str = val_to_str( common_nrt, rtp_midi_sysex_common_nrt, "Unknown 0x%02x" );
3840 command_tree = proto_tree_add_subtree(tree, tvb, offset, data_len, ett_rtp_midi_sysex_common_nrt, NULL, nrt_str );
3841 proto_tree_add_item( command_tree, hf_rtp_midi_sysex_common_non_realtime, tvb, offset, 1, ENC_BIG_ENDIAN );
3843 offset++;
3844 data_len--;
3845 consumed++;
3847 switch ( common_nrt ) {
3848 case RTP_MIDI_SYSEX_COMMON_NRT_SAMPLE_DUMP_HEADER:
3849 ext_consumed = decode_sysex_common_nrt_sd_hdr( tvb, pinfo, command_tree, offset);
3850 break;
3851 case RTP_MIDI_SYSEX_COMMON_NRT_SAMPLE_DATA_PACKET:
3852 ext_consumed = decode_sysex_common_nrt_sd_packet( tvb, pinfo, command_tree, offset, data_len );
3853 break;
3854 case RTP_MIDI_SYSEX_COMMON_NRT_SAMPLE_DUMP_REQUEST:
3855 ext_consumed = decode_sysex_common_nrt_sd_req( tvb, pinfo, command_tree, offset);
3856 break;
3857 case RTP_MIDI_SYSEX_COMMON_NRT_MTC:
3858 ext_consumed = decode_sysex_common_nrt_mtc( tvb, pinfo, command_tree, offset, data_len );
3859 break;
3860 case RTP_MIDI_SYSEX_COMMON_NRT_SAMPLE_DUMP_EXTENSIONS:
3861 ext_consumed = decode_sysex_common_nrt_sd_ext( tvb, pinfo, command_tree, offset, data_len );
3862 break;
3863 case RTP_MIDI_SYSEX_COMMON_NRT_GENERAL_INFORMATION:
3864 ext_consumed = decode_sysex_common_nrt_gi( tvb, pinfo, command_tree, offset, data_len );
3865 break;
3866 case RTP_MIDI_SYSEX_COMMON_NRT_FILE_DUMP:
3867 ext_consumed = decode_sysex_common_nrt_fd( tvb, pinfo, command_tree, offset, data_len );
3868 break;
3869 case RTP_MIDI_SYSEX_COMMON_NRT_MIDI_TUNING_STANDARD:
3870 ext_consumed = decode_sysex_common_tuning( tvb, pinfo, command_tree, offset, data_len );
3871 break;
3872 case RTP_MIDI_SYSEX_COMMON_NRT_GENERAL_MIDI:
3873 ext_consumed = decode_sysex_common_nrt_gm( tvb, pinfo, command_tree, offset, data_len );
3874 break;
3875 case RTP_MIDI_SYSEX_COMMON_NRT_DOWNLOADABLE_SOUNDS: /* ??? not in Spec */
3876 ext_consumed = decode_sysex_common_nrt_dls( tvb, pinfo, command_tree, offset, data_len );
3877 break;
3878 case RTP_MIDI_SYSEX_COMMON_NRT_END_OF_FILE:
3879 ext_consumed = decode_sysex_common_nrt_eof( tvb, pinfo, command_tree, offset, data_len );
3880 break;
3881 case RTP_MIDI_SYSEX_COMMON_NRT_WAIT:
3882 ext_consumed = decode_sysex_common_nrt_wait( tvb, pinfo, command_tree, offset, data_len );
3883 break;
3884 case RTP_MIDI_SYSEX_COMMON_NRT_CANCEL:
3885 ext_consumed = decode_sysex_common_nrt_cancel( tvb, pinfo, command_tree, offset, data_len );
3886 break;
3887 case RTP_MIDI_SYSEX_COMMON_NRT_NAK:
3888 ext_consumed = decode_sysex_common_nrt_nak( tvb, pinfo, command_tree, offset, data_len );
3889 break;
3890 case RTP_MIDI_SYSEX_COMMON_NRT_ACK:
3891 ext_consumed = decode_sysex_common_nrt_ack( tvb, pinfo, command_tree, offset, data_len );
3892 break;
3895 if ( ext_consumed < 0 ) {
3896 return -1;
3899 /* set our pointers correct to move past already decoded data */
3900 offset += ext_consumed;
3901 data_len -= ext_consumed;
3902 consumed += ext_consumed;
3904 if ( data_len > 0 ) {
3905 proto_tree_add_item( command_tree, hf_rtp_midi_unknown_data, tvb, offset, data_len, ENC_NA );
3906 consumed += data_len;
3909 return consumed;
3918 * Here a Sysex-Common Realtime MIDI Time Code command is decoded.
3920 static unsigned int
3921 decode_sysex_common_rt_mtc( tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int offset, unsigned int data_len ) {
3922 uint8_t sub_id;
3923 unsigned int start_offset = offset;
3925 if ( data_len < 1 )
3926 return 0;
3928 /* first we retrieve the sub-command */
3929 sub_id = tvb_get_uint8( tvb, offset );
3930 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_rt_mtc, tvb, offset, 1, ENC_BIG_ENDIAN );
3931 offset++;
3933 if ( sub_id == RTP_MIDI_SYSEX_COMMON_RT_MTC_FULL_MESSAGE ) {
3935 /* type and hours */
3936 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_rt_mtc_fm_type, tvb, offset, 1, ENC_BIG_ENDIAN );
3937 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_rt_mtc_fm_hr, tvb, offset, 1, ENC_BIG_ENDIAN );
3938 offset++;
3940 /* minutes */
3941 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_rt_mtc_fm_mn, tvb, offset, 1, ENC_BIG_ENDIAN );
3942 offset++;
3944 /* seconds */
3945 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_rt_mtc_fm_sc, tvb, offset, 1, ENC_BIG_ENDIAN );
3946 offset++;
3948 /* frames */
3949 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_rt_mtc_fm_fr, tvb, offset, 1, ENC_BIG_ENDIAN );
3950 offset++;
3952 } else if ( sub_id == RTP_MIDI_SYSEX_COMMON_RT_MTC_USER_BITS ) {
3954 /* U1 */
3955 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_rt_mtc_ub_u1, tvb, offset, 1, ENC_BIG_ENDIAN );
3956 offset++;
3958 /* U2 */
3959 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_rt_mtc_ub_u2, tvb, offset, 1, ENC_BIG_ENDIAN );
3960 offset++;
3962 /* U3 */
3963 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_rt_mtc_ub_u3, tvb, offset, 1, ENC_BIG_ENDIAN );
3964 offset++;
3966 /* U4 */
3967 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_rt_mtc_ub_u4, tvb, offset, 1, ENC_BIG_ENDIAN );
3968 offset++;
3970 /* U5 */
3971 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_rt_mtc_ub_u5, tvb, offset, 1, ENC_BIG_ENDIAN );
3972 offset++;
3974 /* U6 */
3975 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_rt_mtc_ub_u6, tvb, offset, 1, ENC_BIG_ENDIAN );
3976 offset++;
3978 /* U7 */
3979 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_rt_mtc_ub_u7, tvb, offset, 1, ENC_BIG_ENDIAN );
3980 offset++;
3982 /* U8 */
3983 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_rt_mtc_ub_u8, tvb, offset, 1, ENC_BIG_ENDIAN );
3984 offset++;
3986 /* U9 */
3987 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_rt_mtc_ub_u9, tvb, offset, 1, ENC_BIG_ENDIAN );
3988 offset++;
3991 return offset-start_offset;
3995 * Here a Sysex-Common Realtime MIDI Show Control command is decoded.
3997 static unsigned int
3998 decode_sysex_common_rt_sc( tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int offset, unsigned int data_len ) {
4000 if ( data_len < 1 )
4001 return 0;
4003 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_rt_sc, tvb, offset, 1, ENC_BIG_ENDIAN );
4005 /* TODO: decode Show Control stuff */
4006 return 1;
4010 * Here a Sysex-Common Realtime Notation Information command is decoded.
4012 static unsigned int
4013 decode_sysex_common_rt_ni( tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int offset, unsigned int data_len ) {
4014 uint8_t sub_id;
4015 unsigned int start_offset = offset;
4017 if ( data_len < 1 )
4018 return 0;
4020 /* first we retrieve the sub-command */
4021 sub_id = tvb_get_uint8( tvb, offset );
4022 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_rt_ni, tvb, offset, 1, ENC_BIG_ENDIAN );
4023 offset++;
4025 if ( sub_id == RTP_MIDI_SYSEX_COMMON_RT_NT_BAR_NUMBER ) {
4027 /* bar number */
4028 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_rt_ni_bar_num, tvb, offset, 2, ENC_BIG_ENDIAN );
4029 offset += 2;
4031 } else if ( ( sub_id == RTP_MIDI_SYSEX_COMMON_RT_NT_TIME_SIGNATURE_IMMEDIATE ) ||
4032 ( sub_id == RTP_MIDI_SYSEX_COMMON_RT_NT_TIME_SIGNATURE_DELAYED ) ) {
4033 int bytes;
4035 /* bytes */
4036 bytes = tvb_get_uint8( tvb, offset );
4037 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_rt_ni_bytes, tvb, offset, 1, ENC_BIG_ENDIAN );
4038 offset++;
4040 /* beats / numerator */
4041 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_rt_ni_numerator, tvb, offset, 1, ENC_BIG_ENDIAN );
4042 offset++;
4043 bytes--;
4045 /* beats / denominator */
4046 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_rt_ni_denominator, tvb, offset, 1, ENC_BIG_ENDIAN );
4047 offset++;
4048 bytes--;
4050 /* clocks */
4051 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_rt_ni_midi_clocks, tvb, offset, 1, ENC_BIG_ENDIAN );
4052 offset++;
4053 bytes--;
4055 /* 32nds */
4056 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_rt_ni_32nds, tvb, offset, 1, ENC_BIG_ENDIAN );
4057 offset++;
4058 bytes--;
4060 while ( bytes > 0 ) {
4062 /* beats / numerator */
4063 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_rt_ni_numerator, tvb, offset, 1, ENC_BIG_ENDIAN );
4064 offset++;
4065 bytes--;
4067 /* beats / denominator */
4068 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_rt_ni_denominator, tvb, offset, 1, ENC_BIG_ENDIAN );
4069 offset++;
4070 bytes--;
4074 return offset-start_offset;
4078 * Here a Sysex-Common Realtime Device Control command is decoded.
4080 static unsigned int
4081 decode_sysex_common_rt_dc( tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int offset, unsigned int data_len ) {
4082 uint8_t sub_id;
4083 unsigned int start_offset = offset;
4085 if ( data_len < 1 )
4086 return 0;
4088 /* first we retrieve the sub-command */
4089 sub_id = tvb_get_uint8( tvb, offset );
4090 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_rt_dc, tvb, offset, 1, ENC_BIG_ENDIAN );
4091 offset++;
4093 if ( sub_id == RTP_MIDI_SYSEX_COMMON_RT_DC_MASTER_VOLUME ) {
4095 /* volume */
4096 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_rt_dc_volume, tvb, offset, 2, ENC_BIG_ENDIAN );
4097 offset += 2;
4099 } else if ( sub_id == RTP_MIDI_SYSEX_COMMON_RT_DC_MASTER_BALANCE ) {
4101 /* balance */
4102 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_rt_dc_balance, tvb, offset, 2, ENC_BIG_ENDIAN );
4103 offset += 2;
4107 return offset-start_offset;
4112 * Here a Sysex-Common Realtime MIDI Machine Control command is decoded.
4114 static unsigned int
4115 decode_sysex_common_rt_mmc_command( tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int offset, unsigned int data_len ) {
4117 if ( data_len < 1 )
4118 return 0;
4120 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_rt_mmc_commands, tvb, offset, 1, ENC_BIG_ENDIAN );
4121 offset++;
4123 /* TODO: decode MMC stuff */
4124 return 1;
4128 * Here a Sysex-Common Realtime MIDI Machine Control response is decoded.
4130 static unsigned int
4131 decode_sysex_common_rt_mmc_response( tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int offset, unsigned int data_len ) {
4133 if ( data_len < 1 )
4134 return 0;
4136 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_rt_mmc_responses, tvb, offset, 1, ENC_BIG_ENDIAN );
4138 /* TODO: decode MMC stuff */
4139 return 1;
4147 * Here a Sysex-Common Realtime command is decoded.
4149 static unsigned int
4150 decode_sysex_common_rt( tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int offset, unsigned int data_len ) {
4151 uint8_t common_rt;
4152 const char *rt_str;
4153 proto_tree *command_tree;
4154 int consumed = 0;
4155 int ext_consumed = 0;
4157 if ( data_len < 1 )
4158 return consumed;
4160 proto_tree_add_item( tree, hf_rtp_midi_sysex_common_device_id, tvb, offset, 1, ENC_BIG_ENDIAN );
4161 offset++;
4162 data_len--;
4163 consumed++;
4165 if ( data_len < 1 ) {
4166 return consumed;
4169 common_rt = tvb_get_uint8( tvb, offset );
4170 rt_str = val_to_str( common_rt, rtp_midi_sysex_common_rt, "Unknown 0x%02x" );
4172 command_tree = proto_tree_add_subtree(tree, tvb, offset, data_len, ett_rtp_midi_sysex_common_rt, NULL, rt_str );
4173 proto_tree_add_item( command_tree, hf_rtp_midi_sysex_common_realtime, tvb, offset, 1, ENC_BIG_ENDIAN );
4175 data_len--;
4176 offset++;
4177 consumed++;
4179 switch ( common_rt ) {
4180 case RTP_MIDI_SYSEX_COMMON_RT_MIDI_TIME_CODE:
4181 ext_consumed = decode_sysex_common_rt_mtc( tvb, pinfo, command_tree, offset, data_len );
4182 break;
4183 case RTP_MIDI_SYSEX_COMMON_RT_MIDI_SHOW_CONTROL:
4184 ext_consumed = decode_sysex_common_rt_sc( tvb, pinfo, command_tree, offset, data_len );
4185 break;
4186 case RTP_MIDI_SYSEX_COMMON_RT_NOTATION_INFORMATION:
4187 ext_consumed = decode_sysex_common_rt_ni( tvb, pinfo, command_tree, offset, data_len );
4188 break;
4189 case RTP_MIDI_SYSEX_COMMON_RT_DEVICE_CONTROL:
4190 ext_consumed = decode_sysex_common_rt_dc( tvb, pinfo, command_tree, offset, data_len );
4191 break;
4192 case RTP_MIDI_SYSEX_COMMON_RT_MTC_CUEING:
4193 ext_consumed = decode_sysex_common_rt_mtc_cue( tvb, pinfo, command_tree, offset, data_len );
4194 break;
4195 case RTP_MIDI_SYSEX_COMMON_RT_MIDI_MACHINE_CONTROL_COMMAND:
4196 ext_consumed = decode_sysex_common_rt_mmc_command( tvb, pinfo, command_tree, offset, data_len );
4197 break;
4198 case RTP_MIDI_SYSEX_COMMON_RT_MIDI_MACHINE_CONTROL_RESPONSE:
4199 ext_consumed = decode_sysex_common_rt_mmc_response( tvb, pinfo, command_tree, offset, data_len );
4200 break;
4201 case RTP_MIDI_SYSEX_COMMON_RT_MIDI_TUNING_STANDARD:
4202 ext_consumed = decode_sysex_common_tuning( tvb, pinfo, command_tree, offset, data_len );
4203 break;
4206 if ( ext_consumed < 0 ) {
4207 return -1;
4210 /* set our pointers correct to move past already decoded data */
4211 offset += ext_consumed;
4212 data_len -= ext_consumed;
4213 consumed += ext_consumed;
4215 if ( data_len > 0 ) {
4216 proto_tree_add_item( command_tree, hf_rtp_midi_unknown_data, tvb, offset, data_len, ENC_NA );
4217 consumed += data_len;
4220 return consumed;
4225 * Here a Sysex-Common Educational command is decoded.
4226 * According to the MIDI-specification, this should never be found "in the wild".
4227 * We don't know what this data encodes, so we just dump it.
4229 static unsigned int
4230 decode_sysex_common_educational( tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int offset, unsigned int data_len ) {
4231 proto_tree *command_tree;
4232 int consumed = 0;
4234 if ( data_len < 1 )
4235 return consumed;
4237 command_tree = proto_tree_add_subtree(tree, tvb, offset, data_len, ett_rtp_midi_sysex_edu, NULL, RTP_MIDI_TREE_NAME_COMMAND_SYSEX_EDU );
4238 proto_tree_add_item( command_tree, hf_rtp_midi_edu_data, tvb, offset, data_len, ENC_NA );
4240 /* We consumed everything */
4241 return data_len;
4245 * Here a Sysex-Common Manufacturer command is decoded.
4246 * We don't know what this data encodes, so we just dump it.
4248 static unsigned int
4249 decode_sysex_common_manufacturer( tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int offset, unsigned int data_len, unsigned int manu_code _U_) {
4250 proto_tree *command_tree;
4251 int consumed = 0;
4253 if ( data_len < 1 )
4254 return consumed;
4256 /* Instead of dumping, at this point we could implement to start manufacturer-specific decoding
4257 * of the sysex-data...
4260 command_tree = proto_tree_add_subtree(tree, tvb, offset, data_len, ett_rtp_midi_sysex_manu, NULL, RTP_MIDI_TREE_NAME_COMMAND_SYSEX_MANU );
4262 proto_tree_add_item( command_tree, hf_rtp_midi_manu_data, tvb, offset, data_len, ENC_NA );
4264 /* We consumed everything */
4265 return data_len;
4271 * Here a Sysex-Start command is decoded.
4273 static unsigned int
4274 decode_sysex_start(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int cmd_count, unsigned int offset, unsigned int cmd_len ) {
4275 const char *status_str;
4276 proto_tree *command_tree;
4277 int consumed = 0;
4278 int data_len;
4279 int ext_consumed = 0;
4281 status_str = val_to_str( RTP_MIDI_STATUS_COMMON_SYSEX_END, rtp_midi_common_status, rtp_midi_unknown_value_hex );
4283 /* we need to parse "away" data until the next command */
4284 while ( cmd_len ) {
4285 uint8_t octet;
4286 octet = tvb_get_uint8( tvb, offset + consumed );
4287 consumed++;
4290 * lets check if we have a "normal" end -
4291 * if so, the last status-byte is consumed
4292 * as it belongs to the message
4294 if ( octet == RTP_MIDI_STATUS_COMMON_SYSEX_END ) {
4295 status_str = rtp_midi_common_status_sysex_segment_complete;
4296 } else if ( octet == RTP_MIDI_STATUS_COMMON_SYSEX_START ) {
4297 status_str = rtp_midi_common_status_sysex_segment_start;
4298 } else if ( octet == RTP_MIDI_STATUS_COMMON_UNDEFINED_F4 ) {
4299 status_str = rtp_midi_common_status_sysex_cancel;
4302 /* Is this command through? */
4303 if ( octet & RTP_MIDI_COMMAND_STATUS_FLAG ) {
4304 break;
4308 /* the unknown data we have does not include the trailing status-command */
4309 data_len = consumed - 1;
4311 command_tree = proto_tree_add_subtree(tree, tvb, offset - 1, 1 + consumed, ett_rtp_midi_command, NULL, status_str );
4312 proto_tree_add_item( command_tree, hf_rtp_midi_common_status, tvb, offset - 1, 1, ENC_BIG_ENDIAN );
4314 /* lets see if we have enough data for the sysex-id */
4315 if ( data_len > 1 ) {
4316 uint8_t manu_short;
4317 uint16_t manufacturer;
4318 manufacturer = tvb_get_uint8( tvb, offset );
4319 proto_tree_add_item( command_tree, hf_rtp_midi_manu_short, tvb, offset, 1, ENC_BIG_ENDIAN );
4320 manu_short = tvb_get_uint8( tvb, offset );
4321 offset++;
4322 data_len--;
4324 switch( manu_short ) {
4325 case RTP_MIDI_MANU_SHORT_NON_REALTIME_UNIVERSAL:
4326 ext_consumed = decode_sysex_common_nrt( tvb, pinfo, command_tree, offset, data_len );
4327 break;
4328 case RTP_MIDI_MANU_SHORT_REALTIME_UNIVERSAL:
4329 ext_consumed = decode_sysex_common_rt( tvb, pinfo, command_tree, offset, data_len );
4330 break;
4331 case RTP_MIDI_MANU_SHORT_EDUCATIONAL_USE:
4332 ext_consumed = decode_sysex_common_educational( tvb, pinfo, command_tree, offset, data_len );
4333 break;
4334 case RTP_MIDI_MANU_SHORT_ISLONG:
4335 /* lets see if we have enough data to decode a long sysex-id and if we have a long id at all */
4336 if ( data_len > 2 ) {
4337 manufacturer = tvb_get_ntohs( tvb, offset );
4338 proto_tree_add_item( command_tree, hf_rtp_midi_manu_long, tvb, offset, 2, ENC_BIG_ENDIAN );
4339 offset += 2 ;
4340 data_len -= 2;
4341 ext_consumed = decode_sysex_common_manufacturer( tvb, pinfo, command_tree, offset, data_len, manufacturer );
4342 } else {
4343 ext_consumed = -1;
4345 break;
4346 default:
4347 ext_consumed = decode_sysex_common_manufacturer( tvb, pinfo, command_tree, offset, data_len, manufacturer );
4348 break;
4352 if ( ext_consumed < 0 ) {
4353 return -1;
4356 /* set our pointers correct to move past already decoded data */
4357 offset += ext_consumed;
4359 proto_tree_add_item( command_tree, hf_rtp_midi_common_status, tvb, offset, 1, ENC_BIG_ENDIAN );
4361 if ( cmd_count ) {
4362 col_append_fstr(pinfo->cinfo, COL_INFO,", %s", status_str );
4363 } else {
4364 col_append_str(pinfo->cinfo, COL_INFO, status_str );
4367 return consumed;
4371 * Here the MIDI-Time-Code (MTC) Quarter Frame command is decoded.
4373 static int
4374 decode_mtc_quarter_frame(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int cmd_count, unsigned int offset) {
4375 const char *status_str;
4376 proto_tree *command_tree;
4378 status_str = val_to_str( RTP_MIDI_STATUS_COMMON_MTC_QUARTER_FRAME, rtp_midi_common_status, rtp_midi_unknown_value_hex );
4380 command_tree = proto_tree_add_subtree(tree, tvb, offset - 1, 2, ett_rtp_midi_command, NULL, status_str );
4381 proto_tree_add_item( command_tree, hf_rtp_midi_common_status, tvb, offset - 1, 1, ENC_BIG_ENDIAN );
4382 proto_tree_add_item( command_tree, hf_rtp_midi_quarter_frame_type, tvb, offset, 1, ENC_BIG_ENDIAN );
4383 proto_tree_add_item( command_tree, hf_rtp_midi_quarter_frame_value, tvb, offset + 1, 1, ENC_BIG_ENDIAN );
4385 if ( cmd_count ) {
4386 col_append_fstr(pinfo->cinfo, COL_INFO, ", %s", status_str );
4387 } else {
4388 col_append_str(pinfo->cinfo, COL_INFO, status_str );
4390 return 1;
4394 * Here the Song Position Pointer command is decoded.
4396 static int
4397 decode_song_position_pointer(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int cmd_count, unsigned int offset) {
4398 uint8_t octet1;
4399 uint8_t octet2;
4400 uint8_t position;
4401 const char *status_str;
4402 proto_tree *command_tree;
4404 status_str = val_to_str( RTP_MIDI_STATUS_COMMON_SONG_POSITION_POINTER, rtp_midi_common_status, rtp_midi_unknown_value_hex );
4405 octet1 = tvb_get_uint8( tvb, offset );
4406 octet2 = tvb_get_uint8( tvb, offset + 1 );
4407 position = ( octet1 << 7 ) | octet2;
4409 command_tree = proto_tree_add_subtree_format(tree, tvb, offset - 1, 3, ett_rtp_midi_command, NULL, "%s (p=%d)", status_str, position );
4410 proto_tree_add_item( command_tree, hf_rtp_midi_common_status, tvb, offset - 1, 1, ENC_BIG_ENDIAN );
4411 proto_tree_add_item( command_tree, hf_rtp_midi_spp, tvb, offset, 2, ENC_BIG_ENDIAN );
4413 if ( cmd_count ) {
4414 col_append_fstr(pinfo->cinfo, COL_INFO,", %s (p=%d)", status_str, position );
4415 } else {
4416 col_append_fstr(pinfo->cinfo, COL_INFO, "%s (p=%d)", status_str, position );
4418 return 2;
4422 * Here a Song-Select command is decoded.
4424 static int
4425 decode_song_select(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int cmd_count, unsigned int offset) {
4426 uint8_t song_nr;
4427 const char *status_str;
4428 proto_tree *command_tree;
4430 status_str = val_to_str( RTP_MIDI_STATUS_COMMON_SONG_SELECT, rtp_midi_common_status, rtp_midi_unknown_value_hex );
4431 song_nr = tvb_get_uint8( tvb, offset );
4433 command_tree = proto_tree_add_subtree_format(tree, tvb, offset - 1, 2, ett_rtp_midi_command, NULL, "%s (s=%d)", status_str, song_nr );
4434 proto_tree_add_item( command_tree, hf_rtp_midi_common_status, tvb, offset - 1, 1, ENC_BIG_ENDIAN );
4435 proto_tree_add_item( command_tree, hf_rtp_midi_song_select, tvb, offset, 1, ENC_BIG_ENDIAN );
4437 if ( cmd_count ) {
4438 col_append_fstr(pinfo->cinfo, COL_INFO,", %s (s=%d)", status_str, song_nr );
4439 } else {
4440 col_append_fstr(pinfo->cinfo, COL_INFO, "%s (s=%d)", status_str, song_nr );
4442 return 1;
4446 * Here the undefined common-command 0xf4 is decoded.
4448 static int
4449 decode_undefined_f4(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int cmd_count, unsigned int offset, unsigned int cmd_len ) {
4450 const char *status_str;
4451 proto_tree *command_tree;
4452 int consumed = 0;
4454 status_str = val_to_str( RTP_MIDI_STATUS_COMMON_UNDEFINED_F4, rtp_midi_common_status, rtp_midi_unknown_value_hex );
4456 /* we need to parse "away" data until the next command */
4457 while ( cmd_len ) {
4458 uint8_t octet;
4459 octet = tvb_get_uint8( tvb, offset + consumed );
4460 consumed++;
4462 /* Is this command through? */
4463 if ( octet & RTP_MIDI_COMMAND_STATUS_FLAG ) {
4464 break;
4468 command_tree = proto_tree_add_subtree(tree, tvb, offset - 1, 1 + consumed, ett_rtp_midi_command, NULL, status_str );
4469 proto_tree_add_item( command_tree, hf_rtp_midi_common_status, tvb, offset - 1, 1, ENC_BIG_ENDIAN );
4470 /* just add the unknown data to the tree */
4471 proto_tree_add_item( command_tree, hf_rtp_midi_unknown_data, tvb, offset, consumed, ENC_NA );
4472 proto_tree_add_item( command_tree, hf_rtp_midi_common_status, tvb, offset + consumed - 1, 1, ENC_BIG_ENDIAN );
4474 if ( cmd_count ) {
4475 col_append_fstr(pinfo->cinfo, COL_INFO,", %s", status_str );
4476 } else {
4477 col_append_str(pinfo->cinfo, COL_INFO, status_str );
4479 return consumed;
4483 * Here the undefined common-command 0xf5 is decoded.
4485 static int
4486 decode_undefined_f5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int cmd_count, unsigned int offset, unsigned int cmd_len ) {
4487 const char *status_str;
4488 proto_tree *command_tree;
4489 int consumed = 0;
4491 status_str = val_to_str( RTP_MIDI_STATUS_COMMON_UNDEFINED_F5, rtp_midi_common_status, rtp_midi_unknown_value_hex );
4493 /* we need to parse "away" data until the next command */
4494 while ( cmd_len ) {
4495 uint8_t octet;
4496 octet = tvb_get_uint8( tvb, offset + consumed );
4497 consumed++;
4498 /* Is this command done? */
4499 if ( octet & RTP_MIDI_COMMAND_STATUS_FLAG ) {
4500 break;
4504 command_tree = proto_tree_add_subtree(tree, tvb, offset - 1, 1 + consumed, ett_rtp_midi_command, NULL, status_str );
4505 proto_tree_add_item( command_tree, hf_rtp_midi_common_status, tvb, offset - 1, 1, ENC_BIG_ENDIAN );
4506 /* just add the unknown data to the tree */
4507 proto_tree_add_item( command_tree, hf_rtp_midi_unknown_data, tvb, offset, consumed, ENC_NA );
4508 proto_tree_add_item( command_tree, hf_rtp_midi_common_status, tvb, offset + consumed - 1, 1, ENC_BIG_ENDIAN );
4510 if ( cmd_count ) {
4511 col_append_fstr(pinfo->cinfo, COL_INFO,", %s", status_str );
4512 } else {
4513 col_append_str(pinfo->cinfo, COL_INFO, status_str );
4515 return consumed;
4519 * Here a Tune-Request command is decoded.
4521 static int
4522 decode_tune_request(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int cmd_count, unsigned int offset, unsigned int cmd_len _U_ ) {
4523 const char *status_str;
4524 proto_tree *command_tree;
4526 status_str = val_to_str( RTP_MIDI_STATUS_COMMON_TUNE_REQUEST, rtp_midi_common_status, rtp_midi_unknown_value_hex );
4527 command_tree = proto_tree_add_subtree(tree, tvb, offset - 1, 1, ett_rtp_midi_command, NULL, status_str );
4528 proto_tree_add_item( command_tree, hf_rtp_midi_common_status, tvb, offset - 1, 1, ENC_BIG_ENDIAN );
4530 if ( cmd_count ) {
4531 col_append_fstr(pinfo->cinfo, COL_INFO,", %s)", status_str );
4532 } else {
4533 col_append_str(pinfo->cinfo, COL_INFO, status_str );
4535 return 0;
4539 * Here a Sysex-End command is decoded - in RTP-MIDI this has a special semantic, it either starts a segmented Sysex-frame or a Sysex-Cancel
4541 static int
4542 decode_sysex_end(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int cmd_count, unsigned int offset, unsigned int cmd_len ) {
4543 const char *status_str;
4544 proto_tree *command_tree;
4545 int consumed = 0;
4547 status_str = val_to_str( RTP_MIDI_STATUS_COMMON_SYSEX_END, rtp_midi_common_status, rtp_midi_unknown_value_hex );
4549 /* we need to parse "away" data until the next command */
4550 while ( cmd_len ) {
4551 uint8_t octet;
4552 octet = tvb_get_uint8( tvb, offset + consumed );
4553 consumed++;
4556 * lets check if we have a "normal" end -
4557 * if so, the last status-byte is consumed
4558 * as it belongs to the message
4560 if ( octet == RTP_MIDI_STATUS_COMMON_SYSEX_END ) {
4561 status_str = rtp_midi_common_status_sysex_segment_end;
4562 } else if ( octet == RTP_MIDI_STATUS_COMMON_SYSEX_START ) {
4563 status_str = rtp_midi_common_status_sysex_segment;
4564 } else if ( octet == RTP_MIDI_STATUS_COMMON_UNDEFINED_F4 ) {
4565 status_str = rtp_midi_common_status_sysex_cancel;
4568 /* Is this command through? */
4569 if ( octet & RTP_MIDI_COMMAND_STATUS_FLAG ) {
4570 break;
4574 command_tree = proto_tree_add_subtree(tree, tvb, offset - 1, 1 + consumed, ett_rtp_midi_command, NULL, status_str );
4575 proto_tree_add_item( command_tree, hf_rtp_midi_common_status, tvb, offset - 1, 1, ENC_BIG_ENDIAN );
4576 proto_tree_add_item( command_tree, hf_rtp_midi_unknown_data, tvb, offset, consumed - 1, ENC_NA );
4577 proto_tree_add_item( command_tree, hf_rtp_midi_common_status, tvb, offset + consumed - 1, 1, ENC_BIG_ENDIAN );
4580 if ( cmd_count ) {
4581 col_append_fstr(pinfo->cinfo, COL_INFO,", %s", status_str );
4582 } else {
4583 col_append_str(pinfo->cinfo, COL_INFO, status_str );
4586 return consumed;
4592 * Here each single MIDI-command is decoded.
4593 * The Status-octet is read and then the decoding
4594 * of the individual MIDI-commands is punted to
4595 * external decoders.
4598 static int
4599 decodemidi(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int cmd_count, unsigned int offset, unsigned int cmd_len, uint8_t *runningstatus, unsigned int *rsoffset )
4601 int consumed = 0;
4602 int ext_consumed = 0;
4603 uint8_t octet;
4604 bool using_rs;
4607 #if 0
4608 uint8_t octet2;
4609 uint8_t octet3;
4610 uint8_t cmd;
4611 uint8_t channel;
4612 proto_tree *sysexdata_tree = NULL;
4613 bool foundend;
4614 uint16_t wordvalue;
4615 char helptext[200];
4616 char entry[200];
4617 char segtype[200];
4618 uint8_t manu1;
4619 uint16_t manu2;
4620 uint8_t subid1;
4621 uint8_t subid2;
4622 uint8_t sysexchan;
4623 unsigned int helpoffset;
4624 #endif
4626 octet = tvb_get_uint8( tvb, offset );
4628 /* midi realtime-data -> one octet -- unlike serial-wired MIDI realtime-commands in RTP-MIDI will
4629 * not be intermingled with other MIDI-commands, so we handle this case right here and return */
4630 if ( octet >= 0xf8 ) {
4631 proto_tree *command_tree;
4632 const char *valstr;
4634 valstr = val_to_str( octet, rtp_midi_common_status, rtp_midi_unknown_value_hex );
4635 command_tree = proto_tree_add_subtree(tree, tvb, offset, 1, ett_rtp_midi_command, NULL, valstr );
4636 proto_tree_add_item( command_tree, hf_rtp_midi_common_status, tvb, offset, 1, ENC_BIG_ENDIAN );
4638 if ( cmd_count ) {
4639 col_add_fstr(pinfo->cinfo, COL_INFO,", %s", valstr );
4640 } else {
4641 col_add_str(pinfo->cinfo, COL_INFO, valstr );
4643 return 1;
4648 /* see if this first octet is a status message */
4649 if ( ( octet & RTP_MIDI_COMMAND_STATUS_FLAG ) == 0 ) {
4650 /* if we have no running status yet -> error */
4651 if ( ( ( *runningstatus ) & RTP_MIDI_COMMAND_STATUS_FLAG ) == 0 ) {
4652 return -1;
4654 /* our first octet is "virtual" coming from a preceding MIDI-command,
4655 * so actually we have not really consumed anything yet */
4656 octet = *runningstatus;
4657 using_rs = true;
4658 } else {
4659 /* We have a "real" status-byte */
4660 using_rs = false;
4662 /* Let's see how this octet influences our running-status */
4663 /* if we have a "normal" MIDI-command then the new status replaces the current running-status */
4664 if ( octet < 0xf0 ) {
4665 *rsoffset = offset ;
4666 *runningstatus = octet;
4667 } else {
4668 /* system-realtime-commands maintain the current running-status
4669 * other system-commands clear the running-status, since we
4670 * already handled realtime, we can reset it here */
4671 *runningstatus = 0;
4674 /* lets update our pointers */
4675 consumed++;
4676 cmd_len--;
4677 offset++;
4683 /* non-system MIDI-commands encode the command in the high nibble and the channel
4684 * in the low nibble - so we will take care of those cases next */
4686 if ( octet < 0xf0 ) {
4687 switch ( octet >> 4 ) {
4688 case RTP_MIDI_STATUS_CHANNEL_NOTE_OFF:
4689 ext_consumed = decode_note_off( tvb, pinfo, tree, cmd_count, offset, octet, *rsoffset, using_rs );
4690 break;
4691 case RTP_MIDI_STATUS_CHANNEL_NOTE_ON:
4692 ext_consumed = decode_note_on( tvb, pinfo, tree, cmd_count, offset, octet, *rsoffset, using_rs );
4693 break;
4694 case RTP_MIDI_STATUS_CHANNEL_POLYPHONIC_KEY_PRESSURE:
4695 ext_consumed = decode_poly_pressure(tvb, pinfo, tree, cmd_count, offset, octet, *rsoffset, using_rs );
4696 break;
4697 case RTP_MIDI_STATUS_CHANNEL_CONTROL_CHANGE:
4698 ext_consumed = decode_control_change(tvb, pinfo, tree, cmd_count, offset, octet, *rsoffset, using_rs );
4699 break;
4700 case RTP_MIDI_STATUS_CHANNEL_PROGRAM_CHANGE:
4701 ext_consumed = decode_program_change(tvb, pinfo, tree, cmd_count, offset, octet, *rsoffset, using_rs );
4702 break;
4703 case RTP_MIDI_STATUS_CHANNEL_CHANNEL_PRESSURE:
4704 ext_consumed = decode_channel_pressure(tvb, pinfo, tree, cmd_count, offset, octet, *rsoffset, using_rs );
4705 break;
4706 case RTP_MIDI_STATUS_CHANNEL_PITCH_BEND_CHANGE:
4707 ext_consumed = decode_pitch_bend_change(tvb, pinfo, tree, cmd_count, offset, octet, *rsoffset, using_rs );
4708 break;
4710 /* external decoder informed us of error -> pass this through */
4711 if ( ext_consumed < 0 ) {
4712 return ext_consumed;
4714 return consumed + ext_consumed;
4717 /* Here we catch the remaining system-common commands */
4718 switch ( octet ) {
4719 case RTP_MIDI_STATUS_COMMON_SYSEX_START:
4720 ext_consumed = decode_sysex_start( tvb, pinfo, tree, cmd_count, offset, cmd_len );
4721 break;
4722 case RTP_MIDI_STATUS_COMMON_MTC_QUARTER_FRAME:
4723 ext_consumed = decode_mtc_quarter_frame( tvb, pinfo, tree, cmd_count, offset);
4724 break;
4725 case RTP_MIDI_STATUS_COMMON_SONG_POSITION_POINTER:
4726 ext_consumed = decode_song_position_pointer( tvb, pinfo, tree, cmd_count, offset);
4727 break;
4728 case RTP_MIDI_STATUS_COMMON_SONG_SELECT:
4729 ext_consumed = decode_song_select( tvb, pinfo, tree, cmd_count, offset);
4730 break;
4731 case RTP_MIDI_STATUS_COMMON_UNDEFINED_F4:
4732 ext_consumed = decode_undefined_f4( tvb, pinfo, tree, cmd_count, offset, cmd_len );
4733 break;
4734 case RTP_MIDI_STATUS_COMMON_UNDEFINED_F5:
4735 ext_consumed = decode_undefined_f5( tvb, pinfo, tree, cmd_count, offset, cmd_len );
4736 break;
4737 case RTP_MIDI_STATUS_COMMON_TUNE_REQUEST:
4738 ext_consumed = decode_tune_request( tvb, pinfo, tree, cmd_count, offset, cmd_len );
4739 break;
4740 case RTP_MIDI_STATUS_COMMON_SYSEX_END:
4741 ext_consumed = decode_sysex_end( tvb, pinfo, tree, cmd_count, offset, cmd_len );
4742 break;
4744 /* external decoder informed us of error -> pass this through */
4745 if ( ext_consumed < 0 ) {
4746 return ext_consumed;
4748 return consumed + ext_consumed;
4754 * Here the chapter c of the channel-journal is decoded.
4756 static int
4757 decode_cj_chapter_c( tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int offset ) {
4758 proto_tree *rtp_midi_cj_chapter_tree;
4759 proto_tree *rtp_midi_loglist_tree;
4760 proto_tree *loglist_tree;
4761 unsigned int start_offset = offset;
4762 uint8_t octet;
4763 int count;
4764 int i;
4766 octet = tvb_get_uint8( tvb, offset );
4767 count = octet & 0x7f;
4769 /* count encoded is n+1 */
4770 count++;
4772 rtp_midi_cj_chapter_tree = proto_tree_add_subtree( tree, tvb, offset, 1 + 2 * count,
4773 ett_rtp_midi_cj_chapter_c, NULL, RTP_MIDI_TREE_NAME_CJ_CHAPTER_C );
4775 proto_tree_add_item( rtp_midi_cj_chapter_tree, hf_rtp_midi_cj_chapter_c_sflag, tvb, offset, 1, ENC_BIG_ENDIAN );
4776 proto_tree_add_item( rtp_midi_cj_chapter_tree, hf_rtp_midi_cj_chapter_c_length, tvb, offset, 1, ENC_BIG_ENDIAN );
4778 offset++;
4780 rtp_midi_loglist_tree = proto_tree_add_subtree( rtp_midi_cj_chapter_tree, tvb, offset, count * 2,
4781 ett_rtp_midi_cj_chapter_c_loglist, NULL, RTP_MIDI_TREE_NAME_CJ_CHAPTER_C_LOGLIST );
4783 for ( i = 0; i < count; i++ ) {
4785 loglist_tree = proto_tree_add_subtree(rtp_midi_loglist_tree, tvb, offset, 2,
4786 ett_rtp_midi_cj_chapter_c_logitem, NULL, RTP_MIDI_TREE_NAME_CJ_CHAPTER_C_LOGITEM );
4788 proto_tree_add_item(loglist_tree, hf_rtp_midi_cj_chapter_c_sflag, tvb, offset, 1, ENC_BIG_ENDIAN );
4789 proto_tree_add_item(loglist_tree, hf_rtp_midi_cj_chapter_c_number, tvb, offset, 1, ENC_BIG_ENDIAN );
4791 offset++;
4793 octet = tvb_get_uint8( tvb, offset );
4794 proto_tree_add_item(loglist_tree, hf_rtp_midi_cj_chapter_c_aflag, tvb, offset, 1, ENC_BIG_ENDIAN );
4796 /* do we have a value or alternative coding? */
4797 if ( octet & 0x80 ) {
4798 proto_tree_add_item(loglist_tree, hf_rtp_midi_cj_chapter_c_tflag, tvb, offset, 1, ENC_BIG_ENDIAN );
4799 proto_tree_add_item(loglist_tree, hf_rtp_midi_cj_chapter_c_alt, tvb, offset, 1, ENC_BIG_ENDIAN );
4800 } else {
4801 proto_tree_add_item(loglist_tree, hf_rtp_midi_cj_chapter_c_value, tvb, offset, 1, ENC_BIG_ENDIAN );
4804 offset++;
4806 return offset-start_offset;
4812 * Here the chapter m of the channel-journal is decoded, possibly the most complex part of the RTP-MIDI stuff ;-)
4814 static int
4815 decode_cj_chapter_m( tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int offset ) {
4816 proto_tree *rtp_midi_cj_chapter_tree;
4817 proto_tree *rtp_midi_loglist_tree;
4818 proto_tree *rtp_midi_loglist_item_tree;
4819 uint16_t header;
4820 uint8_t logitemheader;
4821 int length;
4822 int logitemhdrlen;
4823 int logitemlen;
4824 bool no_pnum_msb;
4825 unsigned int start_offset = offset;
4827 /* first we need to get the flags & length of this chapter */
4828 header = tvb_get_ntohs( tvb, offset );
4829 length = header & RTP_MIDI_CJ_CHAPTER_M_MASK_LENGTH;
4830 /* take of length of header */
4831 length -= 2;
4833 rtp_midi_cj_chapter_tree = proto_tree_add_subtree( tree, tvb, offset, length, ett_rtp_midi_cj_chapter_m, NULL, RTP_MIDI_TREE_NAME_CJ_CHAPTER_M );
4835 proto_tree_add_item( rtp_midi_cj_chapter_tree, hf_rtp_midi_cj_chapter_m_sflag, tvb, offset, 2, ENC_BIG_ENDIAN );
4836 proto_tree_add_item( rtp_midi_cj_chapter_tree, hf_rtp_midi_cj_chapter_m_pflag, tvb, offset, 2, ENC_BIG_ENDIAN );
4837 proto_tree_add_item( rtp_midi_cj_chapter_tree, hf_rtp_midi_cj_chapter_m_eflag, tvb, offset, 2, ENC_BIG_ENDIAN );
4838 proto_tree_add_item( rtp_midi_cj_chapter_tree, hf_rtp_midi_cj_chapter_m_uflag, tvb, offset, 2, ENC_BIG_ENDIAN );
4839 proto_tree_add_item( rtp_midi_cj_chapter_tree, hf_rtp_midi_cj_chapter_m_wflag, tvb, offset, 2, ENC_BIG_ENDIAN );
4840 proto_tree_add_item( rtp_midi_cj_chapter_tree, hf_rtp_midi_cj_chapter_m_zflag, tvb, offset, 2, ENC_BIG_ENDIAN );
4841 proto_tree_add_item( rtp_midi_cj_chapter_tree, hf_rtp_midi_cj_chapter_m_length, tvb, offset, 2, ENC_BIG_ENDIAN );
4843 /* done with header */
4844 offset += 2;
4846 /* do we have the pending field? */
4847 if ( header & 0x4000 ) {
4849 proto_tree_add_item( rtp_midi_cj_chapter_tree, hf_rtp_midi_cj_chapter_m_qflag, tvb, offset, 1, ENC_BIG_ENDIAN );
4850 proto_tree_add_item( rtp_midi_cj_chapter_tree, hf_rtp_midi_cj_chapter_m_pending, tvb, offset, 1, ENC_BIG_ENDIAN );
4852 offset++;
4856 * lets find out if we need to decode the pnum_msb:
4857 * if Z = 1 and either U = 1 or W = 1 we don't
4859 no_pnum_msb = ( header & 0x0400 ) && ( ( header & 0x0800 ) || ( header & 0x1000 ) );
4860 logitemhdrlen = no_pnum_msb ? 2 : 3;
4862 rtp_midi_loglist_tree = proto_tree_add_subtree( rtp_midi_cj_chapter_tree, tvb, offset, length, ett_rtp_midi_cj_chapter_m_loglist, NULL, RTP_MIDI_TREE_NAME_CJ_CHAPTER_M_LOGLIST );
4864 /* lets step through the loglist */
4865 while ( length > 0 ) {
4867 if ( no_pnum_msb ) {
4868 logitemheader = tvb_get_uint8( tvb, offset + 1 );
4869 } else {
4870 logitemheader = tvb_get_uint8( tvb, offset + 2 );
4873 logitemlen = logitemhdrlen;
4875 /* do we have a msb field? */
4876 if ( logitemheader & RTP_MIDI_CJ_CHAPTER_M_FLAG_J ) {
4877 logitemlen++;
4880 /* do we have a lsb field? */
4881 if ( logitemheader & RTP_MIDI_CJ_CHAPTER_M_FLAG_K ) {
4882 logitemlen++;
4885 /* do we have an a-button field? */
4886 if ( logitemheader & RTP_MIDI_CJ_CHAPTER_M_FLAG_L ) {
4887 logitemlen +=2;
4890 /* do we have a c-button field? */
4891 if ( logitemheader & RTP_MIDI_CJ_CHAPTER_M_FLAG_M ) {
4892 logitemlen +=2;
4895 /* do we have a count field? */
4896 if ( logitemheader & RTP_MIDI_CJ_CHAPTER_M_FLAG_N ) {
4897 logitemlen++;
4900 /* now that we have the length of the logitem, we can create the tree... */
4901 rtp_midi_loglist_item_tree = proto_tree_add_subtree( rtp_midi_loglist_tree, tvb, offset, logitemlen,
4902 ett_rtp_midi_cj_chapter_m_logitem, NULL, RTP_MIDI_TREE_NAME_CJ_CHAPTER_M_LOGITEM );
4904 proto_tree_add_item( rtp_midi_loglist_item_tree, hf_rtp_midi_cj_chapter_m_log_sflag, tvb, offset, 1, ENC_BIG_ENDIAN );
4905 proto_tree_add_item( rtp_midi_loglist_item_tree, hf_rtp_midi_cj_chapter_m_log_pnum_lsb, tvb, offset, 1, ENC_BIG_ENDIAN );
4906 offset++;
4907 length--;
4909 /* if we have the msb, we need to decode it */
4910 if ( !no_pnum_msb ) {
4911 proto_tree_add_item( rtp_midi_loglist_item_tree, hf_rtp_midi_cj_chapter_m_log_qflag, tvb, offset, 1, ENC_BIG_ENDIAN );
4912 proto_tree_add_item( rtp_midi_loglist_item_tree, hf_rtp_midi_cj_chapter_m_log_pnum_msb, tvb, offset, 1, ENC_BIG_ENDIAN );
4913 offset++;
4914 length--;
4917 proto_tree_add_item( rtp_midi_loglist_item_tree, hf_rtp_midi_cj_chapter_m_log_jflag, tvb, offset, 1, ENC_BIG_ENDIAN );
4918 proto_tree_add_item( rtp_midi_loglist_item_tree, hf_rtp_midi_cj_chapter_m_log_kflag, tvb, offset, 1, ENC_BIG_ENDIAN );
4919 proto_tree_add_item( rtp_midi_loglist_item_tree, hf_rtp_midi_cj_chapter_m_log_lflag, tvb, offset, 1, ENC_BIG_ENDIAN );
4920 proto_tree_add_item( rtp_midi_loglist_item_tree, hf_rtp_midi_cj_chapter_m_log_mflag, tvb, offset, 1, ENC_BIG_ENDIAN );
4921 proto_tree_add_item( rtp_midi_loglist_item_tree, hf_rtp_midi_cj_chapter_m_log_nflag, tvb, offset, 1, ENC_BIG_ENDIAN );
4922 proto_tree_add_item( rtp_midi_loglist_item_tree, hf_rtp_midi_cj_chapter_m_log_tflag, tvb, offset, 1, ENC_BIG_ENDIAN );
4923 proto_tree_add_item( rtp_midi_loglist_item_tree, hf_rtp_midi_cj_chapter_m_log_vflag, tvb, offset, 1, ENC_BIG_ENDIAN );
4924 proto_tree_add_item( rtp_midi_loglist_item_tree, hf_rtp_midi_cj_chapter_m_log_rflag, tvb, offset, 1, ENC_BIG_ENDIAN );
4925 offset++;
4926 length--;
4928 /* do we have a entry-msb field? */
4929 if ( logitemheader & RTP_MIDI_CJ_CHAPTER_M_FLAG_J ) {
4930 static int * const msb_flags[] = {
4931 &hf_rtp_midi_cj_chapter_m_log_msb_x,
4932 &hf_rtp_midi_cj_chapter_m_log_msb,
4933 NULL
4936 proto_tree_add_bitmask(rtp_midi_loglist_tree, tvb, offset, hf_rtp_midi_cj_chapter_m_log_msb_entry, ett_rtp_midi_cj_chapter_m_log_msb, msb_flags, ENC_NA);
4938 offset++;
4939 length--;
4942 /* do we have a entry-lsb field? */
4943 if ( logitemheader & RTP_MIDI_CJ_CHAPTER_M_FLAG_K ) {
4944 static int * const lsb_flags[] = {
4945 &hf_rtp_midi_cj_chapter_m_log_lsb_x,
4946 &hf_rtp_midi_cj_chapter_m_log_lsb,
4947 NULL
4950 proto_tree_add_bitmask(rtp_midi_loglist_tree, tvb, offset, hf_rtp_midi_cj_chapter_m_log_lsb_entry, ett_rtp_midi_cj_chapter_m_log_lsb, lsb_flags, ENC_NA);
4951 offset++;
4952 length--;
4955 /* do we have an a-button field? */
4956 if ( logitemheader & RTP_MIDI_CJ_CHAPTER_M_FLAG_L ) {
4957 static int * const button_flags[] = {
4958 &hf_rtp_midi_cj_chapter_m_log_a_button_g,
4959 &hf_rtp_midi_cj_chapter_m_log_a_button_x,
4960 &hf_rtp_midi_cj_chapter_m_log_a_button,
4961 NULL
4964 proto_tree_add_bitmask(rtp_midi_loglist_tree, tvb, offset, hf_rtp_midi_cj_chapter_m_log_a_button_full, ett_rtp_midi_cj_chapter_m_log_a_button, button_flags, ENC_BIG_ENDIAN);
4966 offset += 2;
4967 length -= 2;
4970 /* do we have a c-button field? */
4971 if ( logitemheader & RTP_MIDI_CJ_CHAPTER_M_FLAG_M ) {
4972 static int * const button_flags[] = {
4973 &hf_rtp_midi_cj_chapter_m_log_c_button_g,
4974 &hf_rtp_midi_cj_chapter_m_log_c_button_r,
4975 &hf_rtp_midi_cj_chapter_m_log_c_button,
4976 NULL
4979 proto_tree_add_bitmask(rtp_midi_loglist_tree, tvb, offset, hf_rtp_midi_cj_chapter_m_log_c_button_full, ett_rtp_midi_cj_chapter_m_log_c_button, button_flags, ENC_BIG_ENDIAN);
4981 offset += 2;
4982 length -= 2;
4985 /* do we have a count field? */
4986 if ( logitemheader & RTP_MIDI_CJ_CHAPTER_M_FLAG_N ) {
4987 static int * const log_flags[] = {
4988 &hf_rtp_midi_cj_chapter_m_log_count_x,
4989 &hf_rtp_midi_cj_chapter_m_log_count,
4990 NULL
4993 proto_tree_add_bitmask(rtp_midi_loglist_tree, tvb, offset, hf_rtp_midi_cj_chapter_m_log_count_full, ett_rtp_midi_cj_chapter_m_log_count, log_flags, ENC_BIG_ENDIAN);
4995 offset++;
4996 length--;
5001 return offset-start_offset;
5006 * Here the chapter n of the channel-journal is decoded.
5008 static int
5009 decode_cj_chapter_n( tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int offset ) {
5010 proto_tree *rtp_midi_cj_chapter_tree;
5011 proto_tree *rtp_midi_loglist_tree;
5012 const char *note_str;
5013 unsigned int start_offset = offset;
5014 uint16_t header;
5015 uint8_t note;
5016 uint8_t velocity;
5017 int log_count;
5018 int octet_count;
5019 int low;
5020 int high;
5021 int i;
5023 /* first we need to get the flags & length of this chapter */
5024 header = tvb_get_ntohs( tvb, offset );
5025 log_count = ( header & RTP_MIDI_CJ_CHAPTER_N_MASK_LENGTH ) >> 8;
5026 low = ( header & RTP_MIDI_CJ_CHAPTER_N_MASK_LOW ) >> 4;
5027 high = header & RTP_MIDI_CJ_CHAPTER_N_MASK_HIGH;
5029 /* how many offbits octets do we have? */
5030 if ( low <= high ) {
5031 octet_count = high - low + 1;
5032 } else if ( ( low == 15 ) && ( high == 0 ) ) {
5033 octet_count = 0;
5034 } else if ( ( low == 15 ) && ( high == 1 ) ) {
5035 octet_count = 0;
5036 } else {
5037 return -1;
5040 /* special case -> no offbit octets, but 128 note-logs */
5041 if ( ( log_count == 127 ) && ( low == 15) && ( high == 0 ) ) {
5042 log_count++;
5045 rtp_midi_cj_chapter_tree = proto_tree_add_subtree( tree, tvb, offset, 2 + ( log_count * 2 ) + octet_count,
5046 ett_rtp_midi_cj_chapter_n, NULL, RTP_MIDI_TREE_NAME_CJ_CHAPTER_N );
5048 proto_tree_add_item( rtp_midi_cj_chapter_tree, hf_rtp_midi_cj_chapter_n_bflag, tvb, offset, 2, ENC_BIG_ENDIAN );
5049 proto_tree_add_item( rtp_midi_cj_chapter_tree, hf_rtp_midi_cj_chapter_n_len, tvb, offset, 2, ENC_BIG_ENDIAN );
5050 proto_tree_add_item( rtp_midi_cj_chapter_tree, hf_rtp_midi_cj_chapter_n_low, tvb, offset, 2, ENC_BIG_ENDIAN );
5051 proto_tree_add_item( rtp_midi_cj_chapter_tree, hf_rtp_midi_cj_chapter_n_high, tvb, offset, 2, ENC_BIG_ENDIAN );
5053 offset += 2;
5055 if ( log_count > 0 ) {
5057 rtp_midi_loglist_tree = proto_tree_add_subtree( rtp_midi_cj_chapter_tree, tvb, offset, log_count * 2,
5058 ett_rtp_midi_cj_chapter_n_loglist, NULL, RTP_MIDI_TREE_NAME_CJ_CHAPTER_N_LOGLIST );
5060 for ( i = 0; i < log_count; i++ ) {
5062 note = tvb_get_uint8( tvb, offset ) & 0x7f;
5063 velocity = tvb_get_uint8( tvb, offset + 1 ) & 0x7f;
5065 note_str = val_to_str_ext( note, &rtp_midi_note_values_ext, rtp_midi_unknown_value_dec );
5067 rtp_midi_loglist_tree = proto_tree_add_subtree_format(rtp_midi_loglist_tree, tvb, offset, 2,
5068 ett_rtp_midi_cj_chapter_n_logitem, NULL, "%s (n=%s, v=%d)", RTP_MIDI_TREE_NAME_CJ_CHAPTER_N_LOGITEM, note_str, velocity );
5070 proto_tree_add_item( rtp_midi_loglist_tree, hf_rtp_midi_cj_chapter_n_log_sflag, tvb, offset, 1, ENC_BIG_ENDIAN );
5071 proto_tree_add_item( rtp_midi_loglist_tree, hf_rtp_midi_cj_chapter_n_log_notenum, tvb, offset, 1, ENC_BIG_ENDIAN );
5073 offset++;
5075 proto_tree_add_item( rtp_midi_loglist_tree, hf_rtp_midi_cj_chapter_n_log_yflag, tvb, offset, 1, ENC_BIG_ENDIAN );
5076 proto_tree_add_item( rtp_midi_loglist_tree, hf_rtp_midi_cj_chapter_n_log_velocity, tvb, offset, 1, ENC_BIG_ENDIAN );
5078 offset++;
5083 if ( octet_count > 0 ) {
5085 rtp_midi_loglist_tree = proto_tree_add_subtree( rtp_midi_cj_chapter_tree, tvb, offset, log_count,
5086 ett_rtp_midi_cj_chapter_n_octets, NULL, RTP_MIDI_TREE_NAME_CJ_CHAPTER_N_OCTETS );
5088 for ( i = 0; i < octet_count; i++ ) {
5090 proto_tree_add_item(rtp_midi_loglist_tree, hf_rtp_midi_cj_chapter_n_log_octet, tvb, offset, 1, ENC_BIG_ENDIAN );
5092 offset++;
5096 return offset-start_offset;
5101 * Here the chapter e of the channel-journal is decoded.
5103 static int
5104 decode_cj_chapter_e( tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int offset ) {
5105 proto_tree *rtp_midi_cj_chapter_tree;
5106 proto_tree *rtp_midi_loglist_tree, *log_tree;
5107 const char *note_str;
5108 unsigned int start_offset = offset;
5109 uint8_t header;
5110 uint8_t note;
5111 uint8_t count_vel;
5112 uint8_t octet;
5113 int log_count;
5114 int i;
5116 /* first we need to get the flags & length of this chapter */
5117 header = tvb_get_uint8( tvb, offset );
5118 log_count = header & RTP_MIDI_CJ_CHAPTER_E_MASK_LENGTH;
5120 /* count is encoded n+1 */
5121 log_count++;
5123 rtp_midi_cj_chapter_tree = proto_tree_add_subtree( tree, tvb, offset, 1 + ( log_count * 2 ),
5124 ett_rtp_midi_cj_chapter_e, NULL, RTP_MIDI_TREE_NAME_CJ_CHAPTER_E );
5126 proto_tree_add_item( rtp_midi_cj_chapter_tree, hf_rtp_midi_cj_chapter_e_sflag, tvb, offset, 1, ENC_BIG_ENDIAN );
5127 proto_tree_add_item( rtp_midi_cj_chapter_tree, hf_rtp_midi_cj_chapter_e_len, tvb, offset, 1, ENC_BIG_ENDIAN );
5129 offset++;
5131 rtp_midi_loglist_tree = proto_tree_add_subtree( rtp_midi_cj_chapter_tree, tvb, offset, log_count * 2,
5132 ett_rtp_midi_cj_chapter_e_loglist, NULL, RTP_MIDI_TREE_NAME_CJ_CHAPTER_E_LOGLIST );
5134 for ( i = 0; i < log_count; i++ ) {
5136 note = tvb_get_uint8( tvb, offset ) & 0x7f;
5137 octet = tvb_get_uint8( tvb, offset + 1 );
5138 count_vel = octet & 0x7f;
5140 note_str = val_to_str_ext( note, &rtp_midi_note_values_ext, rtp_midi_unknown_value_dec );
5142 if ( octet & 0x80 ) {
5143 log_tree = proto_tree_add_subtree_format(rtp_midi_loglist_tree, tvb, offset, 2, ett_rtp_midi_cj_chapter_e_logitem, NULL,
5144 "%s (n=%s, v=%d)", RTP_MIDI_TREE_NAME_CJ_CHAPTER_E_LOGITEM1, note_str, count_vel );
5145 } else {
5146 log_tree = proto_tree_add_subtree_format(rtp_midi_loglist_tree, tvb, offset, 2, ett_rtp_midi_cj_chapter_e_logitem, NULL,
5147 "%s (n=%s, c=%d)", RTP_MIDI_TREE_NAME_CJ_CHAPTER_E_LOGITEM2, note_str, count_vel );
5150 proto_tree_add_item( log_tree, hf_rtp_midi_cj_chapter_e_log_sflag, tvb, offset, 1, ENC_BIG_ENDIAN );
5151 proto_tree_add_item( log_tree, hf_rtp_midi_cj_chapter_e_log_notenum, tvb, offset, 1, ENC_BIG_ENDIAN );
5153 offset++;
5155 proto_tree_add_item( log_tree, hf_rtp_midi_cj_chapter_e_log_vflag, tvb, offset, 1, ENC_BIG_ENDIAN );
5156 if ( octet & 0x80 ) {
5157 proto_tree_add_item( log_tree, hf_rtp_midi_cj_chapter_e_log_velocity, tvb, offset, 1, ENC_BIG_ENDIAN );
5158 } else {
5159 proto_tree_add_item( log_tree, hf_rtp_midi_cj_chapter_e_log_count, tvb, offset, 1, ENC_BIG_ENDIAN );
5162 offset++;
5165 return offset-start_offset;
5176 * Here the chapter a of the channel-journal is decoded.
5178 static int
5179 decode_cj_chapter_a( tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int offset ) {
5180 proto_tree *rtp_midi_cj_chapter_tree;
5181 proto_tree *rtp_midi_loglist_tree, *log_tree;
5182 const char *note_str;
5183 unsigned int start_offset = offset;
5184 uint8_t header;
5185 uint8_t note;
5186 uint8_t pressure;
5187 int log_count;
5188 int i;
5190 /* first we need to get the flags & length of this chapter */
5191 header = tvb_get_uint8( tvb, offset );
5192 log_count = header & RTP_MIDI_CJ_CHAPTER_A_MASK_LENGTH;
5194 /* count is encoded n+1 */
5195 log_count++;
5197 rtp_midi_cj_chapter_tree = proto_tree_add_subtree( tree, tvb, offset, 1 + ( log_count * 2 ), ett_rtp_midi_cj_chapter_a, NULL, RTP_MIDI_TREE_NAME_CJ_CHAPTER_A );
5199 proto_tree_add_item( rtp_midi_cj_chapter_tree, hf_rtp_midi_cj_chapter_a_sflag, tvb, offset, 1, ENC_BIG_ENDIAN );
5200 proto_tree_add_item( rtp_midi_cj_chapter_tree, hf_rtp_midi_cj_chapter_a_len, tvb, offset, 1, ENC_BIG_ENDIAN );
5202 offset++;
5204 rtp_midi_loglist_tree = proto_tree_add_subtree( rtp_midi_cj_chapter_tree, tvb, offset, log_count * 2, ett_rtp_midi_cj_chapter_a_loglist, NULL, RTP_MIDI_TREE_NAME_CJ_CHAPTER_A_LOGLIST );
5206 for ( i = 0; i < log_count; i++ ) {
5208 note = tvb_get_uint8( tvb, offset ) & 0x7f;
5209 pressure = tvb_get_uint8( tvb, offset + 1 ) & 0x7f;
5211 note_str = val_to_str_ext( note, &rtp_midi_note_values_ext, rtp_midi_unknown_value_dec );
5213 log_tree = proto_tree_add_subtree_format(rtp_midi_loglist_tree, tvb, offset, 2, ett_rtp_midi_cj_chapter_a_logitem, NULL,
5214 "%s (n=%s, p=%d)", RTP_MIDI_TREE_NAME_CJ_CHAPTER_A_LOGITEM, note_str, pressure );
5216 proto_tree_add_item( log_tree, hf_rtp_midi_cj_chapter_a_log_sflag, tvb, offset, 1, ENC_BIG_ENDIAN );
5217 proto_tree_add_item( log_tree, hf_rtp_midi_cj_chapter_a_log_notenum, tvb, offset, 1, ENC_BIG_ENDIAN );
5219 offset++;
5221 proto_tree_add_item( log_tree, hf_rtp_midi_cj_chapter_a_log_xflag, tvb, offset, 1, ENC_BIG_ENDIAN );
5222 proto_tree_add_item( log_tree, hf_rtp_midi_cj_chapter_a_log_pressure, tvb, offset, 1, ENC_BIG_ENDIAN );
5224 offset++;
5227 return offset-start_offset;
5235 * Here a channel-journal is decoded.
5237 static int
5238 decode_channel_journal( tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int offset ) {
5239 proto_tree *rtp_midi_chanjournal_tree;
5240 proto_tree *rtp_midi_cj_chapters_tree;
5241 proto_tree *rtp_midi_cj_chapter_tree;
5242 uint32_t chanflags;
5243 uint16_t chanjourlen;
5244 int consumed = 0;
5245 int ext_consumed = 0;
5247 /* first we need to get the flags & length of this channel-journal */
5248 chanflags = tvb_get_ntoh24( tvb, offset );
5249 chanjourlen = ( chanflags & RTP_MIDI_CJ_MASK_LENGTH ) >> 8;
5251 rtp_midi_chanjournal_tree = proto_tree_add_subtree( tree, tvb, offset, chanjourlen, ett_rtp_midi_channeljournal, NULL,
5252 val_to_str( ( chanflags & RTP_MIDI_CJ_MASK_CHANNEL ) >> RTP_MIDI_CJ_CHANNEL_SHIFT, rtp_midi_channels, rtp_midi_unknown_value_hex ) );
5254 proto_tree_add_item( rtp_midi_chanjournal_tree, hf_rtp_midi_chanjour_sflag, tvb, offset, 3, ENC_BIG_ENDIAN );
5255 proto_tree_add_item( rtp_midi_chanjournal_tree, hf_rtp_midi_chanjour_chan, tvb, offset, 3, ENC_BIG_ENDIAN );
5256 proto_tree_add_item( rtp_midi_chanjournal_tree, hf_rtp_midi_chanjour_hflag, tvb, offset, 3, ENC_BIG_ENDIAN );
5257 proto_tree_add_item( rtp_midi_chanjournal_tree, hf_rtp_midi_chanjour_len, tvb, offset, 3, ENC_BIG_ENDIAN );
5258 proto_tree_add_item( rtp_midi_chanjournal_tree, hf_rtp_midi_chanjour_toc_p, tvb, offset, 3, ENC_BIG_ENDIAN );
5259 proto_tree_add_item( rtp_midi_chanjournal_tree, hf_rtp_midi_chanjour_toc_c, tvb, offset, 3, ENC_BIG_ENDIAN );
5260 proto_tree_add_item( rtp_midi_chanjournal_tree, hf_rtp_midi_chanjour_toc_m, tvb, offset, 3, ENC_BIG_ENDIAN );
5261 proto_tree_add_item( rtp_midi_chanjournal_tree, hf_rtp_midi_chanjour_toc_w, tvb, offset, 3, ENC_BIG_ENDIAN );
5262 proto_tree_add_item( rtp_midi_chanjournal_tree, hf_rtp_midi_chanjour_toc_n, tvb, offset, 3, ENC_BIG_ENDIAN );
5263 proto_tree_add_item( rtp_midi_chanjournal_tree, hf_rtp_midi_chanjour_toc_e, tvb, offset, 3, ENC_BIG_ENDIAN );
5264 proto_tree_add_item( rtp_midi_chanjournal_tree, hf_rtp_midi_chanjour_toc_t, tvb, offset, 3, ENC_BIG_ENDIAN );
5265 proto_tree_add_item( rtp_midi_chanjournal_tree, hf_rtp_midi_chanjour_toc_a, tvb, offset, 3, ENC_BIG_ENDIAN );
5267 rtp_midi_cj_chapters_tree = proto_tree_add_subtree( rtp_midi_chanjournal_tree, tvb, offset + 3, chanjourlen - 3,
5268 ett_rtp_midi_channelchapters, NULL, RTP_MIDI_TREE_NAME_CHANNEL_CHAPTERS );
5270 /* take care of length of header */
5271 offset += 3;
5272 consumed += 3;
5274 /* Do we have a program change chapter? */
5275 if ( chanflags & RTP_MIDI_CJ_FLAG_P ) {
5277 rtp_midi_cj_chapter_tree = proto_tree_add_subtree( rtp_midi_cj_chapters_tree, tvb, offset, 3,
5278 ett_rtp_midi_cj_chapter_p, NULL, RTP_MIDI_TREE_NAME_CJ_CHAPTER_P );
5280 proto_tree_add_item( rtp_midi_cj_chapter_tree, hf_rtp_midi_cj_chapter_p_sflag, tvb, offset, 1, ENC_BIG_ENDIAN );
5281 proto_tree_add_item( rtp_midi_cj_chapter_tree, hf_rtp_midi_cj_chapter_p_program, tvb, offset, 1, ENC_BIG_ENDIAN );
5282 proto_tree_add_item( rtp_midi_cj_chapter_tree, hf_rtp_midi_cj_chapter_p_bflag, tvb, offset + 1, 1, ENC_BIG_ENDIAN );
5283 proto_tree_add_item( rtp_midi_cj_chapter_tree, hf_rtp_midi_cj_chapter_p_bank_msb, tvb, offset + 1, 1, ENC_BIG_ENDIAN );
5284 proto_tree_add_item( rtp_midi_cj_chapter_tree, hf_rtp_midi_cj_chapter_p_xflag, tvb, offset + 2, 1, ENC_BIG_ENDIAN );
5285 proto_tree_add_item( rtp_midi_cj_chapter_tree, hf_rtp_midi_cj_chapter_p_bank_lsb, tvb, offset + 2, 1, ENC_BIG_ENDIAN );
5287 offset += 3;
5288 consumed += 3;
5291 /* Do we have a control chapter? */
5292 if ( chanflags & RTP_MIDI_CJ_FLAG_C ) {
5293 ext_consumed = decode_cj_chapter_c( tvb, pinfo, rtp_midi_cj_chapters_tree, offset );
5294 if ( ext_consumed < 0 ) {
5295 return ext_consumed;
5297 consumed += ext_consumed;
5298 offset += ext_consumed;
5302 /* Do we have a parameter changes? */
5303 if ( chanflags & RTP_MIDI_CJ_FLAG_M ) {
5304 ext_consumed = decode_cj_chapter_m( tvb, pinfo, rtp_midi_cj_chapters_tree, offset );
5305 if ( ext_consumed < 0 ) {
5306 return ext_consumed;
5308 consumed += ext_consumed;
5309 offset += ext_consumed;
5312 /* Do we have a pitch-wheel chapter? */
5313 if ( chanflags & RTP_MIDI_CJ_FLAG_W ) {
5315 rtp_midi_cj_chapter_tree = proto_tree_add_subtree( rtp_midi_cj_chapters_tree, tvb, offset, 2,
5316 ett_rtp_midi_cj_chapter_w, NULL, RTP_MIDI_TREE_NAME_CJ_CHAPTER_W );
5318 proto_tree_add_item( rtp_midi_cj_chapter_tree, hf_rtp_midi_cj_chapter_w_sflag, tvb, offset, 1, ENC_BIG_ENDIAN );
5319 proto_tree_add_item( rtp_midi_cj_chapter_tree, hf_rtp_midi_cj_chapter_w_first, tvb, offset, 1, ENC_BIG_ENDIAN );
5321 offset++;
5322 consumed++;
5324 proto_tree_add_item( rtp_midi_cj_chapter_tree, hf_rtp_midi_cj_chapter_w_rflag, tvb, offset, 1, ENC_BIG_ENDIAN );
5325 proto_tree_add_item( rtp_midi_cj_chapter_tree, hf_rtp_midi_cj_chapter_w_second, tvb, offset, 1, ENC_BIG_ENDIAN );
5327 offset++;
5328 consumed++;
5331 /* Do we have a note on/off chapter? */
5332 if ( chanflags & RTP_MIDI_CJ_FLAG_N ) {
5333 ext_consumed = decode_cj_chapter_n( tvb, pinfo, rtp_midi_cj_chapters_tree, offset );
5334 if ( ext_consumed < 0 ) {
5335 return ext_consumed;
5337 consumed += ext_consumed;
5338 offset += ext_consumed;
5341 /* Do we have a note command extras chapter? */
5342 if ( chanflags & RTP_MIDI_CJ_FLAG_E ) {
5343 ext_consumed = decode_cj_chapter_e( tvb, pinfo, rtp_midi_cj_chapters_tree, offset );
5344 if ( ext_consumed < 0 ) {
5345 return ext_consumed;
5347 consumed += ext_consumed;
5348 offset += ext_consumed;
5351 /* Do we have channel aftertouch chapter? */
5352 if ( chanflags & RTP_MIDI_CJ_FLAG_T ) {
5353 static int * const flags_t[] = {
5354 &hf_rtp_midi_cj_chapter_t_sflag,
5355 &hf_rtp_midi_cj_chapter_t_pressure,
5356 NULL
5359 proto_tree_add_bitmask(rtp_midi_cj_chapters_tree, tvb, offset, hf_rtp_midi_cj_chapter_t_channel_aftertouch, ett_rtp_midi_cj_chapter_t, flags_t, ENC_NA);
5361 offset++;
5362 consumed++;
5365 /* Do we have a poly aftertouch chapter? */
5366 if ( chanflags & RTP_MIDI_CJ_FLAG_A ) {
5367 ext_consumed = decode_cj_chapter_a( tvb, pinfo, rtp_midi_cj_chapters_tree, offset );
5368 if ( ext_consumed < 0 ) {
5369 return ext_consumed;
5371 consumed += ext_consumed;
5374 /* Make sanity check for consumed data vs. stated length of this channels journal */
5375 if ( consumed != chanjourlen ) {
5376 return -1;
5378 return consumed;
5383 * Here the chapter D F4-field of the system-journal is decoded.
5385 static int
5386 decode_sj_chapter_d_f4( tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int offset ) {
5388 proto_tree *rtp_midi_field_tree;
5389 unsigned int start_offset = offset;
5390 uint16_t f4flags;
5391 uint16_t f4length;
5393 /* Get flags & length */
5394 f4flags = tvb_get_ntohs( tvb, offset );
5395 f4length = f4flags & RTP_MIDI_SJ_CHAPTER_D_SYSCOM_MASK_LENGTH;
5397 /* now we can display our tree, as we now have the full length */
5398 rtp_midi_field_tree = proto_tree_add_subtree( tree, tvb, offset, f4length, ett_rtp_midi_sj_chapter_d_field_j, NULL, RTP_MIDI_TREE_NAME_SJ_CHAPTER_D_FIELD_J );
5400 proto_tree_add_item( rtp_midi_field_tree, hf_rtp_midi_sj_chapter_d_syscom_sflag, tvb, offset, 2, ENC_BIG_ENDIAN );
5401 proto_tree_add_item( rtp_midi_field_tree, hf_rtp_midi_sj_chapter_d_syscom_cflag, tvb, offset, 2, ENC_BIG_ENDIAN );
5402 proto_tree_add_item( rtp_midi_field_tree, hf_rtp_midi_sj_chapter_d_syscom_vflag, tvb, offset, 2, ENC_BIG_ENDIAN );
5403 proto_tree_add_item( rtp_midi_field_tree, hf_rtp_midi_sj_chapter_d_syscom_lflag, tvb, offset, 2, ENC_BIG_ENDIAN );
5404 proto_tree_add_item( rtp_midi_field_tree, hf_rtp_midi_sj_chapter_d_syscom_dsz, tvb, offset, 2, ENC_BIG_ENDIAN );
5405 proto_tree_add_item( rtp_midi_field_tree, hf_rtp_midi_sj_chapter_d_syscom_length, tvb, offset, 2, ENC_BIG_ENDIAN );
5407 offset += 2;
5408 f4length -= 2;
5410 if ( f4flags & RTP_MIDI_SJ_CHAPTER_D_SYSCOM_FLAG_C ) {
5412 proto_tree_add_item( rtp_midi_field_tree, hf_rtp_midi_sj_chapter_d_syscom_count, tvb, offset, 1, ENC_BIG_ENDIAN );
5414 offset++;
5415 f4length--;
5418 if ( f4flags & RTP_MIDI_SJ_CHAPTER_D_SYSCOM_FLAG_V ) {
5420 int valuelen = 0;
5421 uint8_t octet;
5423 /* variable length field - ends with an octet with MSB set */
5424 for (;;) {
5425 octet = tvb_get_uint8( tvb, offset+valuelen );
5426 valuelen++;
5427 if ( octet & 0x80 ) {
5428 break;
5431 proto_tree_add_item( rtp_midi_field_tree, hf_rtp_midi_sj_chapter_d_syscom_value, tvb, offset, valuelen, ENC_NA );
5432 offset += valuelen;
5433 f4length -= valuelen;
5436 if ( f4flags & RTP_MIDI_SJ_CHAPTER_D_SYSCOM_FLAG_L ) {
5438 proto_tree_add_item( rtp_midi_field_tree, hf_rtp_midi_sj_chapter_d_syscom_legal, tvb, offset, f4length, ENC_NA );
5439 offset += f4length;
5442 /* if we still have data, the length-field was incorrect we dump the data here and abort! */
5443 if ( f4length > 0 ) {
5445 proto_tree_add_item( rtp_midi_field_tree, hf_rtp_midi_sj_chapter_d_syscom_data, tvb, offset, f4length, ENC_NA );
5446 offset += f4length;
5447 /* must be a protocol error - since we have a length, we can recover...*/
5451 return offset-start_offset;
5456 * Here the chapter D F5-field of the system-journal is decoded.
5458 static int
5459 decode_sj_chapter_d_f5( tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int offset ) {
5461 proto_tree *rtp_midi_field_tree;
5462 unsigned int start_offset = offset;
5463 uint16_t f5flags;
5464 uint16_t f5length;
5466 /* Get flags & length */
5467 f5flags = tvb_get_ntohs( tvb, offset );
5468 f5length = f5flags & RTP_MIDI_SJ_CHAPTER_D_SYSCOM_MASK_LENGTH;
5470 /* now we can display our tree, as we now have the full length */
5471 rtp_midi_field_tree = proto_tree_add_subtree( tree, tvb, offset, f5length, ett_rtp_midi_sj_chapter_d_field_k, NULL, RTP_MIDI_TREE_NAME_SJ_CHAPTER_D_FIELD_K );
5473 proto_tree_add_item( rtp_midi_field_tree, hf_rtp_midi_sj_chapter_d_syscom_sflag, tvb, offset, 2, ENC_BIG_ENDIAN );
5474 proto_tree_add_item( rtp_midi_field_tree, hf_rtp_midi_sj_chapter_d_syscom_cflag, tvb, offset, 2, ENC_BIG_ENDIAN );
5475 proto_tree_add_item( rtp_midi_field_tree, hf_rtp_midi_sj_chapter_d_syscom_vflag, tvb, offset, 2, ENC_BIG_ENDIAN );
5476 proto_tree_add_item( rtp_midi_field_tree, hf_rtp_midi_sj_chapter_d_syscom_lflag, tvb, offset, 2, ENC_BIG_ENDIAN );
5477 proto_tree_add_item( rtp_midi_field_tree, hf_rtp_midi_sj_chapter_d_syscom_dsz, tvb, offset, 2, ENC_BIG_ENDIAN );
5478 proto_tree_add_item( rtp_midi_field_tree, hf_rtp_midi_sj_chapter_d_syscom_length, tvb, offset, 2, ENC_BIG_ENDIAN );
5480 offset += 2;
5481 f5length -= 2;
5483 if ( f5flags & RTP_MIDI_SJ_CHAPTER_D_SYSCOM_FLAG_C ) {
5485 proto_tree_add_item( rtp_midi_field_tree, hf_rtp_midi_sj_chapter_d_syscom_count, tvb, offset, 1, ENC_BIG_ENDIAN );
5487 offset++;
5488 f5length--;
5491 if ( f5flags & RTP_MIDI_SJ_CHAPTER_D_SYSCOM_FLAG_V ) {
5493 int valuelen = 0;
5494 uint8_t octet;
5496 /* variable length field - ends with an octet with MSB set */
5497 for (;;) {
5498 octet = tvb_get_uint8( tvb, offset+valuelen );
5499 valuelen++;
5500 if ( octet & 0x80 ) {
5501 break;
5504 proto_tree_add_item( rtp_midi_field_tree, hf_rtp_midi_sj_chapter_d_syscom_value, tvb, offset, valuelen, ENC_NA );
5505 offset += valuelen;
5506 f5length -= valuelen;
5509 if ( f5flags & RTP_MIDI_SJ_CHAPTER_D_SYSCOM_FLAG_L ) {
5511 proto_tree_add_item( rtp_midi_field_tree, hf_rtp_midi_sj_chapter_d_syscom_legal, tvb, offset, f5length, ENC_NA );
5512 offset += f5length;
5513 f5length = 0;
5516 /* if we still have data, we dump it here - see above! */
5517 if ( f5length > 0 ) {
5519 proto_tree_add_item( rtp_midi_field_tree, hf_rtp_midi_sj_chapter_d_syscom_data, tvb, offset, f5length, ENC_NA );
5520 offset += f5length;
5521 /* must be a protocol error - since we have a length, we can recover...*/
5524 return offset-start_offset;
5528 * Here the chapter D F9-field of the system-journal is decoded.
5530 static int
5531 decode_sj_chapter_d_f9( tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int offset ) {
5533 proto_tree *rtp_midi_field_tree;
5534 unsigned int start_offset = offset;
5535 uint8_t f9flags;
5536 uint8_t f9length;
5538 /* Get flags & length */
5539 f9flags = tvb_get_uint8( tvb, offset );
5540 f9length = f9flags & RTP_MIDI_SJ_CHAPTER_D_SYSREAL_MASK_LENGTH;
5542 /* now we can display our tree, as we now have the full length */
5543 rtp_midi_field_tree = proto_tree_add_subtree( tree, tvb, offset, f9length, ett_rtp_midi_sj_chapter_d_field_y, NULL, RTP_MIDI_TREE_NAME_SJ_CHAPTER_D_FIELD_Y );
5545 proto_tree_add_item( rtp_midi_field_tree, hf_rtp_midi_sj_chapter_d_sysreal_sflag, tvb, offset, 1, ENC_BIG_ENDIAN );
5546 proto_tree_add_item( rtp_midi_field_tree, hf_rtp_midi_sj_chapter_d_sysreal_cflag, tvb, offset, 1, ENC_BIG_ENDIAN );
5547 proto_tree_add_item( rtp_midi_field_tree, hf_rtp_midi_sj_chapter_d_sysreal_lflag, tvb, offset, 1, ENC_BIG_ENDIAN );
5548 proto_tree_add_item( rtp_midi_field_tree, hf_rtp_midi_sj_chapter_d_sysreal_length, tvb, offset, 1, ENC_BIG_ENDIAN );
5550 offset++;
5551 f9length--;
5553 if ( f9flags & RTP_MIDI_SJ_CHAPTER_D_SYSREAL_FLAG_C ) {
5555 proto_tree_add_item( rtp_midi_field_tree, hf_rtp_midi_sj_chapter_d_sysreal_count, tvb, offset, 1, ENC_BIG_ENDIAN );
5557 offset++;
5558 f9length--;
5561 if ( f9flags & RTP_MIDI_SJ_CHAPTER_D_SYSREAL_FLAG_L ) {
5563 proto_tree_add_item( rtp_midi_field_tree, hf_rtp_midi_sj_chapter_d_sysreal_legal, tvb, offset, f9length, ENC_NA );
5564 offset += f9length;
5565 f9length = 0;
5568 /* if we still have data, the length-field was incorrect we dump the data here and abort! */
5570 if ( f9length > 0 ) {
5572 proto_tree_add_item( rtp_midi_field_tree, hf_rtp_midi_sj_chapter_d_sysreal_data, tvb, offset, f9length, ENC_NA );
5573 offset += f9length;
5574 /* must be a protocol error - since we have a length, we can recover...*/
5577 return offset-start_offset;
5582 * Here the chapter D FD-field of the system-journal is decoded.
5584 static int
5585 decode_sj_chapter_d_fd( tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int offset ) {
5587 proto_tree *rtp_midi_field_tree;
5588 unsigned int start_offset = offset;
5589 uint8_t fdflags;
5590 uint8_t fdlength;
5592 /* Get flags & length */
5593 fdflags = tvb_get_uint8( tvb, offset );
5594 fdlength = fdflags & RTP_MIDI_SJ_CHAPTER_D_SYSREAL_MASK_LENGTH;
5596 /* now we can display our tree, as we now have the full length */
5597 rtp_midi_field_tree = proto_tree_add_subtree( tree, tvb, offset, fdlength, ett_rtp_midi_sj_chapter_d_field_z, NULL, RTP_MIDI_TREE_NAME_SJ_CHAPTER_D_FIELD_Z );
5599 proto_tree_add_item( rtp_midi_field_tree, hf_rtp_midi_sj_chapter_d_sysreal_sflag, tvb, offset, 1, ENC_BIG_ENDIAN );
5600 proto_tree_add_item( rtp_midi_field_tree, hf_rtp_midi_sj_chapter_d_sysreal_cflag, tvb, offset, 1, ENC_BIG_ENDIAN );
5601 proto_tree_add_item( rtp_midi_field_tree, hf_rtp_midi_sj_chapter_d_sysreal_lflag, tvb, offset, 1, ENC_BIG_ENDIAN );
5602 proto_tree_add_item( rtp_midi_field_tree, hf_rtp_midi_sj_chapter_d_sysreal_length, tvb, offset, 1, ENC_BIG_ENDIAN );
5604 offset++;
5605 fdlength--;
5607 if ( fdflags & RTP_MIDI_SJ_CHAPTER_D_SYSREAL_FLAG_C ) {
5609 proto_tree_add_item( rtp_midi_field_tree, hf_rtp_midi_sj_chapter_d_sysreal_count, tvb, offset, 1, ENC_BIG_ENDIAN );
5611 offset++;
5612 fdlength--;
5615 if ( fdflags & RTP_MIDI_SJ_CHAPTER_D_SYSREAL_FLAG_L ) {
5617 proto_tree_add_item( rtp_midi_field_tree, hf_rtp_midi_sj_chapter_d_sysreal_legal, tvb, offset, fdlength, ENC_NA );
5618 offset += fdlength;
5619 fdlength = 0;
5622 /* if we still have data, the length-field was incorrect we dump the data here and abort! */
5624 if ( fdlength > 0 ) {
5626 proto_tree_add_item( rtp_midi_field_tree, hf_rtp_midi_sj_chapter_d_sysreal_data, tvb, offset, fdlength, ENC_NA );
5628 offset += fdlength;
5629 /* must be a protocol error - since we have a length, we can recover...*/
5632 return offset-start_offset;
5638 * Here the chapter D of the channel-journal is decoded.
5640 static int
5641 decode_sj_chapter_d( tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int offset ) {
5642 proto_item *tix;
5643 proto_tree *rtp_midi_sj_chapter_tree;
5644 uint8_t header;
5645 unsigned int start_offset = offset;
5646 int ext_consumed;
5648 static int * const chapter_d_flags[] = {
5649 &hf_rtp_midi_sj_chapter_d_sflag,
5650 &hf_rtp_midi_sj_chapter_d_bflag,
5651 &hf_rtp_midi_sj_chapter_d_gflag,
5652 &hf_rtp_midi_sj_chapter_d_hflag,
5653 &hf_rtp_midi_sj_chapter_d_jflag,
5654 &hf_rtp_midi_sj_chapter_d_kflag,
5655 &hf_rtp_midi_sj_chapter_d_yflag,
5656 &hf_rtp_midi_sj_chapter_d_zflag,
5657 NULL
5660 /* first we need to get the flags of this chapter */
5661 header = tvb_get_uint8( tvb, offset );
5664 * we don't know the complete length yet - we know that we have at least the header -> 1.
5665 * At the end we set the real length...
5667 tix = proto_tree_add_bitmask(tree, tvb, offset, hf_rtp_midi_sj_chapter_d_simple_system_commands, ett_rtp_midi_sj_chapter_d, chapter_d_flags, ENC_NA);
5668 rtp_midi_sj_chapter_tree = proto_item_add_subtree( tix, ett_rtp_midi_sj_chapter_d );
5670 /* done with header */
5671 offset++;
5673 /* do we have Reset field? */
5674 if ( header & RTP_MIDI_SJ_CHAPTER_D_FLAG_B ) {
5676 static int * const reset_flags[] = {
5677 &hf_rtp_midi_sj_chapter_d_reset_sflag,
5678 &hf_rtp_midi_sj_chapter_d_reset_count,
5679 NULL
5682 proto_tree_add_bitmask(rtp_midi_sj_chapter_tree, tvb, offset, hf_rtp_midi_sj_chapter_d_reset, ett_rtp_midi_sj_chapter_d_field_b, reset_flags, ENC_NA);
5683 offset++;
5686 /* do we have Tune request field? */
5687 if ( header & RTP_MIDI_SJ_CHAPTER_D_FLAG_G ) {
5689 static int * const tune_flags[] = {
5690 &hf_rtp_midi_sj_chapter_d_tune_sflag,
5691 &hf_rtp_midi_sj_chapter_d_tune_count,
5692 NULL
5695 proto_tree_add_bitmask(rtp_midi_sj_chapter_tree, tvb, offset, hf_rtp_midi_sj_chapter_d_tune, ett_rtp_midi_sj_chapter_d_field_g, tune_flags, ENC_BIG_ENDIAN);
5696 offset++;
5699 /* do we have Song select field? */
5700 if ( header & RTP_MIDI_SJ_CHAPTER_D_FLAG_H ) {
5702 static int * const song_flags[] = {
5703 &hf_rtp_midi_sj_chapter_d_song_sel_sflag,
5704 &hf_rtp_midi_sj_chapter_d_song_sel_value,
5705 NULL
5708 proto_tree_add_bitmask(rtp_midi_sj_chapter_tree, tvb, offset, hf_rtp_midi_sj_chapter_d_song_sel, ett_rtp_midi_sj_chapter_d_field_h, song_flags, ENC_BIG_ENDIAN);
5709 offset++;
5712 /* do we have 0xF4 field? */
5713 if ( header & RTP_MIDI_SJ_CHAPTER_D_FLAG_J ) {
5714 ext_consumed = decode_sj_chapter_d_f4( tvb, pinfo, rtp_midi_sj_chapter_tree, offset );
5715 if ( ext_consumed < 0 ) {
5716 return ext_consumed;
5718 offset += ext_consumed;
5721 /* do we have 0xF5 field? */
5722 if ( header & RTP_MIDI_SJ_CHAPTER_D_FLAG_K ) {
5723 ext_consumed = decode_sj_chapter_d_f5( tvb, pinfo, rtp_midi_sj_chapter_tree, offset );
5724 if ( ext_consumed < 0 ) {
5725 return ext_consumed;
5727 offset += ext_consumed;
5730 /* do we have 0xF9 field? */
5731 if ( header & RTP_MIDI_SJ_CHAPTER_D_FLAG_Y ) {
5732 ext_consumed = decode_sj_chapter_d_f9( tvb, pinfo, rtp_midi_sj_chapter_tree, offset );
5733 if ( ext_consumed < 0 ) {
5734 return ext_consumed;
5736 offset += ext_consumed;
5739 /* do we have 0xFD field? */
5740 if ( header & RTP_MIDI_SJ_CHAPTER_D_FLAG_Z ) {
5741 ext_consumed = decode_sj_chapter_d_fd( tvb, pinfo, rtp_midi_sj_chapter_tree, offset );
5742 if ( ext_consumed < 0 ) {
5743 return ext_consumed;
5745 offset += ext_consumed;
5749 /* now we know the complete length and set it. */
5750 proto_item_set_len( tix, offset-start_offset );
5751 return offset-start_offset;
5755 * Here the chapter Q of the channel-journal is decoded.
5757 static int
5758 decode_sj_chapter_q( tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int offset ) {
5759 proto_tree *rtp_midi_sj_chapter_tree;
5760 uint8_t header;
5761 unsigned int start_offset = offset;
5762 int len = 1;
5764 /* first we need to get the flags of this chapter */
5765 header = tvb_get_uint8( tvb, offset );
5767 if ( header & RTP_MIDI_SJ_CHAPTER_Q_FLAG_C ) {
5768 len += 2;
5770 if ( header & RTP_MIDI_SJ_CHAPTER_Q_FLAG_T ) {
5771 len += 3;
5774 /* now we have the length... */
5775 rtp_midi_sj_chapter_tree = proto_tree_add_subtree( tree, tvb, offset, len, ett_rtp_midi_sj_chapter_q, NULL, RTP_MIDI_TREE_NAME_SJ_CHAPTER_Q );
5777 proto_tree_add_item( rtp_midi_sj_chapter_tree, hf_rtp_midi_sj_chapter_q_sflag, tvb, offset, 1, ENC_BIG_ENDIAN );
5778 proto_tree_add_item( rtp_midi_sj_chapter_tree, hf_rtp_midi_sj_chapter_q_nflag, tvb, offset, 1, ENC_BIG_ENDIAN );
5779 proto_tree_add_item( rtp_midi_sj_chapter_tree, hf_rtp_midi_sj_chapter_q_dflag, tvb, offset, 1, ENC_BIG_ENDIAN );
5780 proto_tree_add_item( rtp_midi_sj_chapter_tree, hf_rtp_midi_sj_chapter_q_cflag, tvb, offset, 1, ENC_BIG_ENDIAN );
5781 proto_tree_add_item( rtp_midi_sj_chapter_tree, hf_rtp_midi_sj_chapter_q_tflag, tvb, offset, 1, ENC_BIG_ENDIAN );
5783 if ( header & RTP_MIDI_SJ_CHAPTER_Q_FLAG_C ) {
5785 proto_tree_add_item( rtp_midi_sj_chapter_tree, hf_rtp_midi_sj_chapter_q_clock, tvb, offset, 3, ENC_BIG_ENDIAN );
5787 offset += 3;
5789 } else {
5790 proto_tree_add_item( rtp_midi_sj_chapter_tree, hf_rtp_midi_sj_chapter_q_top, tvb, offset, 1, ENC_BIG_ENDIAN );
5792 offset++;
5795 if ( header & RTP_MIDI_SJ_CHAPTER_Q_FLAG_T ) {
5797 proto_tree_add_item( rtp_midi_sj_chapter_tree, hf_rtp_midi_sj_chapter_q_timetools, tvb, offset, 3, ENC_BIG_ENDIAN );
5799 offset += 3;
5802 return offset-start_offset;
5806 * Here the chapter F of the channel-journal is decoded.
5808 static int
5809 decode_sj_chapter_f( tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int offset ) {
5810 proto_tree *rtp_midi_sj_chapter_tree;
5811 uint8_t header;
5812 unsigned int start_offset = offset;
5813 int len = 1;
5815 /* first we need to get the flags of this chapter */
5816 header = tvb_get_uint8( tvb, offset );
5818 if ( header & RTP_MIDI_SJ_CHAPTER_F_FLAG_C ) {
5819 len += 4;
5821 if ( header & RTP_MIDI_SJ_CHAPTER_F_FLAG_P ) {
5822 len += 4;
5825 /* now we have the length... */
5826 rtp_midi_sj_chapter_tree = proto_tree_add_subtree( tree, tvb, offset, len, ett_rtp_midi_sj_chapter_f, NULL, RTP_MIDI_TREE_NAME_SJ_CHAPTER_F );
5828 proto_tree_add_item( rtp_midi_sj_chapter_tree, hf_rtp_midi_sj_chapter_f_sflag, tvb, offset, 1, ENC_BIG_ENDIAN );
5829 proto_tree_add_item( rtp_midi_sj_chapter_tree, hf_rtp_midi_sj_chapter_f_cflag, tvb, offset, 1, ENC_BIG_ENDIAN );
5830 proto_tree_add_item( rtp_midi_sj_chapter_tree, hf_rtp_midi_sj_chapter_f_pflag, tvb, offset, 1, ENC_BIG_ENDIAN );
5831 proto_tree_add_item( rtp_midi_sj_chapter_tree, hf_rtp_midi_sj_chapter_f_qflag, tvb, offset, 1, ENC_BIG_ENDIAN );
5832 proto_tree_add_item( rtp_midi_sj_chapter_tree, hf_rtp_midi_sj_chapter_f_dflag, tvb, offset, 1, ENC_BIG_ENDIAN );
5833 proto_tree_add_item( rtp_midi_sj_chapter_tree, hf_rtp_midi_sj_chapter_f_point, tvb, offset, 1, ENC_BIG_ENDIAN );
5835 offset++;
5837 if ( header & RTP_MIDI_SJ_CHAPTER_F_FLAG_C ) {
5839 if ( header & RTP_MIDI_SJ_CHAPTER_F_FLAG_Q ) {
5840 static int * const fq_flags[] = {
5841 &hf_rtp_midi_sj_chapter_f_mt0,
5842 &hf_rtp_midi_sj_chapter_f_mt1,
5843 &hf_rtp_midi_sj_chapter_f_mt2,
5844 &hf_rtp_midi_sj_chapter_f_mt3,
5845 &hf_rtp_midi_sj_chapter_f_mt4,
5846 &hf_rtp_midi_sj_chapter_f_mt5,
5847 &hf_rtp_midi_sj_chapter_f_mt6,
5848 &hf_rtp_midi_sj_chapter_f_mt7,
5849 NULL
5852 proto_tree_add_bitmask(rtp_midi_sj_chapter_tree, tvb, offset, hf_rtp_midi_sj_chapter_f_complete, ett_rtp_midi_sj_chapter_f_complete, fq_flags, ENC_BIG_ENDIAN);
5853 } else {
5854 static int * const f_flags[] = {
5855 &hf_rtp_midi_sj_chapter_f_hr,
5856 &hf_rtp_midi_sj_chapter_f_mn,
5857 &hf_rtp_midi_sj_chapter_f_sc,
5858 &hf_rtp_midi_sj_chapter_f_fr,
5859 NULL
5862 proto_tree_add_bitmask(rtp_midi_sj_chapter_tree, tvb, offset, hf_rtp_midi_sj_chapter_f_complete, ett_rtp_midi_sj_chapter_f_complete, f_flags, ENC_BIG_ENDIAN);
5865 offset += 4;
5868 if ( header & RTP_MIDI_SJ_CHAPTER_F_FLAG_P ) {
5869 static int * const fp_flags[] = {
5870 &hf_rtp_midi_sj_chapter_f_mt0,
5871 &hf_rtp_midi_sj_chapter_f_mt1,
5872 &hf_rtp_midi_sj_chapter_f_mt2,
5873 &hf_rtp_midi_sj_chapter_f_mt3,
5874 &hf_rtp_midi_sj_chapter_f_mt4,
5875 &hf_rtp_midi_sj_chapter_f_mt5,
5876 &hf_rtp_midi_sj_chapter_f_mt6,
5877 &hf_rtp_midi_sj_chapter_f_mt7,
5878 NULL
5881 proto_tree_add_bitmask(rtp_midi_sj_chapter_tree, tvb, offset, hf_rtp_midi_sj_chapter_f_partial, ett_rtp_midi_sj_chapter_f_partial, fp_flags, ENC_BIG_ENDIAN);
5882 offset += 4;
5885 return offset-start_offset;
5889 * Here the chapter X of the channel-journal is decoded.
5891 static int
5892 decode_sj_chapter_x( tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int offset, unsigned int max_length ) {
5893 proto_tree *rtp_midi_sj_chapter_tree;
5894 proto_tree *rtp_midi_sj_data_tree;
5895 uint8_t header;
5896 uint8_t octet;
5897 unsigned int consumed = 0;
5898 unsigned int cmdlen = 0;
5899 unsigned int i;
5901 /* first we need to get the flags of this chapter */
5902 header = tvb_get_uint8( tvb, offset );
5904 rtp_midi_sj_chapter_tree = proto_tree_add_subtree( tree, tvb, offset, max_length, ett_rtp_midi_sj_chapter_x, NULL, RTP_MIDI_TREE_NAME_SJ_CHAPTER_X );
5906 proto_tree_add_item( rtp_midi_sj_chapter_tree, hf_rtp_midi_sj_chapter_x_sflag, tvb, offset, 1, ENC_BIG_ENDIAN );
5907 proto_tree_add_item( rtp_midi_sj_chapter_tree, hf_rtp_midi_sj_chapter_x_tflag, tvb, offset, 1, ENC_BIG_ENDIAN );
5908 proto_tree_add_item( rtp_midi_sj_chapter_tree, hf_rtp_midi_sj_chapter_x_cflag, tvb, offset, 1, ENC_BIG_ENDIAN );
5909 proto_tree_add_item( rtp_midi_sj_chapter_tree, hf_rtp_midi_sj_chapter_x_fflag, tvb, offset, 1, ENC_BIG_ENDIAN );
5910 proto_tree_add_item( rtp_midi_sj_chapter_tree, hf_rtp_midi_sj_chapter_x_dflag, tvb, offset, 1, ENC_BIG_ENDIAN );
5911 proto_tree_add_item( rtp_midi_sj_chapter_tree, hf_rtp_midi_sj_chapter_x_lflag, tvb, offset, 1, ENC_BIG_ENDIAN );
5912 proto_tree_add_item( rtp_midi_sj_chapter_tree, hf_rtp_midi_sj_chapter_x_sta, tvb, offset, 1, ENC_BIG_ENDIAN );
5914 consumed++;
5915 offset++;
5917 if ( header & RTP_MIDI_SJ_CHAPTER_X_FLAG_T ) {
5919 proto_tree_add_item( rtp_midi_sj_chapter_tree, hf_rtp_midi_sj_chapter_x_tcount, tvb, offset, 1, ENC_BIG_ENDIAN );
5921 consumed++;
5922 offset++;
5925 if ( header & RTP_MIDI_SJ_CHAPTER_X_FLAG_C ) {
5927 proto_tree_add_item( rtp_midi_sj_chapter_tree, hf_rtp_midi_sj_chapter_x_count, tvb, offset, 1, ENC_BIG_ENDIAN );
5929 consumed++;
5930 offset++;
5933 if ( header & RTP_MIDI_SJ_CHAPTER_X_FLAG_F ) {
5934 unsigned int field = 0;
5935 unsigned int fieldlen = 0;
5937 /* FIRST is "compressed" using only the necessary amount of octets, like delta-time */
5938 for ( i=0; i < 4; i++ ) {
5940 /* do we still fit in the dissected packet & in the length restriction of this chapter? */
5941 if ( ( !( consumed >= max_length ) ) || ( !tvb_bytes_exist( tvb, offset + fieldlen, 1 ) ) ) {
5942 return -1;
5945 octet = tvb_get_uint8( tvb, offset + fieldlen );
5946 field = ( field << 7 ) | ( octet & RTP_MIDI_DELTA_TIME_OCTET_MASK );
5947 fieldlen++;
5949 if ( ( octet & RTP_MIDI_DELTA_TIME_EXTENSION ) == 0 ) {
5950 break;
5954 switch (fieldlen) {
5955 case 1:
5956 proto_tree_add_uint ( rtp_midi_sj_chapter_tree, hf_rtp_midi_sj_chapter_x_first1, tvb, offset, fieldlen, field );
5957 break;
5958 case 2:
5959 proto_tree_add_uint ( rtp_midi_sj_chapter_tree, hf_rtp_midi_sj_chapter_x_first2, tvb, offset, fieldlen, field );
5960 break;
5961 case 3:
5962 proto_tree_add_uint ( rtp_midi_sj_chapter_tree, hf_rtp_midi_sj_chapter_x_first3, tvb, offset, fieldlen, field );
5963 break;
5964 case 4:
5965 proto_tree_add_uint ( rtp_midi_sj_chapter_tree, hf_rtp_midi_sj_chapter_x_first4, tvb, offset, fieldlen, field );
5966 break;
5969 consumed += fieldlen;
5970 offset += fieldlen;
5974 if ( header & RTP_MIDI_SJ_CHAPTER_X_FLAG_D ) {
5975 rtp_midi_sj_data_tree = proto_tree_add_subtree( rtp_midi_sj_chapter_tree, tvb, offset, max_length - consumed,
5976 ett_rtp_midi_sj_chapter_x_data, NULL, RTP_MIDI_TREE_NAME_SJ_CHAPTER_X_DATA );
5977 while ( consumed < max_length ) {
5978 octet = tvb_get_uint8( tvb, offset + cmdlen );
5979 if ( octet & 0x80 ) {
5980 proto_tree_add_item( rtp_midi_sj_data_tree, hf_rtp_midi_sj_chapter_x_data, tvb, offset, cmdlen, ENC_NA );
5981 offset += cmdlen;
5982 cmdlen = 0;
5983 } else {
5984 cmdlen += 1;
5986 consumed += 1;
5988 /* unfinished command still to put into tree */
5989 if ( cmdlen ) {
5990 proto_tree_add_item( rtp_midi_sj_data_tree, hf_rtp_midi_sj_chapter_x_invalid_data, tvb, offset, cmdlen, ENC_NA );
5991 offset += cmdlen;
5995 /* this should not ever enter - we still have data, but flag d was apparently not set... */
5996 if ( consumed < max_length ) {
5998 proto_tree_add_item( rtp_midi_sj_chapter_tree, hf_rtp_midi_sj_chapter_x_invalid_data, tvb, offset, max_length - consumed, ENC_NA );
5999 consumed = max_length;
6002 return consumed;
6008 * Here the system-journal is decoded.
6010 static int
6011 decode_system_journal( tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned int offset ) {
6012 proto_tree *rtp_midi_sysjournal_tree;
6013 proto_tree *rtp_midi_sj_chapters_tree;
6014 unsigned int start_offset = offset;
6015 int ext_consumed = 0;
6016 uint16_t sysjourlen;
6017 uint16_t systemflags;
6019 systemflags = tvb_get_ntohs( tvb, offset );
6020 sysjourlen = systemflags & RTP_MIDI_SJ_MASK_LENGTH;
6022 rtp_midi_sysjournal_tree = proto_tree_add_subtree( tree, tvb, offset, sysjourlen, ett_rtp_midi_systemjournal, NULL, RTP_MIDI_TREE_NAME_SYSTEM_JOURNAL );
6024 proto_tree_add_item( rtp_midi_sysjournal_tree, hf_rtp_midi_sysjour_toc_s, tvb, offset, 2, ENC_BIG_ENDIAN );
6025 proto_tree_add_item( rtp_midi_sysjournal_tree, hf_rtp_midi_sysjour_toc_d, tvb, offset, 2, ENC_BIG_ENDIAN );
6026 proto_tree_add_item( rtp_midi_sysjournal_tree, hf_rtp_midi_sysjour_toc_v, tvb, offset, 2, ENC_BIG_ENDIAN );
6027 proto_tree_add_item( rtp_midi_sysjournal_tree, hf_rtp_midi_sysjour_toc_q, tvb, offset, 2, ENC_BIG_ENDIAN );
6028 proto_tree_add_item( rtp_midi_sysjournal_tree, hf_rtp_midi_sysjour_toc_f, tvb, offset, 2, ENC_BIG_ENDIAN );
6029 proto_tree_add_item( rtp_midi_sysjournal_tree, hf_rtp_midi_sysjour_toc_x, tvb, offset, 2, ENC_BIG_ENDIAN );
6030 proto_tree_add_item( rtp_midi_sysjournal_tree, hf_rtp_midi_sysjour_len, tvb, offset, 2, ENC_BIG_ENDIAN );
6032 offset += 2;
6034 rtp_midi_sj_chapters_tree = proto_tree_add_subtree( rtp_midi_sysjournal_tree, tvb, offset, sysjourlen - 2,
6035 ett_rtp_midi_systemchapters, NULL, RTP_MIDI_TREE_NAME_SYSTEM_CHAPTERS );
6037 /* Do we have a simple system commands chapter? */
6038 if ( systemflags & RTP_MIDI_SJ_FLAG_D ) {
6039 offset += decode_sj_chapter_d( tvb, pinfo, rtp_midi_sj_chapters_tree, offset );
6042 /* Do we have a active sensing chapter? */
6043 if ( systemflags & RTP_MIDI_SJ_FLAG_V ) {
6044 static int * const v_flags[] = {
6045 &hf_rtp_midi_sj_chapter_v_sflag,
6046 &hf_rtp_midi_sj_chapter_v_count,
6047 NULL
6050 proto_tree_add_bitmask(rtp_midi_sj_chapters_tree, tvb, offset, hf_rtp_midi_sj_chapter_v, ett_rtp_midi_sj_chapter_v, v_flags, ENC_BIG_ENDIAN);
6052 offset++;
6055 /* Do we have a sequencer state commands chapter? */
6056 if ( systemflags & RTP_MIDI_SJ_FLAG_Q ) {
6057 offset += decode_sj_chapter_q( tvb, pinfo, rtp_midi_sj_chapters_tree, offset );
6060 /* Do we have a MTC chapter? */
6061 if ( systemflags & RTP_MIDI_SJ_FLAG_F ) {
6062 offset += decode_sj_chapter_f( tvb, pinfo, rtp_midi_sj_chapters_tree, offset );
6066 /* Do we have a Sysex chapter? */
6067 if ( systemflags & RTP_MIDI_SJ_FLAG_X ) {
6068 ext_consumed = decode_sj_chapter_x( tvb, pinfo, rtp_midi_sj_chapters_tree, offset, sysjourlen - (offset-start_offset) );
6069 if ( ext_consumed < 0 ) {
6070 return ext_consumed;
6072 offset += ext_consumed;
6076 /* Make sanity check for consumed data vs. stated length of system journal */
6077 if ( offset-start_offset != sysjourlen ) {
6078 return -1;
6080 return offset-start_offset;
6089 * This is the main dissector function for the RTP-MIDI protocol
6090 * It decodes the wrapper of the command-section and punts
6091 * decoding of delta-time and the actual MIDI-command itself to
6092 * external decoders. Afterwards the journal-section is decoded.
6095 static int
6096 dissect_rtp_midi( tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_ )
6098 proto_item *ti;
6099 proto_tree *rtp_midi_tree;
6100 unsigned int offset = 0;
6102 uint8_t flags; /* used for command-section and journal-section*/
6103 unsigned int cmd_len;
6104 unsigned int cmd_count;
6105 uint8_t runningstatus;
6107 int consumed;
6108 unsigned int rsoffset = 0;
6110 uint8_t totchan;
6112 unsigned int i;
6114 col_set_str( pinfo->cinfo, COL_PROTOCOL, RTP_MIDI_DISSECTOR_SHORTNAME );
6115 col_clear( pinfo->cinfo, COL_INFO );
6118 * MIDI command section
6121 /* RTP-MIDI starts with 4 bits of flags... */
6122 flags = tvb_get_uint8( tvb, offset );
6124 ti = proto_tree_add_item( tree, proto_rtp_midi, tvb, 0, -1, ENC_NA );
6125 rtp_midi_tree = proto_item_add_subtree( ti, ett_rtp_midi);
6127 /* Decode those four flags */
6128 proto_tree_add_item( rtp_midi_tree, hf_rtp_midi_bflag, tvb, offset, 1, ENC_BIG_ENDIAN );
6129 proto_tree_add_item( rtp_midi_tree, hf_rtp_midi_jflag, tvb, offset, 1, ENC_BIG_ENDIAN );
6130 proto_tree_add_item( rtp_midi_tree, hf_rtp_midi_zflag, tvb, offset, 1, ENC_BIG_ENDIAN );
6131 proto_tree_add_item( rtp_midi_tree, hf_rtp_midi_pflag, tvb, offset, 1, ENC_BIG_ENDIAN );
6133 /* ...followed by a length-field of at least 4 bits */
6134 cmd_len = flags & RTP_MIDI_CS_MASK_SHORTLEN;
6136 /* see if we have small or large len-field */
6137 if (flags & RTP_MIDI_CS_FLAG_B) {
6138 cmd_len = tvb_get_ntohs( tvb, offset) & RTP_MIDI_CS_MASK_LONGLEN;
6139 proto_tree_add_item( rtp_midi_tree, hf_rtp_midi_longlen, tvb, offset, 2, ENC_BIG_ENDIAN );
6140 offset += 2;
6141 } else {
6142 proto_tree_add_item( rtp_midi_tree, hf_rtp_midi_shortlen, tvb, offset, 1, ENC_BIG_ENDIAN );
6143 offset++;
6146 /* if we have a command-section -> dissect it */
6147 if ( cmd_len ) {
6148 proto_tree *rtp_midi_commands_tree;
6150 rtp_midi_commands_tree = proto_tree_add_subtree( rtp_midi_tree, tvb, offset, cmd_len, ett_rtp_midi_commands, NULL, RTP_MIDI_TREE_NAME_COMMAND );
6152 /* No commands decoded yet */
6153 cmd_count = 0;
6155 /* RTP-MIDI-pdus always start with no running status */
6156 runningstatus = 0;
6158 /* Multiple MIDI-commands might follow - the exact number can only be discovered by really decoding the commands! */
6159 while ( cmd_len) {
6161 /* for the first command we only have a delta-time if Z-Flag is set */
6162 if ( ( cmd_count ) || ( flags & RTP_MIDI_CS_FLAG_Z ) ) {
6164 /* Decode a delta-time */
6165 consumed = decodetime( tvb, pinfo, rtp_midi_commands_tree, offset );
6167 /* seek to next command and set remaining length */
6168 offset += consumed;
6169 cmd_len -= consumed;
6172 /* Only decode MIDI-command if there is any data left - it is valid to only have delta-time! */
6173 if ( cmd_len ) {
6175 /* Decode a MIDI-command - if 0 is returned something went wrong */
6176 consumed = decodemidi( tvb, pinfo, rtp_midi_commands_tree, cmd_count, offset, cmd_len, &runningstatus, &rsoffset );
6177 if ( -1 == consumed ) {
6178 return offset;
6181 /* seek to next delta-time and set remaining length */
6182 offset += consumed;
6183 cmd_len -= consumed;
6185 /* as we have successfully decoded another command, increment count */
6186 cmd_count++;
6191 * Journal section
6194 /* if we have a journal-section -> dissect it */
6195 if ( flags & RTP_MIDI_CS_FLAG_J ) {
6196 proto_tree *rtp_midi_journal_tree;
6198 rtp_midi_journal_tree = proto_tree_add_subtree( rtp_midi_tree, tvb, offset, -1, ett_rtp_midi_journal, NULL, RTP_MIDI_TREE_NAME_JOURNAL );
6200 /* lets get the main flags from the recovery journal header */
6201 flags = tvb_get_uint8( tvb, offset );
6203 proto_tree_add_item( rtp_midi_journal_tree, hf_rtp_midi_sflag, tvb, offset, 1, ENC_BIG_ENDIAN );
6204 proto_tree_add_item( rtp_midi_journal_tree, hf_rtp_midi_yflag, tvb, offset, 1, ENC_BIG_ENDIAN );
6205 proto_tree_add_item( rtp_midi_journal_tree, hf_rtp_midi_aflag, tvb, offset, 1, ENC_BIG_ENDIAN );
6206 proto_tree_add_item( rtp_midi_journal_tree, hf_rtp_midi_hflag, tvb, offset, 1, ENC_BIG_ENDIAN );
6208 /* At the same place we find the total channels encoded in the channel journal */
6209 totchan = flags & RTP_MIDI_JS_MASK_TOTALCHANNELS;
6210 proto_tree_add_item( rtp_midi_journal_tree, hf_rtp_midi_totchan, tvb, offset, 1, ENC_BIG_ENDIAN);
6211 offset++;
6213 /* the checkpoint-sequence-number can be used to see if the recovery journal covers all lost events */
6214 proto_tree_add_item( rtp_midi_journal_tree, hf_rtp_midi_check_seq_num, tvb, offset, 2, ENC_BIG_ENDIAN );
6215 offset += 2;
6218 /* do we have system journal? */
6219 if ( flags & RTP_MIDI_JS_FLAG_Y ) {
6220 /* first we need to get the flags & length from the system-journal */
6221 consumed = decode_system_journal( tvb, pinfo, rtp_midi_journal_tree, offset );
6223 if ( -1 == consumed ) {
6224 return offset;
6227 /* seek to optional channel-journals-section */
6228 offset += consumed;
6232 /* do we have channel journal(s)? */
6233 if ( flags & RTP_MIDI_JS_FLAG_A ) {
6234 proto_tree *rtp_midi_chanjournals_tree;
6235 rtp_midi_chanjournals_tree = proto_tree_add_subtree( rtp_midi_journal_tree, tvb, offset, -1, ett_rtp_midi_channeljournals, NULL, RTP_MIDI_TREE_NAME_CHANNEL_JOURNAL );
6237 /* iterate through all the channels specified in header */
6238 for ( i = 0; i <= totchan; i++ ) {
6240 consumed = decode_channel_journal( tvb, pinfo, rtp_midi_chanjournals_tree, offset );
6242 if ( -1 == consumed ) {
6243 return offset;
6246 /* seek to next channel-journal */
6247 offset += consumed;
6252 return tvb_captured_length(tvb);
6258 void
6259 proto_register_rtp_midi( void )
6261 module_t *rtp_midi_module;
6263 static hf_register_info hf[] = {
6265 &hf_rtp_midi_bflag,
6267 "B-Flag",
6268 "rtpmidi.b_flag",
6269 FT_BOOLEAN,
6271 TFS(&rtp_midi_cs_flag_b),
6272 RTP_MIDI_CS_FLAG_B,
6273 NULL, HFILL
6277 &hf_rtp_midi_jflag,
6279 "J-Flag",
6280 "rtpmidi.j_flag",
6281 FT_BOOLEAN,
6283 TFS(&rtp_midi_cs_flag_j),
6284 RTP_MIDI_CS_FLAG_J,
6285 NULL, HFILL
6289 &hf_rtp_midi_zflag,
6291 "Z-Flag",
6292 "rtpmidi.z_flag",
6293 FT_BOOLEAN,
6295 TFS(&rtp_midi_cs_flag_z),
6296 RTP_MIDI_CS_FLAG_Z,
6297 NULL, HFILL
6301 &hf_rtp_midi_pflag,
6303 "P-Flag",
6304 "rtpmidi.p_flag",
6305 FT_BOOLEAN,
6307 TFS(&rtp_midi_cs_flag_p),
6308 RTP_MIDI_CS_FLAG_P,
6309 NULL, HFILL
6313 &hf_rtp_midi_shortlen,
6315 "Command length (short)",
6316 "rtpmidi.cmd_length_short",
6317 FT_UINT8,
6318 BASE_DEC,
6319 NULL,
6320 RTP_MIDI_CS_MASK_SHORTLEN,
6321 NULL, HFILL
6325 &hf_rtp_midi_longlen,
6327 "Command length (long)",
6328 "rtpmidi.cmd_length_long",
6329 FT_UINT16,
6330 BASE_DEC,
6331 NULL,
6332 RTP_MIDI_CS_MASK_LONGLEN,
6333 NULL, HFILL
6337 &hf_rtp_midi_sflag,
6339 "S-Flag",
6340 "rtpmidi.s_flag",
6341 FT_BOOLEAN,
6343 TFS(&rtp_midi_js_flag_s),
6344 RTP_MIDI_JS_FLAG_S,
6345 NULL, HFILL
6349 &hf_rtp_midi_yflag,
6351 "Y-Flag",
6352 "rtpmidi.y_flag",
6353 FT_BOOLEAN,
6355 TFS(&rtp_midi_js_flag_y),
6356 RTP_MIDI_JS_FLAG_Y,
6357 NULL, HFILL
6361 &hf_rtp_midi_aflag,
6363 "A-Flag",
6364 "rtpmidi.a_flag",
6365 FT_BOOLEAN,
6367 TFS(&rtp_midi_js_flag_a),
6368 RTP_MIDI_JS_FLAG_A,
6369 NULL, HFILL
6373 &hf_rtp_midi_hflag,
6375 "H-Flag",
6376 "rtpmidi.h_flag",
6377 FT_BOOLEAN,
6379 TFS(&rtp_midi_js_flag_h),
6380 RTP_MIDI_JS_FLAG_H,
6381 NULL, HFILL
6385 &hf_rtp_midi_totchan,
6387 "Total channels",
6388 "rtpmidi.total_channels",
6389 FT_UINT8,
6390 BASE_DEC,
6391 VALS(rtp_midi_js_tot_channels),
6392 RTP_MIDI_JS_MASK_TOTALCHANNELS,
6393 NULL, HFILL
6397 &hf_rtp_midi_check_seq_num,
6399 "Checkpoint Packet Seqnum",
6400 "rtpmidi.check_Seq_num",
6401 FT_UINT16,
6402 BASE_DEC,
6403 NULL,
6404 0x00,
6405 NULL, HFILL
6409 &hf_rtp_midi_deltatime1,
6411 "Delta Time (one octet)",
6412 "rtpmidi.deltatime_1",
6413 FT_UINT8,
6414 BASE_HEX,
6415 NULL,
6416 0x7f,
6417 NULL, HFILL
6421 &hf_rtp_midi_deltatime2,
6423 "Delta Time (two octets)",
6424 "rtpmidi.deltatime_2",
6425 FT_UINT16,
6426 BASE_HEX,
6427 NULL,
6428 0x7f7f,
6429 NULL, HFILL
6433 &hf_rtp_midi_deltatime3,
6435 "Delta Time (three octets)",
6436 "rtpmidi.deltatime_3",
6437 FT_UINT24,
6438 BASE_HEX,
6439 NULL,
6440 0x7f7f7f,
6441 NULL, HFILL
6445 &hf_rtp_midi_deltatime4,
6447 "Delta Time (four octets)",
6448 "rtpmidi.deltatime_4",
6449 FT_UINT32,
6450 BASE_HEX,
6451 NULL,
6452 0x7f7f7f7f,
6453 NULL, HFILL
6457 &hf_rtp_midi_channel_status,
6459 "Channel Status",
6460 "rtpmidi.channel_status",
6461 FT_UINT8,
6462 BASE_HEX,
6463 VALS(rtp_midi_channel_status),
6464 0xf0,
6465 NULL, HFILL
6469 &hf_rtp_midi_common_status,
6471 "Common Status",
6472 "rtpmidi.common_status",
6473 FT_UINT8,
6474 BASE_HEX,
6475 VALS(rtp_midi_common_status),
6476 0x0,
6477 NULL, HFILL
6481 &hf_rtp_midi_channel,
6483 "Channel",
6484 "rtpmidi.channel",
6485 FT_UINT8,
6486 BASE_HEX,
6487 VALS(rtp_midi_channels),
6488 0x0f,
6489 NULL, HFILL
6493 &hf_rtp_midi_note,
6495 "Note",
6496 "rtpmidi.note",
6497 FT_UINT8,
6498 BASE_DEC | BASE_EXT_STRING,
6499 &rtp_midi_note_values_ext,
6500 0x7f,
6501 NULL, HFILL
6505 &hf_rtp_midi_velocity,
6507 "Velocity",
6508 "rtpmidi.velocity",
6509 FT_UINT8,
6510 BASE_DEC,
6511 NULL,
6512 0x7f,
6513 NULL, HFILL
6517 &hf_rtp_midi_pressure,
6519 "Pressure",
6520 "rtpmidi.pressure",
6521 FT_UINT8,
6522 BASE_DEC,
6523 NULL,
6524 0x7f,
6525 NULL, HFILL
6529 &hf_rtp_midi_controller,
6531 "Controller",
6532 "rtpmidi.controller",
6533 FT_UINT8,
6534 BASE_DEC | BASE_EXT_STRING,
6535 &rtp_midi_controller_values_ext,
6536 0x7f,
6537 NULL, HFILL
6541 &hf_rtp_midi_controller_value,
6543 "Value",
6544 "rtpmidi.controller_value",
6545 FT_UINT8,
6546 BASE_DEC,
6547 NULL,
6548 0x7f,
6549 NULL, HFILL
6553 &hf_rtp_midi_program,
6555 "Program",
6556 "rtpmidi.program",
6557 FT_UINT8,
6558 BASE_DEC,
6559 NULL,
6560 0x7f,
6561 NULL, HFILL
6565 &hf_rtp_midi_channel_pressure,
6567 "Pressure",
6568 "rtpmidi.channel_pressure",
6569 FT_UINT8,
6570 BASE_DEC,
6571 NULL,
6572 0x7f,
6573 NULL, HFILL
6577 &hf_rtp_midi_pitch_bend,
6579 "Pitch Bend",
6580 "rtpmidi.pitch_bend",
6581 FT_UINT16,
6582 BASE_DEC,
6583 NULL,
6584 0x7f7f,
6585 NULL, HFILL
6588 #if 0
6590 &hf_rtp_midi_pitch_bend_truncated,
6592 "Pitch Bend (truncated)",
6593 "rtpmidi.pitch_bend_truncated",
6594 FT_UINT8,
6595 BASE_DEC,
6596 NULL,
6597 0x7f,
6598 NULL, HFILL
6601 #endif
6603 &hf_rtp_midi_manu_short,
6605 "Manufacturer (short)",
6606 "rtpmidi.manufacturer_short",
6607 FT_UINT8,
6608 BASE_HEX | BASE_EXT_STRING,
6609 &rtp_midi_manu_short_values_ext,
6610 0x7f,
6611 NULL, HFILL
6615 &hf_rtp_midi_manu_long,
6617 "Manufacturer (long)",
6618 "rtpmidi.manufacturer_long",
6619 FT_UINT16,
6620 BASE_HEX | BASE_EXT_STRING,
6621 &rtp_midi_manu_long_values_ext,
6622 0x7f7f,
6623 NULL, HFILL
6627 &hf_rtp_midi_sysjour_toc_s,
6629 "System-Journal TOC-S-Flag",
6630 "rtpmidi.sysjour_toc_s",
6631 FT_BOOLEAN,
6633 TFS(&rtp_midi_js_flag_s),
6634 RTP_MIDI_SJ_FLAG_S,
6635 NULL, HFILL
6639 &hf_rtp_midi_sysjour_toc_d,
6641 "System-Journal TOC-D-Flag",
6642 "rtpmidi.sysjour_toc_d",
6643 FT_BOOLEAN,
6645 TFS(&rtp_midi_sj_flag_d),
6646 RTP_MIDI_SJ_FLAG_D,
6647 NULL, HFILL
6651 &hf_rtp_midi_sysjour_toc_v,
6653 "System-Journal TOC-V-Flag",
6654 "rtpmidi.sysjour_toc_v",
6655 FT_BOOLEAN,
6657 TFS(&rtp_midi_sj_flag_v),
6658 RTP_MIDI_SJ_FLAG_V,
6659 NULL, HFILL
6663 &hf_rtp_midi_sysjour_toc_q,
6665 "System-Journal TOC-Q-Flag",
6666 "rtpmidi.sysjour_toc_q",
6667 FT_BOOLEAN,
6669 TFS(&rtp_midi_sj_flag_q),
6670 RTP_MIDI_SJ_FLAG_Q,
6671 NULL, HFILL
6675 &hf_rtp_midi_sysjour_toc_f,
6677 "System-Journal TOC-F-Flag",
6678 "rtpmidi.sysjour_toc_f",
6679 FT_BOOLEAN,
6681 TFS(&rtp_midi_sj_flag_f),
6682 RTP_MIDI_SJ_FLAG_F,
6683 NULL, HFILL
6687 &hf_rtp_midi_sysjour_toc_x,
6689 "System-Journal TOC-X-Flag",
6690 "rtpmidi.sysjour_toc_x",
6691 FT_BOOLEAN,
6693 TFS(&rtp_midi_sj_flag_x),
6694 RTP_MIDI_SJ_FLAG_X,
6695 NULL, HFILL
6699 &hf_rtp_midi_sysjour_len,
6701 "System-Journal-Length",
6702 "rtpmidi.cmd_sysjour_len",
6703 FT_UINT16,
6704 BASE_DEC,
6705 NULL,
6706 RTP_MIDI_SJ_MASK_LENGTH,
6707 NULL, HFILL
6711 &hf_rtp_midi_chanjour_sflag,
6713 "Channel-Journal S-Flag",
6714 "rtpmidi.chanjour_s",
6715 FT_BOOLEAN,
6717 TFS(&rtp_midi_js_flag_s),
6718 0x800000,
6719 NULL, HFILL
6723 &hf_rtp_midi_chanjour_chan,
6725 "Channel",
6726 "rtpmidi.chanjour_channel",
6727 FT_UINT24,
6728 BASE_HEX,
6729 VALS(rtp_midi_channels),
6730 0x780000,
6731 NULL, HFILL
6735 &hf_rtp_midi_chanjour_hflag,
6737 "Channel-Journal H-Flag",
6738 "rtpmidi.chanjour_h",
6739 FT_BOOLEAN,
6741 TFS(&rtp_midi_js_flag_h),
6742 0x040000,
6743 NULL, HFILL
6747 &hf_rtp_midi_chanjour_len,
6749 "Channel-Journal-Length",
6750 "rtpmidi.cmd_chanjour_len",
6751 FT_UINT24,
6752 BASE_DEC,
6753 NULL,
6754 0x03FF00,
6755 NULL, HFILL
6759 &hf_rtp_midi_chanjour_toc_p,
6761 "Channel-Journal TOC-P-Flag",
6762 "rtpmidi.chanjour_toc_p",
6763 FT_BOOLEAN,
6765 TFS(&rtp_midi_cj_flag_p),
6766 0x000080,
6767 NULL, HFILL
6771 &hf_rtp_midi_chanjour_toc_c,
6773 "Channel-Journal TOC-C-Flag",
6774 "rtpmidi.chanjour_toc_c",
6775 FT_BOOLEAN,
6777 TFS(&rtp_midi_cj_flag_c),
6778 0x000040,
6779 NULL, HFILL
6783 &hf_rtp_midi_chanjour_toc_m,
6785 "Channel-Journal TOC-M-Flag",
6786 "rtpmidi.chanjour_toc_m",
6787 FT_BOOLEAN,
6789 TFS(&rtp_midi_cj_flag_m),
6790 0x000020,
6791 NULL, HFILL
6795 &hf_rtp_midi_chanjour_toc_w,
6797 "Channel-Journal TOC-W-Flag",
6798 "rtpmidi.chanjour_toc_w",
6799 FT_BOOLEAN,
6801 TFS(&rtp_midi_cj_flag_w),
6802 0x000010,
6803 NULL, HFILL
6807 &hf_rtp_midi_chanjour_toc_n,
6809 "Channel-Journal TOC-N-Flag",
6810 "rtpmidi.chanjour_toc_n",
6811 FT_BOOLEAN,
6813 TFS(&rtp_midi_cj_flag_n),
6814 0x000008,
6815 NULL, HFILL
6819 &hf_rtp_midi_chanjour_toc_e,
6821 "Channel-Journal TOC-E-Flag",
6822 "rtpmidi.chanjour_toc_e",
6823 FT_BOOLEAN,
6825 TFS(&rtp_midi_cj_flag_e),
6826 0x000004,
6827 NULL, HFILL
6831 &hf_rtp_midi_chanjour_toc_t,
6833 "Channel-Journal TOC-T-Flag",
6834 "rtpmidi.chanjour_toc_t",
6835 FT_BOOLEAN,
6837 TFS(&rtp_midi_cj_flag_t),
6838 0x000002,
6839 NULL, HFILL
6843 &hf_rtp_midi_chanjour_toc_a,
6845 "Channel-Journal TOC-A-Flag",
6846 "rtpmidi.chanjour_toc_a",
6847 FT_BOOLEAN,
6849 TFS(&rtp_midi_cj_flag_a),
6850 0x000001,
6851 NULL, HFILL
6856 &hf_rtp_midi_cj_chapter_p_sflag,
6858 "Chapter P S-Flag",
6859 "rtpmidi.cj_chapter_p_sflag",
6860 FT_BOOLEAN,
6862 TFS(&rtp_midi_js_flag_s),
6863 0x80,
6864 NULL, HFILL
6869 &hf_rtp_midi_cj_chapter_p_program,
6871 "Chapter P Program",
6872 "rtpmidi.cj_chapter_p_program",
6873 FT_UINT8,
6874 BASE_DEC,
6875 NULL,
6876 0x7f,
6877 NULL, HFILL
6882 &hf_rtp_midi_cj_chapter_p_bflag,
6884 "Chapter P B-Flag",
6885 "rtpmidi.cj_chapter_p_bflag",
6886 FT_BOOLEAN,
6888 NULL,
6889 0x80,
6890 NULL, HFILL
6895 &hf_rtp_midi_cj_chapter_p_bank_msb,
6897 "Chapter P Bank-MSB",
6898 "rtpmidi.cj_chapter_p_bank_msb",
6899 FT_UINT8,
6900 BASE_HEX,
6901 NULL,
6902 0x7f,
6903 NULL, HFILL
6908 &hf_rtp_midi_cj_chapter_p_xflag,
6910 "Chapter P X-Flag",
6911 "rtpmidi.cj_chapter_p_xflag",
6912 FT_BOOLEAN,
6914 TFS(&rtp_midi_cj_chapter_p_log_flag_x),
6915 0x80,
6916 NULL, HFILL
6920 &hf_rtp_midi_cj_chapter_p_bank_lsb,
6922 "Chapter P Bank-LSB",
6923 "rtpmidi.cj_chapter_p_bank_lsb",
6924 FT_UINT8,
6925 BASE_HEX,
6926 NULL,
6927 0x7f,
6928 NULL, HFILL
6933 &hf_rtp_midi_cj_chapter_c_sflag,
6935 "Chapter C S-Flag",
6936 "rtpmidi.cj_chapter_c_sflag",
6937 FT_BOOLEAN,
6939 TFS(&rtp_midi_js_flag_s),
6940 0x80,
6941 NULL, HFILL
6946 &hf_rtp_midi_cj_chapter_c_length,
6948 "Chapter C Length",
6949 "rtpmidi.cj_chapter_c_length",
6950 FT_UINT8,
6951 BASE_DEC,
6952 NULL,
6953 0x7f,
6954 NULL, HFILL
6959 &hf_rtp_midi_cj_chapter_c_number,
6961 "Chapter C Number",
6962 "rtpmidi.cj_chapter_c_number",
6963 FT_UINT8,
6964 BASE_DEC | BASE_EXT_STRING,
6965 &rtp_midi_controller_values_ext,
6966 0x7f,
6967 NULL, HFILL
6972 &hf_rtp_midi_cj_chapter_c_aflag,
6974 "Chapter C A-Flag",
6975 "rtpmidi.cj_chapter_c_aflag",
6976 FT_BOOLEAN,
6978 TFS(&rtp_midi_cj_chapter_c_flag_a),
6979 0x80,
6980 NULL, HFILL
6985 &hf_rtp_midi_cj_chapter_c_tflag,
6987 "Chapter C T-Flag",
6988 "rtpmidi.cj_chapter_c_tflag",
6989 FT_BOOLEAN,
6991 NULL,
6992 0x40,
6993 NULL, HFILL
6998 &hf_rtp_midi_cj_chapter_c_value,
7000 "Chapter C Value",
7001 "rtpmidi.cj_chapter_c_value",
7002 FT_UINT8,
7003 BASE_HEX,
7004 NULL,
7005 0x7f,
7006 NULL, HFILL
7011 &hf_rtp_midi_cj_chapter_c_alt,
7013 "Chapter C Alt",
7014 "rtpmidi.cj_chapter_c_alt",
7015 FT_UINT8,
7016 BASE_HEX,
7017 NULL,
7018 0x3f,
7019 NULL, HFILL
7024 &hf_rtp_midi_cj_chapter_m_sflag,
7026 "Chapter M S-Flag",
7027 "rtpmidi.cj_chapter_m_sflag",
7028 FT_BOOLEAN,
7030 TFS(&rtp_midi_js_flag_s),
7031 0x8000,
7032 NULL, HFILL
7037 &hf_rtp_midi_cj_chapter_m_pflag,
7039 "Chapter M P-Flag",
7040 "rtpmidi.cj_chapter_m_pflag",
7041 FT_BOOLEAN,
7043 TFS(&rtp_midi_cj_chapter_m_flag_p),
7044 0x4000,
7045 NULL, HFILL
7050 &hf_rtp_midi_cj_chapter_m_eflag,
7052 "Chapter M E-Flag",
7053 "rtpmidi.cj_chapter_m_eflag",
7054 FT_BOOLEAN,
7056 TFS(&rtp_midi_cj_chapter_m_flag_e),
7057 0x2000,
7058 NULL, HFILL
7063 &hf_rtp_midi_cj_chapter_m_uflag,
7065 "Chapter M U-Flag",
7066 "rtpmidi.cj_chapter_m_uflag",
7067 FT_BOOLEAN,
7069 TFS(&rtp_midi_cj_chapter_m_flag_u),
7070 0x1000,
7071 NULL, HFILL
7076 &hf_rtp_midi_cj_chapter_m_wflag,
7078 "Chapter M W-Flag",
7079 "rtpmidi.cj_chapter_m_wflag",
7080 FT_BOOLEAN,
7082 TFS(&rtp_midi_cj_chapter_m_flag_w),
7083 0x0800,
7084 NULL, HFILL
7089 &hf_rtp_midi_cj_chapter_m_zflag,
7091 "Chapter M Z-Flag",
7092 "rtpmidi.cj_chapter_m_zflag",
7093 FT_BOOLEAN,
7095 TFS(&rtp_midi_cj_chapter_m_flag_z),
7096 0x0400,
7097 NULL, HFILL
7102 &hf_rtp_midi_cj_chapter_m_length,
7104 "Chapter M Length",
7105 "rtpmidi.cj_chapter_m_length",
7106 FT_UINT16,
7107 BASE_DEC,
7108 NULL,
7109 0x03ff,
7110 NULL, HFILL
7115 &hf_rtp_midi_cj_chapter_m_qflag,
7117 "Chapter M Q-Flag",
7118 "rtpmidi.cj_chapter_m_qflag",
7119 FT_BOOLEAN,
7121 TFS(&rtp_midi_cj_chapter_m_flag_q),
7122 0x80,
7123 NULL, HFILL
7128 &hf_rtp_midi_cj_chapter_m_pending,
7130 "Chapter M Pending",
7131 "rtpmidi.cj_chapter_m_pending",
7132 FT_UINT8,
7133 BASE_HEX,
7134 NULL,
7135 0x7f,
7136 NULL, HFILL
7141 &hf_rtp_midi_cj_chapter_m_log_sflag,
7143 "Chapter M Log S-Flag",
7144 "rtpmidi.cj_chapter_m_log_sflag",
7145 FT_BOOLEAN,
7147 TFS(&rtp_midi_js_flag_s),
7148 0x80,
7149 NULL, HFILL
7154 &hf_rtp_midi_cj_chapter_m_log_pnum_lsb,
7156 "Chapter M Log PNUM-LSB",
7157 "rtpmidi.cj_chapter_m_log_pnum_lsb",
7158 FT_UINT8,
7159 BASE_HEX,
7160 NULL,
7161 0x7f,
7162 NULL, HFILL
7167 &hf_rtp_midi_cj_chapter_m_log_qflag,
7169 "Chapter M Log Q-Flag",
7170 "rtpmidi.cj_chapter_m_log_qflag",
7171 FT_BOOLEAN,
7173 TFS(&rtp_midi_cj_chapter_m_log_flag_q),
7174 0x80,
7175 NULL, HFILL
7180 &hf_rtp_midi_cj_chapter_m_log_pnum_msb,
7182 "Chapter M Log PNUM-MSB",
7183 "rtpmidi.cj_chapter_m_log_pnum_msb",
7184 FT_UINT8,
7185 BASE_HEX,
7186 NULL,
7187 0x7f,
7188 NULL, HFILL
7193 &hf_rtp_midi_cj_chapter_m_log_jflag,
7195 "Chapter M Log J-Flag",
7196 "rtpmidi.cj_chapter_m_log_jflag",
7197 FT_BOOLEAN,
7199 TFS(&rtp_midi_cj_chapter_m_log_flag_j),
7200 RTP_MIDI_CJ_CHAPTER_M_FLAG_J,
7201 NULL, HFILL
7206 &hf_rtp_midi_cj_chapter_m_log_kflag,
7208 "Chapter M Log K-Flag",
7209 "rtpmidi.cj_chapter_m_log_kflag",
7210 FT_BOOLEAN,
7212 TFS(&rtp_midi_cj_chapter_m_log_flag_k),
7213 RTP_MIDI_CJ_CHAPTER_M_FLAG_K,
7214 NULL, HFILL
7219 &hf_rtp_midi_cj_chapter_m_log_lflag,
7221 "Chapter M Log L-Flag",
7222 "rtpmidi.cj_chapter_m_log_lflag",
7223 FT_BOOLEAN,
7225 TFS(&rtp_midi_cj_chapter_m_log_flag_l),
7226 RTP_MIDI_CJ_CHAPTER_M_FLAG_L,
7227 NULL, HFILL
7232 &hf_rtp_midi_cj_chapter_m_log_mflag,
7234 "Chapter M Log M-Flag",
7235 "rtpmidi.cj_chapter_m_log_mflag",
7236 FT_BOOLEAN,
7238 TFS(&rtp_midi_cj_chapter_m_log_flag_m),
7239 RTP_MIDI_CJ_CHAPTER_M_FLAG_M,
7240 NULL, HFILL
7245 &hf_rtp_midi_cj_chapter_m_log_nflag,
7247 "Chapter M Log N-Flag",
7248 "rtpmidi.cj_chapter_m_log_nflag",
7249 FT_BOOLEAN,
7251 TFS(&rtp_midi_cj_chapter_m_log_flag_n),
7252 RTP_MIDI_CJ_CHAPTER_M_FLAG_N,
7253 NULL, HFILL
7258 &hf_rtp_midi_cj_chapter_m_log_tflag,
7260 "Chapter M Log T-Flag",
7261 "rtpmidi.cj_chapter_m_log_tflag",
7262 FT_BOOLEAN,
7264 TFS(&rtp_midi_cj_chapter_m_log_flag_t),
7265 RTP_MIDI_CJ_CHAPTER_M_FLAG_T,
7266 NULL, HFILL
7271 &hf_rtp_midi_cj_chapter_m_log_vflag,
7273 "Chapter M Log V-Flag",
7274 "rtpmidi.cj_chapter_m_log_vflag",
7275 FT_BOOLEAN,
7277 TFS(&rtp_midi_cj_chapter_m_log_flag_v),
7278 RTP_MIDI_CJ_CHAPTER_M_FLAG_V,
7279 NULL, HFILL
7284 &hf_rtp_midi_cj_chapter_m_log_rflag,
7286 "Chapter M Log R-Flag",
7287 "rtpmidi.cj_chapter_m_log_rflag",
7288 FT_BOOLEAN,
7290 TFS(&rtp_midi_cj_chapter_m_log_flag_r),
7291 RTP_MIDI_CJ_CHAPTER_M_FLAG_R,
7292 NULL, HFILL
7297 &hf_rtp_midi_cj_chapter_m_log_msb_entry,
7299 "Entry MSB",
7300 "rtpmidi.cj_chapter_m_log_msb_entry",
7301 FT_UINT8,
7302 BASE_HEX,
7303 NULL,
7304 0x0,
7305 NULL, HFILL
7310 &hf_rtp_midi_cj_chapter_m_log_msb_x,
7312 "Chapter M Log MSB X-Flag",
7313 "rtpmidi.cj_chapter_m_log_msb_xflag",
7314 FT_BOOLEAN,
7316 TFS(&rtp_midi_cj_chapter_m_log_flag_x),
7317 0x80,
7318 NULL, HFILL
7323 &hf_rtp_midi_cj_chapter_m_log_msb,
7325 "Chapter M Log MSB",
7326 "rtpmidi.cj_chapter_m_log_msb",
7327 FT_UINT8,
7328 BASE_HEX,
7329 NULL,
7330 0x7f,
7331 NULL, HFILL
7336 &hf_rtp_midi_cj_chapter_m_log_lsb_entry,
7338 "Entry LSB",
7339 "rtpmidi.cj_chapter_m_log_lsb_entry",
7340 FT_UINT8,
7341 BASE_HEX,
7342 NULL,
7343 0x0,
7344 NULL, HFILL
7349 &hf_rtp_midi_cj_chapter_m_log_lsb_x,
7351 "Chapter M Log LSB X-Flag",
7352 "rtpmidi.cj_chapter_m_log_lsb_xflag",
7353 FT_BOOLEAN,
7355 TFS(&rtp_midi_cj_chapter_m_log_flag_x),
7356 0x80,
7357 NULL, HFILL
7362 &hf_rtp_midi_cj_chapter_m_log_lsb,
7364 "Chapter M Log LSB",
7365 "rtpmidi.cj_chapter_m_log_lsb",
7366 FT_UINT8,
7367 BASE_HEX,
7368 NULL,
7369 0x7f,
7370 NULL, HFILL
7375 &hf_rtp_midi_cj_chapter_m_log_a_button_g,
7377 "Chapter M Log A-Button G-Flag",
7378 "rtpmidi.cj_chapter_m_log_a_button_gflag",
7379 FT_BOOLEAN,
7381 TFS(&rtp_midi_cj_chapter_m_log_flag_g),
7382 0x8000,
7383 NULL, HFILL
7388 &hf_rtp_midi_cj_chapter_m_log_a_button_x,
7390 "Chapter M Log A-Button X-Flag",
7391 "rtpmidi.cj_chapter_m_log_a_button_xflag",
7392 FT_BOOLEAN,
7394 TFS(&rtp_midi_cj_chapter_m_log_flag_x),
7395 0x4000,
7396 NULL, HFILL
7401 &hf_rtp_midi_cj_chapter_m_log_a_button,
7403 "Chapter M Log A-Button",
7404 "rtpmidi.cj_chapter_m_log_a_button",
7405 FT_UINT16,
7406 BASE_HEX,
7407 NULL,
7408 0x3fff,
7409 NULL, HFILL
7414 &hf_rtp_midi_cj_chapter_m_log_a_button_full,
7416 "A-Button",
7417 "rtpmidi.cj_chapter_m_log_a_button_full",
7418 FT_UINT16,
7419 BASE_HEX,
7420 NULL,
7421 0x0,
7422 NULL, HFILL
7427 &hf_rtp_midi_cj_chapter_m_log_c_button_g,
7429 "Chapter M Log C-Button G-Flag",
7430 "rtpmidi.cj_chapter_m_log_c_button_gflag",
7431 FT_BOOLEAN,
7433 TFS(&rtp_midi_cj_chapter_m_log_flag_g),
7434 0x8000,
7435 NULL, HFILL
7440 &hf_rtp_midi_cj_chapter_m_log_c_button_r,
7442 "Chapter M Log C-Button R-Flag",
7443 "rtpmidi.cj_chapter_m_log_c_button_rflag",
7444 FT_BOOLEAN,
7446 TFS(&rtp_midi_cj_chapter_m_log_flag_r),
7447 0x4000,
7448 NULL, HFILL
7453 &hf_rtp_midi_cj_chapter_m_log_c_button,
7455 "Chapter M Log C-Button",
7456 "rtpmidi.cj_chapter_m_log_c_button",
7457 FT_UINT16,
7458 BASE_HEX,
7459 NULL,
7460 0x3fff,
7461 NULL, HFILL
7466 &hf_rtp_midi_cj_chapter_m_log_c_button_full,
7468 "C-Button",
7469 "rtpmidi.cj_chapter_m_log_c_button_full",
7470 FT_UINT16,
7471 BASE_HEX,
7472 NULL,
7473 0x0,
7474 NULL, HFILL
7479 &hf_rtp_midi_cj_chapter_m_log_count_x,
7481 "Chapter M Log Count X-Flag",
7482 "rtpmidi.cj_chapter_m_log_count_xflag",
7483 FT_BOOLEAN,
7485 TFS(&rtp_midi_cj_chapter_m_log_flag_x),
7486 0x80,
7487 NULL, HFILL
7492 &hf_rtp_midi_cj_chapter_m_log_count,
7494 "Chapter M Log Count",
7495 "rtpmidi.cj_chapter_m_log_count",
7496 FT_UINT8,
7497 BASE_DEC,
7498 NULL,
7499 0x7f,
7500 NULL, HFILL
7505 &hf_rtp_midi_cj_chapter_m_log_count_full,
7507 "Count",
7508 "rtpmidi.cj_chapter_m_log_count_full",
7509 FT_UINT8,
7510 BASE_HEX,
7511 NULL,
7512 0x0,
7513 NULL, HFILL
7518 &hf_rtp_midi_cj_chapter_w_sflag,
7520 "Chapter W S-Flag",
7521 "rtpmidi.cj_chapter_w_sflag",
7522 FT_BOOLEAN,
7524 TFS(&rtp_midi_js_flag_s),
7525 0x80,
7526 NULL, HFILL
7531 &hf_rtp_midi_cj_chapter_w_first,
7533 "Chapter W First",
7534 "rtpmidi.cj_chapter_w_first",
7535 FT_UINT8,
7536 BASE_HEX,
7537 NULL,
7538 0x7f,
7539 NULL, HFILL
7544 &hf_rtp_midi_cj_chapter_w_rflag,
7546 "Chapter W R-Flag",
7547 "rtpmidi.cj_chapter_w_rflag",
7548 FT_BOOLEAN,
7550 TFS(&rtp_midi_cj_chapter_m_log_flag_r),
7551 0x80,
7552 NULL, HFILL
7557 &hf_rtp_midi_cj_chapter_w_second,
7559 "Chapter W Second",
7560 "rtpmidi.cj_chapter_w_second",
7561 FT_UINT8,
7562 BASE_HEX,
7563 NULL,
7564 0x7f,
7565 NULL, HFILL
7570 &hf_rtp_midi_cj_chapter_n_bflag,
7572 "Chapter N B-Flag",
7573 "rtpmidi.cj_chapter_n_bflag",
7574 FT_BOOLEAN,
7576 TFS(&rtp_midi_js_flag_s),
7577 0x8000,
7578 NULL, HFILL
7583 &hf_rtp_midi_cj_chapter_n_len,
7585 "Chapter N Length",
7586 "rtpmidi.cj_chapter_n_length",
7587 FT_UINT16,
7588 BASE_DEC,
7589 NULL,
7590 0x7f00,
7591 NULL, HFILL
7596 &hf_rtp_midi_cj_chapter_n_low,
7598 "Chapter N Low",
7599 "rtpmidi.cj_chapter_n_low",
7600 FT_UINT16,
7601 BASE_DEC,
7602 NULL,
7603 0x00f0,
7604 NULL, HFILL
7609 &hf_rtp_midi_cj_chapter_n_high,
7611 "Chapter N High",
7612 "rtpmidi.cj_chapter_n_high",
7613 FT_UINT16,
7614 BASE_DEC,
7615 NULL,
7616 0x000f,
7617 NULL, HFILL
7622 &hf_rtp_midi_cj_chapter_n_log_sflag,
7624 "Chapter N Log S-Flag",
7625 "rtpmidi.cj_chapter_n_log_sflag",
7626 FT_BOOLEAN,
7628 TFS(&rtp_midi_js_flag_s),
7629 0x80,
7630 NULL, HFILL
7635 &hf_rtp_midi_cj_chapter_n_log_notenum,
7637 "Chapter N Log Note",
7638 "rtpmidi.cj_chapter_n_log_note",
7639 FT_UINT8,
7640 BASE_DEC | BASE_EXT_STRING,
7641 &rtp_midi_note_values_ext,
7642 0x7f,
7643 NULL, HFILL
7648 &hf_rtp_midi_cj_chapter_n_log_yflag,
7650 "Chapter N Log Y-Flag",
7651 "rtpmidi.cj_chapter_n_log_yflag",
7652 FT_BOOLEAN,
7654 TFS(&rtp_midi_cj_chapter_n_log_flag_y),
7655 0x80,
7656 NULL, HFILL
7661 &hf_rtp_midi_cj_chapter_n_log_velocity,
7663 "Chapter N Log Velocity",
7664 "rtpmidi.cj_chapter_n_log_velocity",
7665 FT_UINT8,
7666 BASE_DEC,
7667 NULL,
7668 0x7f,
7669 NULL, HFILL
7674 &hf_rtp_midi_cj_chapter_n_log_octet,
7676 "Chapter N Log Octet",
7677 "rtpmidi.cj_chapter_n_log_octet",
7678 FT_UINT8,
7679 BASE_HEX,
7680 NULL,
7681 0xff,
7682 NULL, HFILL
7687 &hf_rtp_midi_cj_chapter_e_sflag,
7689 "Chapter E S-Flag",
7690 "rtpmidi.cj_chapter_e_sflag",
7691 FT_BOOLEAN,
7693 TFS(&rtp_midi_js_flag_s),
7694 0x80,
7695 NULL, HFILL
7700 &hf_rtp_midi_cj_chapter_e_len,
7702 "Chapter E Length",
7703 "rtpmidi.cj_chapter_e_length",
7704 FT_UINT8,
7705 BASE_DEC,
7706 NULL,
7707 0x7f,
7708 NULL, HFILL
7713 &hf_rtp_midi_cj_chapter_e_log_sflag,
7715 "Chapter E Log S-Flag",
7716 "rtpmidi.cj_chapter_e_log_sflag",
7717 FT_BOOLEAN,
7719 TFS(&rtp_midi_js_flag_s),
7720 0x80,
7721 NULL, HFILL
7726 &hf_rtp_midi_cj_chapter_e_log_notenum,
7728 "Chapter E Log Note",
7729 "rtpmidi.cj_chapter_e_log_note",
7730 FT_UINT8,
7731 BASE_DEC | BASE_EXT_STRING,
7732 &rtp_midi_note_values_ext,
7733 0x7f,
7734 NULL, HFILL
7739 &hf_rtp_midi_cj_chapter_e_log_vflag,
7741 "Chapter N Log V-Flag",
7742 "rtpmidi.cj_chapter_n_log_vflag",
7743 FT_BOOLEAN,
7745 TFS(&rtp_midi_cj_chapter_e_log_flag_v),
7746 0x80,
7747 NULL, HFILL
7752 &hf_rtp_midi_cj_chapter_e_log_velocity,
7754 "Chapter E Log Velocity",
7755 "rtpmidi.cj_chapter_e_log_velocity",
7756 FT_UINT8,
7757 BASE_DEC,
7758 NULL,
7759 0x7f,
7760 NULL, HFILL
7765 &hf_rtp_midi_cj_chapter_e_log_count,
7767 "Chapter E Log Count",
7768 "rtpmidi.cj_chapter_e_log_count",
7769 FT_UINT8,
7770 BASE_DEC,
7771 NULL,
7772 0x7f,
7773 NULL, HFILL
7778 &hf_rtp_midi_cj_chapter_t_channel_aftertouch,
7780 "Channel Aftertouch",
7781 "rtpmidi.cj_chapter_t_channel_aftertouch",
7782 FT_UINT8,
7783 BASE_HEX,
7784 NULL,
7785 0x0,
7786 NULL, HFILL
7791 &hf_rtp_midi_cj_chapter_t_sflag,
7793 "Chapter T S-Flag",
7794 "rtpmidi.cj_chapter_t_sflag",
7795 FT_BOOLEAN,
7797 TFS(&rtp_midi_js_flag_s),
7798 0x80,
7799 NULL, HFILL
7804 &hf_rtp_midi_cj_chapter_t_pressure,
7806 "Chapter T Pressure",
7807 "rtpmidi.cj_chapter_t_pressure",
7808 FT_UINT8,
7809 BASE_DEC,
7810 NULL,
7811 0x7f,
7812 NULL, HFILL
7817 &hf_rtp_midi_cj_chapter_a_sflag,
7819 "Chapter A S-Flag",
7820 "rtpmidi.cj_chapter_a_sflag",
7821 FT_BOOLEAN,
7823 TFS(&rtp_midi_js_flag_s),
7824 0x80,
7825 NULL, HFILL
7830 &hf_rtp_midi_cj_chapter_a_len,
7832 "Chapter A Length",
7833 "rtpmidi.cj_chapter_a_length",
7834 FT_UINT8,
7835 BASE_DEC,
7836 NULL,
7837 0x7f,
7838 NULL, HFILL
7843 &hf_rtp_midi_cj_chapter_a_log_sflag,
7845 "Chapter A Log S-Flag",
7846 "rtpmidi.cj_chapter_a_log_sflag",
7847 FT_BOOLEAN,
7849 TFS(&rtp_midi_js_flag_s),
7850 0x80,
7851 NULL, HFILL
7856 &hf_rtp_midi_cj_chapter_a_log_notenum,
7858 "Chapter A Log Note",
7859 "rtpmidi.cj_chapter_a_log_note",
7860 FT_UINT8,
7861 BASE_DEC | BASE_EXT_STRING,
7862 &rtp_midi_note_values_ext,
7863 0x7f,
7864 NULL, HFILL
7869 &hf_rtp_midi_cj_chapter_a_log_xflag,
7871 "Chapter A Log X-Flag",
7872 "rtpmidi.cj_chapter_a_log_xflag",
7873 FT_BOOLEAN,
7875 TFS(&rtp_midi_cj_chapter_a_log_flag_x),
7876 0x80,
7877 NULL, HFILL
7882 &hf_rtp_midi_cj_chapter_a_log_pressure,
7884 "Chapter A Log Pressure",
7885 "rtpmidi.cj_chapter_a_log_pressure",
7886 FT_UINT8,
7887 BASE_DEC,
7888 NULL,
7889 0x7f,
7890 NULL, HFILL
7895 &hf_rtp_midi_sj_chapter_v,
7897 "Active Sensing",
7898 "rtpmidi.sj_chapter_v",
7899 FT_UINT8,
7900 BASE_HEX,
7901 NULL,
7902 0x0,
7903 NULL, HFILL
7908 &hf_rtp_midi_sj_chapter_v_sflag,
7910 "Chapter V S-Flag",
7911 "rtpmidi.sj_chapter_v_sflag",
7912 FT_BOOLEAN,
7914 TFS(&rtp_midi_js_flag_s),
7915 0x80,
7916 NULL, HFILL
7921 &hf_rtp_midi_sj_chapter_v_count,
7923 "Chapter V Count",
7924 "rtpmidi.sj_chapter_v_count",
7925 FT_UINT8,
7926 BASE_DEC,
7927 NULL,
7928 0x7f,
7929 NULL, HFILL
7934 &hf_rtp_midi_sj_chapter_d_simple_system_commands,
7936 "Simple System Commands",
7937 "rtpmidi.sj_chapter_d_simple_system_commands",
7938 FT_UINT8,
7939 BASE_HEX,
7940 NULL,
7941 0x0,
7942 NULL, HFILL
7947 &hf_rtp_midi_sj_chapter_d_sflag,
7949 "Chapter D S-Flag",
7950 "rtpmidi.sj_chapter_d_sflag",
7951 FT_BOOLEAN,
7953 TFS(&rtp_midi_js_flag_s),
7954 RTP_MIDI_SJ_CHAPTER_D_FLAG_S,
7955 NULL, HFILL
7960 &hf_rtp_midi_sj_chapter_d_bflag,
7962 "Chapter D B-Flag",
7963 "rtpmidi.sj_chapter_d_bflag",
7964 FT_BOOLEAN,
7966 TFS(&rtp_midi_sj_chapter_d_flag_b),
7967 RTP_MIDI_SJ_CHAPTER_D_FLAG_B,
7968 NULL, HFILL
7973 &hf_rtp_midi_sj_chapter_d_gflag,
7975 "Chapter D G-Flag",
7976 "rtpmidi.sj_chapter_d_gflag",
7977 FT_BOOLEAN,
7979 TFS(&rtp_midi_sj_chapter_d_flag_g),
7980 RTP_MIDI_SJ_CHAPTER_D_FLAG_G,
7981 NULL, HFILL
7986 &hf_rtp_midi_sj_chapter_d_hflag,
7988 "Chapter D H-Flag",
7989 "rtpmidi.sj_chapter_d_hflag",
7990 FT_BOOLEAN,
7992 TFS(&rtp_midi_sj_chapter_d_flag_h),
7993 RTP_MIDI_SJ_CHAPTER_D_FLAG_H,
7994 NULL, HFILL
7999 &hf_rtp_midi_sj_chapter_d_jflag,
8001 "Chapter D J-Flag",
8002 "rtpmidi.sj_chapter_d_jflag",
8003 FT_BOOLEAN,
8005 TFS(&rtp_midi_sj_chapter_d_flag_j),
8006 RTP_MIDI_SJ_CHAPTER_D_FLAG_J,
8007 NULL, HFILL
8012 &hf_rtp_midi_sj_chapter_d_kflag,
8014 "Chapter D K-Flag",
8015 "rtpmidi.sj_chapter_d_kflag",
8016 FT_BOOLEAN,
8018 TFS(&rtp_midi_sj_chapter_d_flag_k),
8019 RTP_MIDI_SJ_CHAPTER_D_FLAG_K,
8020 NULL, HFILL
8025 &hf_rtp_midi_sj_chapter_d_yflag,
8027 "Chapter D Y-Flag",
8028 "rtpmidi.sj_chapter_d_yflag",
8029 FT_BOOLEAN,
8031 TFS(&rtp_midi_sj_chapter_d_flag_y),
8032 RTP_MIDI_SJ_CHAPTER_D_FLAG_Y,
8033 NULL, HFILL
8038 &hf_rtp_midi_sj_chapter_d_zflag,
8040 "Chapter D Z-Flag",
8041 "rtpmidi.sj_chapter_d_zflag",
8042 FT_BOOLEAN,
8044 TFS(&rtp_midi_sj_chapter_d_flag_z),
8045 RTP_MIDI_SJ_CHAPTER_D_FLAG_Z,
8046 NULL, HFILL
8051 &hf_rtp_midi_sj_chapter_d_reset,
8053 "Reset Field",
8054 "rtpmidi.cj_chapter_d_reset",
8055 FT_UINT8,
8056 BASE_HEX,
8057 NULL,
8058 0x0,
8059 NULL, HFILL
8064 &hf_rtp_midi_sj_chapter_d_reset_sflag,
8066 "Chapter D Reset S-Flag",
8067 "rtpmidi.sj_chapter_d_reset_sflag",
8068 FT_BOOLEAN,
8070 TFS(&rtp_midi_js_flag_s),
8071 RTP_MIDI_SJ_CHAPTER_D_RESET_FLAG_S,
8072 NULL, HFILL
8077 &hf_rtp_midi_sj_chapter_d_reset_count,
8079 "Chapter D Reset Count",
8080 "rtpmidi.cj_chapter_d_reset_count",
8081 FT_UINT8,
8082 BASE_DEC,
8083 NULL,
8084 RTP_MIDI_SJ_CHAPTER_D_RESET_COUNT,
8085 NULL, HFILL
8090 &hf_rtp_midi_sj_chapter_d_tune,
8092 "Tune Request Field",
8093 "rtpmidi.cj_chapter_d_tune",
8094 FT_UINT8,
8095 BASE_HEX,
8096 NULL,
8097 0x0,
8098 NULL, HFILL
8103 &hf_rtp_midi_sj_chapter_d_tune_sflag,
8105 "Chapter D Tune Request S-Flag",
8106 "rtpmidi.sj_chapter_d_tune_sflag",
8107 FT_BOOLEAN,
8109 TFS(&rtp_midi_js_flag_s),
8110 RTP_MIDI_SJ_CHAPTER_D_TUNE_FLAG_S,
8111 NULL, HFILL
8116 &hf_rtp_midi_sj_chapter_d_tune_count,
8118 "Chapter D Tune Request Count",
8119 "rtpmidi.cj_chapter_d_tune_count",
8120 FT_UINT8,
8121 BASE_DEC,
8122 NULL,
8123 RTP_MIDI_SJ_CHAPTER_D_TUNE_COUNT,
8124 NULL, HFILL
8129 &hf_rtp_midi_sj_chapter_d_song_sel,
8131 "Song Select Field",
8132 "rtpmidi.cj_chapter_d_song_sel",
8133 FT_UINT8,
8134 BASE_HEX,
8135 NULL,
8136 0x0,
8137 NULL, HFILL
8142 &hf_rtp_midi_sj_chapter_d_song_sel_sflag,
8144 "Chapter D Song Select S-Flag",
8145 "rtpmidi.sj_chapter_d_song_sel_sflag",
8146 FT_BOOLEAN,
8148 TFS(&rtp_midi_js_flag_s),
8149 RTP_MIDI_SJ_CHAPTER_D_SONG_SEL_FLAG_S,
8150 NULL, HFILL
8155 &hf_rtp_midi_sj_chapter_d_song_sel_value,
8157 "Chapter D Song Select Value",
8158 "rtpmidi.cj_chapter_d_song_sel_value",
8159 FT_UINT8,
8160 BASE_DEC,
8161 NULL,
8162 RTP_MIDI_SJ_CHAPTER_D_SONG_SEL_VALUE,
8163 NULL, HFILL
8168 &hf_rtp_midi_sj_chapter_d_syscom_sflag,
8170 "Chapter D System Common (F4/F5) S-Flag",
8171 "rtpmidi.sj_chapter_d_syscom_sflag",
8172 FT_BOOLEAN,
8174 TFS(&rtp_midi_js_flag_s),
8175 RTP_MIDI_SJ_CHAPTER_D_SYSCOM_FLAG_S,
8176 NULL, HFILL
8181 &hf_rtp_midi_sj_chapter_d_syscom_cflag,
8183 "Chapter D System Common (F4/F5) C-Flag",
8184 "rtpmidi.sj_chapter_d_syscom_cflag",
8185 FT_BOOLEAN,
8187 TFS(&rtp_midi_sj_chapter_d_syscom_flag_c),
8188 RTP_MIDI_SJ_CHAPTER_D_SYSCOM_FLAG_C,
8189 NULL, HFILL
8193 &hf_rtp_midi_sj_chapter_d_syscom_vflag,
8195 "Chapter D System Common (F4/F5) V-Flag",
8196 "rtpmidi.sj_chapter_d_syscom_vflag",
8197 FT_BOOLEAN,
8199 TFS(&rtp_midi_sj_chapter_d_syscom_flag_v),
8200 RTP_MIDI_SJ_CHAPTER_D_SYSCOM_FLAG_V,
8201 NULL, HFILL
8205 &hf_rtp_midi_sj_chapter_d_syscom_lflag,
8207 "Chapter D System Common (F4/F5) L-Flag",
8208 "rtpmidi.sj_chapter_d_syscom_lflag",
8209 FT_BOOLEAN,
8211 TFS(&rtp_midi_sj_chapter_d_syscom_flag_l),
8212 RTP_MIDI_SJ_CHAPTER_D_SYSCOM_FLAG_L,
8213 NULL, HFILL
8217 &hf_rtp_midi_sj_chapter_d_syscom_dsz,
8219 "Chapter D System Common (F4/F5) DSZ",
8220 "rtpmidi.sj_chapter_d_syscom_dsz",
8221 FT_UINT16,
8222 BASE_DEC,
8223 VALS(rtp_midi_sj_chapter_d_syscom_dsz_values),
8224 RTP_MIDI_SJ_CHAPTER_D_SYSCOM_MASK_DSZ,
8225 NULL, HFILL
8229 &hf_rtp_midi_sj_chapter_d_syscom_length,
8231 "Chapter D System Common (F4/F5) Length",
8232 "rtpmidi.sj_chapter_d_syscom_len",
8233 FT_UINT16,
8234 BASE_DEC,
8235 NULL,
8236 RTP_MIDI_SJ_CHAPTER_D_SYSCOM_MASK_LENGTH,
8237 NULL, HFILL
8241 &hf_rtp_midi_sj_chapter_d_syscom_count,
8243 "Chapter D System Common (F4/F5) Count",
8244 "rtpmidi.sj_chapter_d_syscom_count",
8245 FT_UINT8,
8246 BASE_DEC,
8247 NULL,
8248 RTP_MIDI_SJ_CHAPTER_D_SYSCOM_MASK_COUNT,
8249 NULL, HFILL
8253 &hf_rtp_midi_sj_chapter_d_syscom_value,
8255 "Chapter D System Common (F4/F5) Value",
8256 "rtpmidi.sj_chapter_d_syscom_value",
8257 FT_BYTES,
8258 BASE_NONE,
8259 NULL,
8260 0x00,
8261 NULL, HFILL
8265 &hf_rtp_midi_sj_chapter_d_syscom_legal,
8267 "Chapter D System Common (F4/F5) Legal - for future extension",
8268 "rtpmidi.sj_chapter_d_syscom_legal",
8269 FT_BYTES,
8270 BASE_NONE,
8271 NULL,
8272 0x00,
8273 NULL, HFILL
8277 &hf_rtp_midi_sj_chapter_d_syscom_data,
8279 "Chapter D System Common (F4/F5) Erroneous Data",
8280 "rtpmidi.sj_chapter_d_syscom_data",
8281 FT_BYTES,
8282 BASE_NONE,
8283 NULL,
8284 0x00,
8285 NULL, HFILL
8289 &hf_rtp_midi_sj_chapter_d_sysreal_sflag,
8291 "Chapter D System Realtime (F9/FD) S-Flag",
8292 "rtpmidi.sj_chapter_d_sysreal_sflag",
8293 FT_BOOLEAN,
8295 TFS(&rtp_midi_js_flag_s),
8296 RTP_MIDI_SJ_CHAPTER_D_SYSREAL_FLAG_S,
8297 NULL, HFILL
8301 &hf_rtp_midi_sj_chapter_d_sysreal_cflag,
8303 "Chapter D System Realtime (F9/FF) C-Flag",
8304 "rtpmidi.sj_chapter_d_sysreal_cflag",
8305 FT_BOOLEAN,
8307 TFS(&rtp_midi_sj_chapter_d_syscom_flag_c),
8308 RTP_MIDI_SJ_CHAPTER_D_SYSREAL_FLAG_C,
8309 NULL, HFILL
8313 &hf_rtp_midi_sj_chapter_d_sysreal_lflag,
8315 "Chapter D System Realtime (F9/FD) L-Flag",
8316 "rtpmidi.sj_chapter_d_sysreal_lflag",
8317 FT_BOOLEAN,
8319 TFS(&rtp_midi_sj_chapter_d_syscom_flag_l),
8320 RTP_MIDI_SJ_CHAPTER_D_SYSREAL_FLAG_L,
8321 NULL, HFILL
8325 &hf_rtp_midi_sj_chapter_d_sysreal_length,
8327 "Chapter D System Realtime (F9/FD) Length",
8328 "rtpmidi.sj_chapter_d_sysreal_len",
8329 FT_UINT8,
8330 BASE_DEC,
8331 NULL,
8332 RTP_MIDI_SJ_CHAPTER_D_SYSREAL_MASK_LENGTH,
8333 NULL, HFILL
8337 &hf_rtp_midi_sj_chapter_d_sysreal_count,
8339 "Chapter D System Realtime (F9/FD) Count",
8340 "rtpmidi.sj_chapter_d_sysreal_count",
8341 FT_UINT8,
8342 BASE_DEC,
8343 NULL,
8344 RTP_MIDI_SJ_CHAPTER_D_SYSREAL_MASK_COUNT,
8345 NULL, HFILL
8349 &hf_rtp_midi_sj_chapter_d_sysreal_legal,
8351 "Chapter D System Realtime (F9/FD) Legal - for future extension",
8352 "rtpmidi.sj_chapter_d_sysreal_legal",
8353 FT_BYTES,
8354 BASE_NONE,
8355 NULL,
8356 0x00,
8357 NULL, HFILL
8361 &hf_rtp_midi_sj_chapter_d_sysreal_data,
8363 "Chapter D System Realtime (F9/FD) Erroneous Data",
8364 "rtpmidi.sj_chapter_d_sysreal_data",
8365 FT_BYTES,
8366 BASE_NONE,
8367 NULL,
8368 0x00,
8369 NULL, HFILL
8374 &hf_rtp_midi_sj_chapter_q_sflag,
8376 "Chapter Q Sequencer State S-Flag",
8377 "rtpmidi.sj_chapter_q_sflag",
8378 FT_BOOLEAN,
8380 TFS(&rtp_midi_js_flag_s),
8381 RTP_MIDI_SJ_CHAPTER_Q_FLAG_S,
8382 NULL, HFILL
8387 &hf_rtp_midi_sj_chapter_q_nflag,
8389 "Chapter Q Sequencer State N-Flag",
8390 "rtpmidi.sj_chapter_q_nflag",
8391 FT_BOOLEAN,
8393 TFS(&rtp_midi_sj_chapter_q_flag_n),
8394 RTP_MIDI_SJ_CHAPTER_Q_FLAG_N,
8395 NULL, HFILL
8400 &hf_rtp_midi_sj_chapter_q_dflag,
8402 "Chapter Q Sequencer State D-Flag",
8403 "rtpmidi.sj_chapter_q_dflag",
8404 FT_BOOLEAN,
8406 TFS(&rtp_midi_sj_chapter_q_flag_d),
8407 RTP_MIDI_SJ_CHAPTER_Q_FLAG_D,
8408 NULL, HFILL
8413 &hf_rtp_midi_sj_chapter_q_cflag,
8415 "Chapter Q Sequencer State C-Flag",
8416 "rtpmidi.sj_chapter_q_cflag",
8417 FT_BOOLEAN,
8419 TFS(&rtp_midi_sj_chapter_q_flag_c),
8420 RTP_MIDI_SJ_CHAPTER_Q_FLAG_C,
8421 NULL, HFILL
8425 &hf_rtp_midi_sj_chapter_q_tflag,
8427 "Chapter Q Sequencer State T-Flag",
8428 "rtpmidi.sj_chapter_q_tflag",
8429 FT_BOOLEAN,
8431 TFS(&rtp_midi_sj_chapter_q_flag_t),
8432 RTP_MIDI_SJ_CHAPTER_Q_FLAG_T,
8433 NULL, HFILL
8437 &hf_rtp_midi_sj_chapter_q_top,
8439 "Chapter Q Sequencer State Top",
8440 "rtpmidi.sj_chapter_q_top",
8441 FT_UINT8,
8442 BASE_DEC,
8443 NULL,
8444 RTP_MIDI_SJ_CHAPTER_Q_MASK_TOP,
8445 NULL, HFILL
8449 &hf_rtp_midi_sj_chapter_q_clock,
8451 "Chapter Q Sequencer State Clock",
8452 "rtpmidi.sj_chapter_q_clock",
8453 FT_UINT24,
8454 BASE_DEC,
8455 NULL,
8456 RTP_MIDI_SJ_CHAPTER_Q_MASK_CLOCK,
8457 NULL, HFILL
8462 &hf_rtp_midi_sj_chapter_q_timetools,
8464 "Chapter Q Sequencer State Timetools",
8465 "rtpmidi.sj_chapter_q_timetools",
8466 FT_UINT24,
8467 BASE_DEC,
8468 NULL,
8469 RTP_MIDI_SJ_CHAPTER_Q_MASK_TIMETOOLS,
8470 NULL, HFILL
8475 &hf_rtp_midi_sj_chapter_f_sflag,
8477 "Chapter F MTC S-Flag",
8478 "rtpmidi.sj_chapter_f_sflag",
8479 FT_BOOLEAN,
8481 TFS(&rtp_midi_js_flag_s),
8482 RTP_MIDI_SJ_CHAPTER_F_FLAG_S,
8483 NULL, HFILL
8487 &hf_rtp_midi_sj_chapter_f_cflag,
8489 "Chapter F MTC C-Flag",
8490 "rtpmidi.sj_chapter_f_cflag",
8491 FT_BOOLEAN,
8493 TFS(&rtp_midi_sj_chapter_f_flag_c),
8494 RTP_MIDI_SJ_CHAPTER_F_FLAG_C,
8495 NULL, HFILL
8499 &hf_rtp_midi_sj_chapter_f_pflag,
8501 "Chapter F MTC P-Flag",
8502 "rtpmidi.sj_chapter_f_pflag",
8503 FT_BOOLEAN,
8505 TFS(&rtp_midi_sj_chapter_f_flag_p),
8506 RTP_MIDI_SJ_CHAPTER_F_FLAG_P,
8507 NULL, HFILL
8511 &hf_rtp_midi_sj_chapter_f_qflag,
8513 "Chapter F MTC Q-Flag",
8514 "rtpmidi.sj_chapter_f_qflag",
8515 FT_BOOLEAN,
8517 TFS(&rtp_midi_sj_chapter_f_flag_q),
8518 RTP_MIDI_SJ_CHAPTER_F_FLAG_Q,
8519 NULL, HFILL
8523 &hf_rtp_midi_sj_chapter_f_dflag,
8525 "Chapter F MTC D-Flag",
8526 "rtpmidi.sj_chapter_f_dflag",
8527 FT_BOOLEAN,
8529 TFS(&rtp_midi_sj_chapter_f_flag_d),
8530 RTP_MIDI_SJ_CHAPTER_F_FLAG_D,
8531 NULL, HFILL
8535 &hf_rtp_midi_sj_chapter_f_point,
8537 "Chapter F MTC Point",
8538 "rtpmidi.sj_chapter_f_point",
8539 FT_UINT8,
8540 BASE_DEC,
8541 NULL,
8542 RTP_MIDI_SJ_CHAPTER_F_MASK_POINT,
8543 NULL, HFILL
8547 &hf_rtp_midi_sj_chapter_f_complete,
8549 "Complete field",
8550 "rtpmidi.sj_chapter_f_complete",
8551 FT_UINT32,
8552 BASE_HEX,
8553 NULL,
8554 0x0,
8555 NULL, HFILL
8559 &hf_rtp_midi_sj_chapter_f_partial,
8561 "Partial field",
8562 "rtpmidi.sj_chapter_f_partial",
8563 FT_UINT32,
8564 BASE_HEX,
8565 NULL,
8566 0x0,
8567 NULL, HFILL
8571 &hf_rtp_midi_sj_chapter_f_mt0,
8573 "Chapter F MTC MT0",
8574 "rtpmidi.sj_chapter_f_mt0",
8575 FT_UINT32,
8576 BASE_HEX,
8577 NULL,
8578 RTP_MIDI_SJ_CHAPTER_F_MASK_MT0,
8579 NULL, HFILL
8583 &hf_rtp_midi_sj_chapter_f_mt1,
8585 "Chapter F MTC MT1",
8586 "rtpmidi.sj_chapter_f_mt1",
8587 FT_UINT32,
8588 BASE_HEX,
8589 NULL,
8590 RTP_MIDI_SJ_CHAPTER_F_MASK_MT1,
8591 NULL, HFILL
8595 &hf_rtp_midi_sj_chapter_f_mt2,
8597 "Chapter F MTC MT2",
8598 "rtpmidi.sj_chapter_f_mt2",
8599 FT_UINT32,
8600 BASE_HEX,
8601 NULL,
8602 RTP_MIDI_SJ_CHAPTER_F_MASK_MT2,
8603 NULL, HFILL
8607 &hf_rtp_midi_sj_chapter_f_mt3,
8609 "Chapter F MTC MT3",
8610 "rtpmidi.sj_chapter_f_mt3",
8611 FT_UINT32,
8612 BASE_HEX,
8613 NULL,
8614 RTP_MIDI_SJ_CHAPTER_F_MASK_MT3,
8615 NULL, HFILL
8619 &hf_rtp_midi_sj_chapter_f_mt4,
8621 "Chapter F MTC MT4",
8622 "rtpmidi.sj_chapter_f_mt4",
8623 FT_UINT32,
8624 BASE_HEX,
8625 NULL,
8626 RTP_MIDI_SJ_CHAPTER_F_MASK_MT4,
8627 NULL, HFILL
8631 &hf_rtp_midi_sj_chapter_f_mt5,
8633 "Chapter F MTC MT5",
8634 "rtpmidi.sj_chapter_f_mt5",
8635 FT_UINT32,
8636 BASE_HEX,
8637 NULL,
8638 RTP_MIDI_SJ_CHAPTER_F_MASK_MT5,
8639 NULL, HFILL
8643 &hf_rtp_midi_sj_chapter_f_mt6,
8645 "Chapter F MTC MT6",
8646 "rtpmidi.sj_chapter_f_mt6",
8647 FT_UINT32,
8648 BASE_HEX,
8649 NULL,
8650 RTP_MIDI_SJ_CHAPTER_F_MASK_MT6,
8651 NULL, HFILL
8655 &hf_rtp_midi_sj_chapter_f_mt7,
8657 "Chapter F MTC MT7",
8658 "rtpmidi.sj_chapter_f_mt7",
8659 FT_UINT32,
8660 BASE_HEX,
8661 NULL,
8662 RTP_MIDI_SJ_CHAPTER_F_MASK_MT7,
8663 NULL, HFILL
8667 &hf_rtp_midi_sj_chapter_f_hr,
8669 "Chapter F MTC Hour",
8670 "rtpmidi.sj_chapter_f_hr",
8671 FT_UINT32,
8672 BASE_HEX,
8673 NULL,
8674 RTP_MIDI_SJ_CHAPTER_F_MASK_HR,
8675 NULL, HFILL
8679 &hf_rtp_midi_sj_chapter_f_mn,
8681 "Chapter F MTC Minute",
8682 "rtpmidi.sj_chapter_f_mn",
8683 FT_UINT32,
8684 BASE_HEX,
8685 NULL,
8686 RTP_MIDI_SJ_CHAPTER_F_MASK_MN,
8687 NULL, HFILL
8691 &hf_rtp_midi_sj_chapter_f_sc,
8693 "Chapter F MTC Second",
8694 "rtpmidi.sj_chapter_f_sc",
8695 FT_UINT32,
8696 BASE_HEX,
8697 NULL,
8698 RTP_MIDI_SJ_CHAPTER_F_MASK_SC,
8699 NULL, HFILL
8703 &hf_rtp_midi_sj_chapter_f_fr,
8705 "Chapter F MTC Frame",
8706 "rtpmidi.sj_chapter_f_fr",
8707 FT_UINT32,
8708 BASE_HEX,
8709 NULL,
8710 RTP_MIDI_SJ_CHAPTER_F_MASK_FR,
8711 NULL, HFILL
8715 &hf_rtp_midi_sj_chapter_x_sflag,
8717 "Chapter X Sysex S-Flag",
8718 "rtpmidi.sj_chapter_x_sflag",
8719 FT_BOOLEAN,
8721 TFS(&rtp_midi_js_flag_s),
8722 RTP_MIDI_SJ_CHAPTER_X_FLAG_S,
8723 NULL, HFILL
8727 &hf_rtp_midi_sj_chapter_x_tflag,
8729 "Chapter X Sysex T-Flag",
8730 "rtpmidi.sj_chapter_x_tflag",
8731 FT_BOOLEAN,
8733 TFS(&rtp_midi_sj_chapter_x_flag_t),
8734 RTP_MIDI_SJ_CHAPTER_X_FLAG_T,
8735 NULL, HFILL
8739 &hf_rtp_midi_sj_chapter_x_cflag,
8741 "Chapter X Sysex C-Flag",
8742 "rtpmidi.sj_chapter_x_cflag",
8743 FT_BOOLEAN,
8745 TFS(&rtp_midi_sj_chapter_x_flag_c),
8746 RTP_MIDI_SJ_CHAPTER_X_FLAG_C,
8747 NULL, HFILL
8751 &hf_rtp_midi_sj_chapter_x_fflag,
8753 "Chapter X Sysex F-Flag",
8754 "rtpmidi.sj_chapter_x_fflag",
8755 FT_BOOLEAN,
8757 TFS(&rtp_midi_sj_chapter_x_flag_f),
8758 RTP_MIDI_SJ_CHAPTER_X_FLAG_F,
8759 NULL, HFILL
8763 &hf_rtp_midi_sj_chapter_x_dflag,
8765 "Chapter X Sysex D-Flag",
8766 "rtpmidi.sj_chapter_x_dflag",
8767 FT_BOOLEAN,
8769 TFS(&rtp_midi_sj_chapter_x_flag_d),
8770 RTP_MIDI_SJ_CHAPTER_X_FLAG_D,
8771 NULL, HFILL
8775 &hf_rtp_midi_sj_chapter_x_lflag,
8777 "Chapter X Sysex L-Flag",
8778 "rtpmidi.sj_chapter_x_lflag",
8779 FT_BOOLEAN,
8781 TFS(&rtp_midi_sj_chapter_x_flag_l),
8782 RTP_MIDI_SJ_CHAPTER_X_FLAG_L,
8783 NULL, HFILL
8787 &hf_rtp_midi_sj_chapter_x_sta,
8789 "Chapter X Sysex STA",
8790 "rtpmidi.sj_chapter_x_sta",
8791 FT_UINT8,
8792 BASE_HEX,
8793 NULL,
8794 RTP_MIDI_SJ_CHAPTER_X_MASK_STA,
8795 NULL, HFILL
8799 &hf_rtp_midi_sj_chapter_x_tcount,
8801 "Chapter X Sysex TCOUT",
8802 "rtpmidi.sj_chapter_x_tcount",
8803 FT_UINT8,
8804 BASE_DEC,
8805 NULL,
8806 RTP_MIDI_SJ_CHAPTER_X_MASK_TCOUNT,
8807 NULL, HFILL
8811 &hf_rtp_midi_sj_chapter_x_count,
8813 "Chapter X Sysex COUNT",
8814 "rtpmidi.sj_chapter_x_count",
8815 FT_UINT8,
8816 BASE_DEC,
8817 NULL,
8818 RTP_MIDI_SJ_CHAPTER_X_MASK_COUNT,
8819 NULL, HFILL
8823 &hf_rtp_midi_sj_chapter_x_first1,
8825 "Chapter X Sysex FIRST (one octet)",
8826 "rtpmidi.sj_chapter_x_first_1",
8827 FT_UINT8,
8828 BASE_HEX,
8829 NULL,
8830 0x7f,
8831 NULL, HFILL
8835 &hf_rtp_midi_sj_chapter_x_first2,
8837 "Chapter X Sysex FIRST (two octets)",
8838 "rtpmidi.sj_chapter_x_first_2",
8839 FT_UINT16,
8840 BASE_HEX,
8841 NULL,
8842 0x7f7f,
8843 NULL, HFILL
8847 &hf_rtp_midi_sj_chapter_x_first3,
8849 "Chapter X Sysex FIRST (three octets)",
8850 "rtpmidi.sj_chapter_x_first_3",
8851 FT_UINT24,
8852 BASE_HEX,
8853 NULL,
8854 0x7f7f7f,
8855 NULL, HFILL
8859 &hf_rtp_midi_sj_chapter_x_first4,
8861 "Chapter X Sysex FIRST (four octets)",
8862 "rtpmidi.sj_chapter_x_first_4",
8863 FT_UINT32,
8864 BASE_HEX,
8865 NULL,
8866 0x7f7f7f7f,
8867 NULL, HFILL
8871 &hf_rtp_midi_sj_chapter_x_data,
8873 "Chapter X Sysex Data",
8874 "rtpmidi.sj_chapter_x_data",
8875 FT_BYTES,
8876 BASE_NONE,
8877 NULL,
8878 0x00,
8879 NULL, HFILL
8883 &hf_rtp_midi_sj_chapter_x_invalid_data,
8885 "Chapter X Invalid Sysex Data",
8886 "rtpmidi.sj_chapter_x_invalid_data",
8887 FT_BYTES,
8888 BASE_NONE,
8889 NULL,
8890 0x00,
8891 NULL, HFILL
8895 &hf_rtp_midi_quarter_frame_type,
8897 "MTC-quarter-frame-type",
8898 "rtpmidi.mtc_quarter_frame_type",
8899 FT_UINT8,
8900 BASE_HEX,
8901 VALS(rtp_midi_qft_values),
8902 0x70,
8903 NULL, HFILL
8907 &hf_rtp_midi_quarter_frame_value,
8909 "MTC-quarter-frame-value",
8910 "rtpmidi.mtc_quarter_frame_value",
8911 FT_UINT8,
8912 BASE_HEX,
8913 NULL,
8914 0x0f,
8915 NULL, HFILL
8919 &hf_rtp_midi_spp,
8921 "Song Position Pointer",
8922 "rtpmidi.song_position_pointer",
8923 FT_UINT16,
8924 BASE_DEC,
8925 NULL,
8926 0x7f7f,
8927 NULL, HFILL
8930 #if 0
8932 &hf_rtp_midi_spp_truncated,
8934 "Song Position Pointer (truncated)",
8935 "rtpmidi.song_position_pointer_truncated",
8936 FT_UINT8,
8937 BASE_DEC,
8938 NULL,
8939 0x7f,
8940 NULL, HFILL
8943 #endif
8945 &hf_rtp_midi_song_select,
8947 "Song Select",
8948 "rtpmidi.song_select",
8949 FT_UINT8,
8950 BASE_DEC,
8951 NULL,
8952 0x7f,
8953 NULL, HFILL
8957 &hf_rtp_midi_manu_data,
8959 "Manufacturer specific data",
8960 "rtpmidi.manu_data",
8961 FT_BYTES,
8962 BASE_NONE,
8963 NULL,
8964 0x00,
8965 NULL, HFILL
8969 &hf_rtp_midi_edu_data,
8971 "Educational command data",
8972 "rtpmidi.edu_data",
8973 FT_BYTES,
8974 BASE_NONE,
8975 NULL,
8976 0x00,
8977 NULL, HFILL
8981 &hf_rtp_midi_unknown_data,
8983 "Unknown Data",
8984 "rtpmidi.unknown_data",
8985 FT_BYTES,
8986 BASE_NONE,
8987 NULL,
8988 0x00,
8989 NULL, HFILL
8993 &hf_rtp_midi_sysex_common_realtime,
8995 "Sysex Common Realtime",
8996 "rtpmidi.sysex_common_realtime",
8997 FT_UINT8,
8998 BASE_HEX,
8999 VALS(rtp_midi_sysex_common_rt),
9000 0x7f,
9001 NULL, HFILL
9005 &hf_rtp_midi_sysex_common_non_realtime,
9007 "Sysex Common Non-Realtime",
9008 "rtpmidi.sysex_common_non_realtime",
9009 FT_UINT8,
9010 BASE_HEX,
9011 VALS(rtp_midi_sysex_common_nrt),
9012 0x7f,
9013 NULL, HFILL
9017 &hf_rtp_midi_sysex_common_device_id,
9019 "Sysex Common Device ID",
9020 "rtpmidi.sysex_common_device_id",
9021 FT_UINT8,
9022 BASE_HEX,
9023 NULL,
9024 0x7f,
9025 NULL, HFILL
9029 &hf_rtp_midi_sysex_common_nrt_sd_ext,
9031 "Sysex Common Non-Realtime Sample Dump Extension",
9032 "rtpmidi.sysex_common_non_realtime_sample_dump_ext",
9033 FT_UINT8,
9034 BASE_HEX,
9035 VALS(rtp_midi_sysex_common_nrt_sd_ext),
9036 0x7f,
9037 NULL, HFILL
9041 &hf_rtp_midi_sysex_common_nrt_gi,
9043 "Sysex Common Non-Realtime General Information",
9044 "rtpmidi.sysex_common_non_realtime_general_information",
9045 FT_UINT8,
9046 BASE_HEX,
9047 VALS(rtp_midi_sysex_common_nrt_gi),
9048 0x7f,
9049 NULL, HFILL
9053 &hf_rtp_midi_sysex_common_nrt_fd,
9055 "Sysex Common Non-Realtime File Dump",
9056 "rtpmidi.sysex_common_non_realtime_file_dump",
9057 FT_UINT8,
9058 BASE_HEX,
9059 VALS(rtp_midi_sysex_common_nrt_fd),
9060 0x7f,
9061 NULL, HFILL
9065 &hf_rtp_midi_sysex_common_tuning,
9067 "Sysex Common (Non-)Realtime Tuning",
9068 "rtpmidi.sysex_common_tuning",
9069 FT_UINT8,
9070 BASE_HEX,
9071 VALS(rtp_midi_sysex_common_tuning),
9072 0x7f,
9073 NULL, HFILL
9077 &hf_rtp_midi_sysex_common_nrt_gm,
9079 "Sysex Common Non-Realtime General MIDI (GM)",
9080 "rtpmidi.sysex_common_non_realtime_gm",
9081 FT_UINT8,
9082 BASE_HEX,
9083 VALS(rtp_midi_sysex_common_nrt_gm),
9084 0x7f,
9085 NULL, HFILL
9089 &hf_rtp_midi_sysex_common_nrt_dls,
9091 "Sysex Common Non-Realtime Downloadable Sounds (DLS)",
9092 "rtpmidi.sysex_common_non_realtime_dls",
9093 FT_UINT8,
9094 BASE_HEX,
9095 VALS(rtp_midi_sysex_common_nrt_dls),
9096 0x7f,
9097 NULL, HFILL
9101 &hf_rtp_midi_sysex_common_rt_mtc,
9103 "Sysex Common Realtime MTC",
9104 "rtpmidi.sysex_common_realtime_mtc",
9105 FT_UINT8,
9106 BASE_HEX,
9107 VALS(rtp_midi_sysex_common_rt_mtc),
9108 0x7f,
9109 NULL, HFILL
9113 &hf_rtp_midi_sysex_common_rt_sc,
9115 "Sysex Common Realtime Show Control",
9116 "rtpmidi.sysex_common_realtime_sc",
9117 FT_UINT8,
9118 BASE_HEX | BASE_EXT_STRING,
9119 &rtp_midi_sysex_common_rt_show_control_ext,
9120 0x7f,
9121 NULL, HFILL
9125 &hf_rtp_midi_sysex_common_rt_ni,
9127 "Sysex Common Realtime Notation Information",
9128 "rtpmidi.sysex_common_realtime_ni",
9129 FT_UINT8,
9130 BASE_HEX,
9131 VALS(rtp_midi_sysex_common_rt_notations),
9132 0x7f,
9133 NULL, HFILL
9137 &hf_rtp_midi_sysex_common_rt_dc,
9139 "Sysex Common Realtime Device Control",
9140 "rtpmidi.sysex_common_realtime_dc",
9141 FT_UINT8,
9142 BASE_HEX,
9143 VALS(rtp_midi_sysex_common_rt_device_control),
9144 0x7f,
9145 NULL, HFILL
9149 &hf_rtp_midi_sysex_common_rt_mtc_cueing,
9151 "Sysex Common Realtime MTC Cueing",
9152 "rtpmidi.sysex_common_rt_mtc_cue",
9153 FT_UINT8,
9154 BASE_HEX,
9155 VALS(rtp_midi_sysex_common_rt_mtc_cue),
9156 0x7f,
9157 NULL, HFILL
9161 &hf_rtp_midi_sysex_common_nrt_mtc,
9163 "Sysex Common Non-Realtime MTC",
9164 "rtpmidi.sysex_common_nrt_mtc",
9165 FT_UINT8,
9166 BASE_HEX,
9167 VALS(rtp_midi_sysex_common_nrt_mtc),
9168 0x7f,
9169 NULL, HFILL
9173 &hf_rtp_midi_sysex_common_rt_mmc_commands,
9175 "Sysex Common Realtime Machine Control Commands",
9176 "rtpmidi.sysex_common_realtime_mmc_cmds",
9177 FT_UINT8,
9178 BASE_HEX,
9179 VALS(rtp_midi_sysex_common_rt_mmc_commands),
9180 0x7f,
9181 NULL, HFILL
9185 &hf_rtp_midi_sysex_common_rt_mmc_responses,
9187 "Sysex Common Realtime Machine Control Responses",
9188 "rtpmidi.sysex_common_realtime_mmc_resps",
9189 FT_UINT8,
9190 BASE_HEX,
9191 VALS(rtp_midi_sysex_common_rt_mmc_responses),
9192 0x7f,
9193 NULL, HFILL
9197 &hf_rtp_midi_sysex_common_nrt_gi_device_family,
9199 "Sysex Common Non-Realtime General Information Device Family",
9200 "rtpmidi.sysex_common_non_realtime_general_information_device_family",
9201 FT_UINT16,
9202 BASE_HEX,
9203 NULL,
9204 0x7f7f,
9205 NULL, HFILL
9209 &hf_rtp_midi_sysex_common_nrt_gi_device_family_member,
9211 "Sysex Common Non-Realtime General Information Device Family Member",
9212 "rtpmidi.sysex_common_non_realtime_general_information_device_family_member",
9213 FT_UINT16,
9214 BASE_HEX,
9215 NULL,
9216 0x7f7f,
9217 NULL, HFILL
9221 &hf_rtp_midi_sysex_common_nrt_gi_software_rev,
9223 "Sysex Common Non-Realtime General Information Software Revision",
9224 "rtpmidi.sysex_common_non_realtime_general_information_software_revision",
9225 FT_UINT32,
9226 BASE_HEX,
9227 NULL,
9228 0x7f7f7f7f,
9229 NULL, HFILL
9233 &hf_rtp_midi_sysex_common_nrt_sd_packet_number,
9235 "Sysex Common Non-Realtime Sample Dump Packet Number",
9236 "rtpmidi.sysex_common_non_realtime_sample_dump_packet_number",
9237 FT_UINT8,
9238 BASE_DEC,
9239 NULL,
9240 0x7f,
9241 NULL, HFILL
9245 &hf_rtp_midi_sysex_common_nrt_sd_header_sn,
9247 "Sysex Common Non-Realtime Sample Dump Sample Number",
9248 "rtpmidi.sysex_common_non_realtime_sample_dump_sample_number",
9249 FT_UINT16,
9250 BASE_DEC,
9251 NULL,
9252 0x7f7f,
9253 NULL, HFILL
9257 &hf_rtp_midi_sysex_common_nrt_sd_header_sf,
9259 "Sysex Common Non-Realtime Sample Dump Sample Format",
9260 "rtpmidi.sysex_common_non_realtime_sample_dump_sample_format",
9261 FT_UINT8,
9262 BASE_DEC,
9263 NULL,
9264 0x7f,
9265 NULL, HFILL
9269 &hf_rtp_midi_sysex_common_nrt_sd_header_sp,
9271 "Sysex Common Non-Realtime Sample Dump Sample Period",
9272 "rtpmidi.sysex_common_non_realtime_sample_dump_sample_period",
9273 FT_UINT24,
9274 BASE_DEC,
9275 NULL,
9276 0x7f7f7f,
9277 NULL, HFILL
9281 &hf_rtp_midi_sysex_common_nrt_sd_header_sl,
9283 "Sysex Common Non-Realtime Sample Dump Sample Length",
9284 "rtpmidi.sysex_common_non_realtime_sample_dump_sample_length",
9285 FT_UINT24,
9286 BASE_DEC,
9287 NULL,
9288 0x7f7f7f,
9289 NULL, HFILL
9293 &hf_rtp_midi_sysex_common_nrt_sd_header_ls,
9295 "Sysex Common Non-Realtime Sample Dump Loop Start",
9296 "rtpmidi.sysex_common_non_realtime_sample_dump_loop_start",
9297 FT_UINT24,
9298 BASE_DEC,
9299 NULL,
9300 0x7f7f7f,
9301 NULL, HFILL
9305 &hf_rtp_midi_sysex_common_nrt_sd_header_le,
9307 "Sysex Common Non-Realtime Sample Dump Loop End",
9308 "rtpmidi.sysex_common_non_realtime_sample_dump_loop_end",
9309 FT_UINT24,
9310 BASE_DEC,
9311 NULL,
9312 0x7f7f7f,
9313 NULL, HFILL
9317 &hf_rtp_midi_sysex_common_nrt_sd_header_lt,
9319 "Sysex Common Non-Realtime Sample Dump Loop Type",
9320 "rtpmidi.sysex_common_non_realtime_sample_dump_loop_type",
9321 FT_UINT8,
9322 BASE_DEC,
9323 VALS(rtp_midi_sysex_common_nrt_sd_lt),
9324 0x7f,
9325 NULL, HFILL
9329 &hf_rtp_midi_sysex_common_nrt_sd_packet_count,
9331 "Sysex Common Non-Realtime Sample Dump Running Packet Count",
9332 "rtpmidi.sysex_common_non_realtime_sample_dump_packet_count",
9333 FT_UINT8,
9334 BASE_DEC,
9335 NULL,
9336 0x7f,
9337 NULL, HFILL
9341 &hf_rtp_midi_sysex_common_nrt_sd_packet_check,
9343 "Sysex Common Non-Realtime Sample Dump Checksum",
9344 "rtpmidi.sysex_common_non_realtime_sample_dump_checksum",
9345 FT_UINT8,
9346 BASE_HEX,
9347 NULL,
9348 0x7f,
9349 NULL, HFILL
9353 &hf_rtp_midi_sysex_common_nrt_sd_packet_data,
9355 "Sysex Common Non-Realtime Sample Dump Data Byte",
9356 "rtpmidi.sysex_common_non_realtime_sample_dump_data",
9357 FT_BYTES,
9358 BASE_NONE,
9359 NULL,
9361 NULL, HFILL
9365 &hf_rtp_midi_sysex_common_nrt_sd_ext_ln,
9367 "Sysex Common Non-Realtime Sample Dump LP Transmission Loop Number",
9368 "rtpmidi.sysex_common_non_realtime_sample_dump_lp_trans_ln",
9369 FT_UINT16,
9370 BASE_DEC,
9371 NULL,
9372 0x7f7f,
9373 NULL, HFILL
9377 &hf_rtp_midi_sysex_common_nrt_fd_device_id,
9379 "Sysex Common Non-Realtime File Dump Device ID",
9380 "rtpmidi.sysex_common_non_realtime_fd_device_id",
9381 FT_UINT8,
9382 BASE_HEX,
9383 NULL,
9384 0x7f,
9385 NULL, HFILL
9389 &hf_rtp_midi_sysex_common_nrt_fd_type,
9391 "Sysex Common Non-Realtime File Dump File Type",
9392 "rtpmidi.sysex_common_non_realtime_fd_type",
9393 FT_STRING,
9394 BASE_NONE,
9395 NULL,
9396 0x0,
9397 NULL, HFILL
9401 &hf_rtp_midi_sysex_common_nrt_fd_name,
9403 "Sysex Common Non-Realtime File Dump File Name",
9404 "rtpmidi.sysex_common_non_realtime_fd_name",
9405 FT_STRING,
9406 BASE_NONE,
9407 NULL,
9408 0x0,
9409 NULL, HFILL
9413 &hf_rtp_midi_sysex_common_nrt_fd_length,
9415 "Sysex Common Non-Realtime File Dump Length",
9416 "rtpmidi.sysex_common_non_realtime_fd_length",
9417 FT_UINT32,
9418 BASE_DEC,
9419 NULL,
9420 0x7f7f7f7f,
9421 NULL, HFILL
9425 &hf_rtp_midi_sysex_common_nrt_fd_packet_num,
9427 "Sysex Common Non-Realtime File Packet Number",
9428 "rtpmidi.sysex_common_non_realtime_fd_packet_num",
9429 FT_UINT8,
9430 BASE_DEC,
9431 NULL,
9432 0x7f,
9433 NULL, HFILL
9437 &hf_rtp_midi_sysex_common_nrt_fd_byte_count,
9439 "Sysex Common Non-Realtime File Byte Count",
9440 "rtpmidi.sysex_common_non_realtime_fd_byte_count",
9441 FT_UINT8,
9442 BASE_DEC,
9443 NULL,
9444 0x7f,
9445 NULL, HFILL
9449 &hf_rtp_midi_sysex_common_nrt_fd_packet_data,
9451 "Sysex Common Non-Realtime File Packet Data",
9452 "rtpmidi.sysex_common_non_realtime_fd_packet_data",
9453 FT_BYTES,
9454 BASE_NONE,
9455 NULL,
9456 0x0,
9457 NULL, HFILL
9461 &hf_rtp_midi_sysex_common_nrt_fd_checksum,
9463 "Sysex Common Non-Realtime File Checksum",
9464 "rtpmidi.sysex_common_non_realtime_fd_checksum",
9465 FT_UINT8,
9466 BASE_HEX,
9467 NULL,
9468 0x7f,
9469 NULL, HFILL
9473 &hf_rtp_midi_sysex_common_tune_program,
9475 "Sysex Common (Non-)Realtime Tuning Program",
9476 "rtpmidi.sysex_common_tune_program",
9477 FT_UINT8,
9478 BASE_HEX,
9479 NULL,
9480 0x7f,
9481 NULL, HFILL
9485 &hf_rtp_midi_sysex_common_tune_name,
9487 "Sysex Common (Non-)Realtime Tuning Name",
9488 "rtpmidi.sysex_common_tune_name",
9489 FT_STRING,
9490 BASE_NONE,
9491 NULL,
9492 0x0,
9493 NULL, HFILL
9497 &hf_rtp_midi_sysex_common_tune_freq,
9499 "Sysex Common (Non-)Realtime Tuning Frequency",
9500 "rtpmidi.sysex_common_tune_freq",
9501 FT_UINT24,
9502 BASE_HEX,
9503 NULL,
9504 0x7f7f7f,
9505 NULL, HFILL
9509 &hf_rtp_midi_sysex_common_tune_checksum,
9511 "Sysex Common (Non-)Realtime Tuning Checksum",
9512 "rtpmidi.sysex_common_tune_checksum",
9513 FT_UINT8,
9514 BASE_HEX,
9515 NULL,
9516 0x7f,
9517 NULL, HFILL
9521 &hf_rtp_midi_sysex_common_tune_changes,
9523 "Sysex Common (Non-)Realtime Tuning Changes",
9524 "rtpmidi.sysex_common_tune_changes",
9525 FT_UINT8,
9526 BASE_DEC,
9527 NULL,
9528 0x7f,
9529 NULL, HFILL
9533 &hf_rtp_midi_sysex_common_tune_note,
9535 "Sysex Common (Non-)Realtime Tuning Note",
9536 "rtpmidi.sysex_common_tune_note",
9537 FT_UINT8,
9538 BASE_DEC | BASE_EXT_STRING,
9539 &rtp_midi_note_values_ext,
9540 0x7f,
9541 NULL, HFILL
9545 &hf_rtp_midi_sysex_common_rt_mtc_fm_type,
9547 "Sysex Common Realtime MTC Full Message Type",
9548 "rtpmidi.sysex_common_rt_mtc_fm_type",
9549 FT_UINT8,
9550 BASE_HEX,
9551 VALS(rtp_midi_mtc_fm_type_values),
9552 0x60,
9553 NULL, HFILL
9557 &hf_rtp_midi_sysex_common_rt_mtc_fm_hr,
9559 "Sysex Common Realtime MTC Full Message Hour",
9560 "rtpmidi.sysex_common_rt_mtc_fm_hour",
9561 FT_UINT8,
9562 BASE_DEC,
9563 NULL,
9564 0x1f,
9565 NULL, HFILL
9569 &hf_rtp_midi_sysex_common_rt_mtc_fm_mn,
9571 "Sysex Common Realtime MTC Full Message Minute",
9572 "rtpmidi.sysex_common_rt_mtc_fm_minute",
9573 FT_UINT8,
9574 BASE_DEC,
9575 NULL,
9576 0x7f,
9577 NULL, HFILL
9581 &hf_rtp_midi_sysex_common_rt_mtc_fm_sc,
9583 "Sysex Common Realtime MTC Full Message Second",
9584 "rtpmidi.sysex_common_rt_mtc_fm_second",
9585 FT_UINT8,
9586 BASE_DEC,
9587 NULL,
9588 0x7f,
9589 NULL, HFILL
9593 &hf_rtp_midi_sysex_common_rt_mtc_fm_fr,
9595 "Sysex Common Realtime MTC Full Message Frame",
9596 "rtpmidi.sysex_common_rt_mtc_fm_frame",
9597 FT_UINT8,
9598 BASE_DEC,
9599 NULL,
9600 0x7f,
9601 NULL, HFILL
9605 &hf_rtp_midi_sysex_common_rt_mtc_ub_u1,
9607 "Sysex Common Realtime MTC User Bits U1",
9608 "rtpmidi.sysex_common_rt_mtc_ub_u1",
9609 FT_UINT8,
9610 BASE_HEX,
9611 NULL,
9612 0x0f,
9613 NULL, HFILL
9617 &hf_rtp_midi_sysex_common_rt_mtc_ub_u2,
9619 "Sysex Common Realtime MTC User Bits U2",
9620 "rtpmidi.sysex_common_rt_mtc_ub_u2",
9621 FT_UINT8,
9622 BASE_HEX,
9623 NULL,
9624 0x0f,
9625 NULL, HFILL
9629 &hf_rtp_midi_sysex_common_rt_mtc_ub_u3,
9631 "Sysex Common Realtime MTC User Bits U3",
9632 "rtpmidi.sysex_common_rt_mtc_ub_u3",
9633 FT_UINT8,
9634 BASE_HEX,
9635 NULL,
9636 0x0f,
9637 NULL, HFILL
9641 &hf_rtp_midi_sysex_common_rt_mtc_ub_u4,
9643 "Sysex Common Realtime MTC User Bits U4",
9644 "rtpmidi.sysex_common_rt_mtc_ub_u4",
9645 FT_UINT8,
9646 BASE_HEX,
9647 NULL,
9648 0x0f,
9649 NULL, HFILL
9653 &hf_rtp_midi_sysex_common_rt_mtc_ub_u5,
9655 "Sysex Common Realtime MTC User Bits U5",
9656 "rtpmidi.sysex_common_rt_mtc_ub_u5",
9657 FT_UINT8,
9658 BASE_HEX,
9659 NULL,
9660 0x0f,
9661 NULL, HFILL
9665 &hf_rtp_midi_sysex_common_rt_mtc_ub_u6,
9667 "Sysex Common Realtime MTC User Bits U6",
9668 "rtpmidi.sysex_common_rt_mtc_ub_u6",
9669 FT_UINT8,
9670 BASE_HEX,
9671 NULL,
9672 0x0f,
9673 NULL, HFILL
9677 &hf_rtp_midi_sysex_common_rt_mtc_ub_u7,
9679 "Sysex Common Realtime MTC User Bits U7",
9680 "rtpmidi.sysex_common_rt_mtc_ub_u7",
9681 FT_UINT8,
9682 BASE_HEX,
9683 NULL,
9684 0x0f,
9685 NULL, HFILL
9689 &hf_rtp_midi_sysex_common_rt_mtc_ub_u8,
9691 "Sysex Common Realtime MTC User Bits U8",
9692 "rtpmidi.sysex_common_rt_mtc_ub_u8",
9693 FT_UINT8,
9694 BASE_HEX,
9695 NULL,
9696 0x0f,
9697 NULL, HFILL
9701 &hf_rtp_midi_sysex_common_rt_mtc_ub_u9,
9703 "Sysex Common Realtime MTC User Bits U9",
9704 "rtpmidi.sysex_common_rt_mtc_ub_u9",
9705 FT_UINT8,
9706 BASE_HEX,
9707 NULL,
9708 0x03,
9709 NULL, HFILL
9713 &hf_rtp_midi_sysex_common_nrt_mtc_type,
9715 "Sysex Common Non-Realtime MTC Type",
9716 "rtpmidi.sysex_common_nrt_mtc_type",
9717 FT_UINT8,
9718 BASE_HEX,
9719 VALS(rtp_midi_mtc_fm_type_values),
9720 0x60,
9721 NULL, HFILL
9725 &hf_rtp_midi_sysex_common_nrt_mtc_hr,
9727 "Sysex Common Non-Realtime MTC Hour",
9728 "rtpmidi.sysex_common_nrt_mtc_hour",
9729 FT_UINT8,
9730 BASE_DEC,
9731 NULL,
9732 0x1f,
9733 NULL, HFILL
9737 &hf_rtp_midi_sysex_common_nrt_mtc_mn,
9739 "Sysex Common Non-Realtime MTCMinute",
9740 "rtpmidi.sysex_common_nrt_mtc_minute",
9741 FT_UINT8,
9742 BASE_DEC,
9743 NULL,
9744 0x7f,
9745 NULL, HFILL
9749 &hf_rtp_midi_sysex_common_nrt_mtc_sc,
9751 "Sysex Common Non-Realtime MTC Second",
9752 "rtpmidi.sysex_common_nrt_mtc_second",
9753 FT_UINT8,
9754 BASE_DEC,
9755 NULL,
9756 0x7f,
9757 NULL, HFILL
9761 &hf_rtp_midi_sysex_common_nrt_mtc_fr,
9763 "Sysex Common Non-Realtime MTC Frame",
9764 "rtpmidi.sysex_common_nrt_mtc_frame",
9765 FT_UINT8,
9766 BASE_DEC,
9767 NULL,
9768 0x7f,
9769 NULL, HFILL
9773 &hf_rtp_midi_sysex_common_nrt_mtc_ff,
9775 "Sysex Common Non-Realtime MTC Fractional Frame",
9776 "rtpmidi.sysex_common_nrt_mtc_fract_frame",
9777 FT_UINT8,
9778 BASE_DEC,
9779 NULL,
9780 0x7f,
9781 NULL, HFILL
9785 &hf_rtp_midi_sysex_common_nrt_mtc_enl,
9787 "Sysex Common Non-Realtime MTC Event Number (LSB)",
9788 "rtpmidi.sysex_common_nrt_mtc_en_lsb",
9789 FT_UINT8,
9790 BASE_DEC,
9791 NULL,
9792 0x7f,
9793 NULL, HFILL
9797 &hf_rtp_midi_sysex_common_nrt_mtc_enm,
9799 "Sysex Common Non-Realtime MTC Event Number (MSB)",
9800 "rtpmidi.sysex_common_nrt_mtc_en_msb",
9801 FT_UINT8,
9802 BASE_DEC,
9803 NULL,
9804 0x7f,
9805 NULL, HFILL
9809 &hf_rtp_midi_sysex_common_nrt_mtc_add,
9811 "Sysex Common Non-Realtime MTC Additional Info",
9812 "rtpmidi.sysex_common_nrt_mtc_add",
9813 FT_BYTES,
9814 BASE_NONE,
9815 NULL,
9816 0x0,
9817 NULL, HFILL
9821 &hf_rtp_midi_sysex_common_rt_mtc_cue_enl,
9823 "Sysex Common Realtime MTC Cue Event Number (LSB)",
9824 "rtpmidi.sysex_common_rt_mtc_cue_en_lsb",
9825 FT_UINT8,
9826 BASE_DEC,
9827 NULL,
9828 0x7f,
9829 NULL, HFILL
9833 &hf_rtp_midi_sysex_common_rt_mtc_cue_enm,
9835 "Sysex Common Realtime MTC Cue Event Number (MSB)",
9836 "rtpmidi.sysex_common_rt_mtc_cue_en_msb",
9837 FT_UINT8,
9838 BASE_DEC,
9839 NULL,
9840 0x7f,
9841 NULL, HFILL
9845 &hf_rtp_midi_sysex_common_rt_mtc_cue_add,
9847 "Sysex Common Realtime MTC Cue Additional Info",
9848 "rtpmidi.sysex_common_rt_mtc_cue_add",
9849 FT_BYTES,
9850 BASE_NONE,
9851 NULL,
9852 0x0,
9853 NULL, HFILL
9857 &hf_rtp_midi_sysex_common_rt_ni_bar_num,
9859 "Sysex Common Realtime NI Bar Number",
9860 "rtpmidi.sysex_common_rt_ni_barnum",
9861 FT_UINT16,
9862 BASE_HEX,
9863 NULL,
9864 0x7f7f,
9865 NULL, HFILL
9869 &hf_rtp_midi_sysex_common_rt_ni_bytes,
9871 "Sysex Common Realtime NI Bytes",
9872 "rtpmidi.sysex_common_rt_ni_bytes",
9873 FT_UINT8,
9874 BASE_DEC,
9875 NULL,
9876 0x7f,
9877 NULL, HFILL
9881 &hf_rtp_midi_sysex_common_rt_ni_numerator,
9883 "Sysex Common Realtime NI Numerator",
9884 "rtpmidi.sysex_common_rt_ni_numerator",
9885 FT_UINT8,
9886 BASE_DEC,
9887 NULL,
9888 0x7f,
9889 NULL, HFILL
9893 &hf_rtp_midi_sysex_common_rt_ni_denominator,
9895 "Sysex Common Realtime NI Denominator",
9896 "rtpmidi.sysex_common_rt_ni_denominator",
9897 FT_UINT8,
9898 BASE_DEC,
9899 NULL,
9900 0x7f,
9901 NULL, HFILL
9905 &hf_rtp_midi_sysex_common_rt_ni_midi_clocks,
9907 "Sysex Common Realtime NI MIDI clocks in click",
9908 "rtpmidi.sysex_common_rt_ni_midiclock",
9909 FT_UINT8,
9910 BASE_DEC,
9911 NULL,
9912 0x7f,
9913 NULL, HFILL
9917 &hf_rtp_midi_sysex_common_rt_ni_32nds,
9919 "Sysex Common Realtime NI 32nd notes in MIDI quarter note",
9920 "rtpmidi.sysex_common_rt_ni_32nds",
9921 FT_UINT8,
9922 BASE_DEC,
9923 NULL,
9924 0x7f,
9925 NULL, HFILL
9929 &hf_rtp_midi_sysex_common_rt_dc_volume,
9931 "Sysex Common Realtime DC Volume",
9932 "rtpmidi.sysex_common_rt_dc_volume",
9933 FT_UINT16,
9934 BASE_DEC,
9935 NULL,
9936 0x7f7f,
9937 NULL, HFILL
9941 &hf_rtp_midi_sysex_common_rt_dc_balance,
9943 "Sysex Common Realtime DC Balance",
9944 "rtpmidi.sysex_common_rt_dc_balance",
9945 FT_UINT16,
9946 BASE_DEC,
9947 NULL,
9948 0x7f7f,
9949 NULL, HFILL
9959 static int *ett[] = {
9960 &ett_rtp_midi,
9961 &ett_rtp_midi_commands,
9962 &ett_rtp_midi_journal,
9963 &ett_rtp_midi_command,
9964 &ett_rtp_midi_systemjournal,
9965 &ett_rtp_midi_channeljournals,
9966 &ett_rtp_midi_channelchapters,
9967 &ett_rtp_midi_cj_chapter_p,
9968 &ett_rtp_midi_cj_chapter_c,
9969 &ett_rtp_midi_cj_chapter_c_loglist,
9970 &ett_rtp_midi_cj_chapter_c_logitem,
9971 &ett_rtp_midi_cj_chapter_m,
9972 &ett_rtp_midi_cj_chapter_m_loglist,
9973 &ett_rtp_midi_cj_chapter_m_logitem,
9974 &ett_rtp_midi_cj_chapter_m_log_msb,
9975 &ett_rtp_midi_cj_chapter_m_log_lsb,
9976 &ett_rtp_midi_cj_chapter_m_log_a_button,
9977 &ett_rtp_midi_cj_chapter_m_log_c_button,
9978 &ett_rtp_midi_cj_chapter_m_log_count,
9979 &ett_rtp_midi_cj_chapter_w,
9980 &ett_rtp_midi_cj_chapter_n,
9981 &ett_rtp_midi_cj_chapter_n_loglist,
9982 &ett_rtp_midi_cj_chapter_n_logitem,
9983 &ett_rtp_midi_cj_chapter_n_octets,
9984 &ett_rtp_midi_cj_chapter_e,
9985 &ett_rtp_midi_cj_chapter_e_loglist,
9986 &ett_rtp_midi_cj_chapter_e_logitem,
9987 &ett_rtp_midi_cj_chapter_t,
9988 &ett_rtp_midi_cj_chapter_a,
9989 &ett_rtp_midi_cj_chapter_a_loglist,
9990 &ett_rtp_midi_cj_chapter_a_logitem,
9991 &ett_rtp_midi_systemchapters,
9992 &ett_rtp_midi_sj_chapter_d,
9993 &ett_rtp_midi_sj_chapter_d_field_b,
9994 &ett_rtp_midi_sj_chapter_d_field_g,
9995 &ett_rtp_midi_sj_chapter_d_field_h,
9996 &ett_rtp_midi_sj_chapter_d_field_j,
9997 &ett_rtp_midi_sj_chapter_d_field_k,
9998 &ett_rtp_midi_sj_chapter_d_field_y,
9999 &ett_rtp_midi_sj_chapter_d_field_z,
10000 &ett_rtp_midi_sj_chapter_v,
10001 &ett_rtp_midi_sj_chapter_q,
10002 &ett_rtp_midi_sj_chapter_f,
10003 &ett_rtp_midi_sj_chapter_f_complete,
10004 &ett_rtp_midi_sj_chapter_f_partial,
10005 &ett_rtp_midi_sj_chapter_x,
10006 &ett_rtp_midi_sj_chapter_x_first,
10007 &ett_rtp_midi_sj_chapter_x_data,
10008 &ett_rtp_midi_channeljournal,
10009 &ett_rtp_midi_sysex_data,
10010 &ett_rtp_midi_sysex_common_rt,
10011 &ett_rtp_midi_sysex_common_nrt,
10012 &ett_rtp_midi_sysex_common_tune_note,
10013 &ett_rtp_midi_sysex_manu,
10014 &ett_rtp_midi_sysex_edu
10017 proto_rtp_midi = proto_register_protocol( RTP_MIDI_DISSECTOR_NAME, RTP_MIDI_DISSECTOR_SHORTNAME, RTP_MIDI_DISSECTOR_ABBREVIATION );
10018 proto_register_field_array( proto_rtp_midi, hf, array_length( hf ) );
10019 proto_register_subtree_array( ett, array_length( ett ) );
10021 rtp_midi_module = prefs_register_protocol( proto_rtp_midi, NULL );
10022 prefs_register_obsolete_preference( rtp_midi_module, "midi_payload_type_value");
10023 rtp_midi_handle = register_dissector( RTP_MIDI_DISSECTOR_ABBREVIATION, dissect_rtp_midi, proto_rtp_midi );
10028 void
10029 proto_reg_handoff_rtp_midi( void )
10031 dissector_add_string("rtp_dyn_payload_type", "rtp-midi", rtp_midi_handle);
10032 dissector_add_uint_range_with_preference( "rtp.pt", "", rtp_midi_handle );
10037 * Editor modelines - https://www.wireshark.org/tools/modelines.html
10039 * Local variables:
10040 * c-basic-offset: 8
10041 * tab-width: 8
10042 * indent-tabs-mode: t
10043 * End:
10045 * vi: set shiftwidth=8 tabstop=8 noexpandtab:
10046 * :indentSize=8:tabSize=8:noTabs=false: