Zephyr Project API
4.4.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
midi.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2024 Titouan Christophe
3
*
4
* SPDX-License-Identifier: Apache-2.0
5
*/
6
12
13
#ifndef ZEPHYR_INCLUDE_AUDIO_MIDI_H_
14
#define ZEPHYR_INCLUDE_AUDIO_MIDI_H_
15
16
#ifdef __cplusplus
17
extern
"C"
{
18
#endif
19
20
#include <
stdint.h
>
21
30
43
47
struct
midi_ump
{
48
uint32_t
data
[4];
49
};
50
57
59
#define UMP_MT_UTILITY 0x00
61
#define UMP_MT_SYS_RT_COMMON 0x01
63
#define UMP_MT_MIDI1_CHANNEL_VOICE 0x02
65
#define UMP_MT_DATA_64 0x03
67
#define UMP_MT_MIDI2_CHANNEL_VOICE 0x04
69
#define UMP_MT_DATA_128 0x05
71
#define UMP_MT_FLEX_DATA 0x0d
76
#define UMP_MT_UMP_STREAM 0x0f
78
84
#define UMP_MT(ump) \
85
((ump).data[0] >> 28)
86
91
#define UMP_NUM_WORDS_LOOKUP_TABLE \
92
((0U << 0) | (0U << 2) | (0U << 4) | (1U << 6) | \
93
(1U << 8) | (3U << 10) | (0U << 12) | (0U << 14) | \
94
(1U << 16) | (1U << 18) | (1U << 20) | (2U << 22) | \
95
(2U << 24) | (3U << 26) | (3U << 28) | (3U << 30))
96
102
#define UMP_NUM_WORDS(ump) \
103
(1 + ((UMP_NUM_WORDS_LOOKUP_TABLE >> (2 * UMP_MT(ump))) & 3))
104
109
#define UMP_GROUP(ump) \
110
(((ump).data[0] >> 24) & 0xF)
111
117
#define UMP_MIDI_STATUS(ump) \
118
(((ump).data[0] >> 16) & 0xFF)
119
124
#define UMP_MIDI_COMMAND(ump) \
125
(UMP_MIDI_STATUS(ump) >> 4)
126
130
#define UMP_MIDI_CHANNEL(ump) \
131
(UMP_MIDI_STATUS(ump) & 0xF)
132
136
#define UMP_MIDI1_P1(ump) \
137
(((ump).data[0] >> 8) & 0x7F)
138
142
#define UMP_MIDI1_P2(ump) \
143
((ump).data[0] & 0x7F)
144
154
#define UMP_MIDI1_CHANNEL_VOICE(group, command, channel, p1, p2) \
155
(struct midi_ump) {.data = { \
156
(UMP_MT_MIDI1_CHANNEL_VOICE << 28) \
157
| (((group) & 0x0f) << 24) \
158
| (((command) & 0x0f) << 20) \
159
| (((channel) & 0x0f) << 16) \
160
| (((p1) & 0x7f) << 8) \
161
| ((p2) & 0x7f) \
162
}}
163
172
#define UMP_MIDI_NOTE_OFF 0x8
173
#define UMP_MIDI_NOTE_ON 0x9
174
#define UMP_MIDI_AFTERTOUCH 0xa
175
#define UMP_MIDI_CONTROL_CHANGE 0xb
176
#define UMP_MIDI_PROGRAM_CHANGE 0xc
177
#define UMP_MIDI_CHAN_AFTERTOUCH 0xd
178
#define UMP_MIDI_PITCH_BEND 0xe
180
190
#define UMP_SYS_RT_COMMON(group, status, p1, p2) \
191
(struct midi_ump) {.data = { \
192
(UMP_MT_SYS_RT_COMMON << 28) \
193
| (((group) & 0x0f) << 24) \
194
| ((status) << 16) \
195
| (((p1) & 0x7f) << 8) \
196
| ((p2) & 0x7f) \
197
}}
198
208
#define UMP_SYS_MIDI_TIME_CODE 0xf1
209
#define UMP_SYS_SONG_POSITION 0xf2
210
#define UMP_SYS_SONG_SELECT 0xf3
211
#define UMP_SYS_TUNE_REQUEST 0xf6
212
#define UMP_SYS_TIMING_CLOCK 0xf8
213
#define UMP_SYS_START 0xfa
214
#define UMP_SYS_CONTINUE 0xfb
215
#define UMP_SYS_STOP 0xfc
216
#define UMP_SYS_ACTIVE_SENSING 0xfe
217
#define UMP_SYS_RESET 0xff
219
220
228
234
#define UMP_STREAM_FORMAT(ump) \
235
(((ump).data[0] >> 26) & 0x03)
236
245
247
#define UMP_STREAM_FORMAT_COMPLETE 0x00
249
#define UMP_STREAM_FORMAT_START 0x01
253
#define UMP_STREAM_FORMAT_CONTINUE 0x02
255
#define UMP_STREAM_FORMAT_END 0x03
256
258
264
#define UMP_STREAM_STATUS(ump) \
265
(((ump).data[0] >> 16) & 0x3FF)
266
275
277
#define UMP_STREAM_STATUS_EP_DISCOVERY 0x00
279
#define UMP_STREAM_STATUS_EP_INFO 0x01
281
#define UMP_STREAM_STATUS_DEVICE_IDENT 0x02
283
#define UMP_STREAM_STATUS_EP_NAME 0x03
285
#define UMP_STREAM_STATUS_PROD_ID 0x04
287
#define UMP_STREAM_STATUS_CONF_REQ 0x05
289
#define UMP_STREAM_STATUS_CONF_NOTIF 0x06
291
#define UMP_STREAM_STATUS_FB_DISCOVERY 0x10
293
#define UMP_STREAM_STATUS_FB_INFO 0x11
295
#define UMP_STREAM_STATUS_FB_NAME 0x12
297
304
#define UMP_STREAM_EP_DISCOVERY_FILTER(ump) \
305
((ump).data[1] & 0xFF)
306
316
318
#define UMP_EP_DISC_FILTER_EP_INFO BIT(0)
320
#define UMP_EP_DISC_FILTER_DEVICE_ID BIT(1)
322
#define UMP_EP_DISC_FILTER_EP_NAME BIT(2)
324
#define UMP_EP_DISC_FILTER_PRODUCT_ID BIT(3)
326
#define UMP_EP_DISC_FILTER_STREAM_CFG BIT(4)
328
335
#define UMP_STREAM_FB_DISCOVERY_FILTER(ump) \
336
((ump).data[0] & 0xFF)
337
343
#define UMP_STREAM_FB_DISCOVERY_NUM(ump) \
344
(((ump).data[0] >> 8) & 0xFF)
345
356
#define UMP_FB_DISC_FILTER_INFO BIT(0)
358
#define UMP_FB_DISC_FILTER_NAME BIT(1)
360
362
364
365
#ifdef __cplusplus
366
}
367
#endif
368
369
#endif
stdint.h
uint32_t
__UINT32_TYPE__ uint32_t
Definition
stdint.h:90
midi_ump
Universal MIDI Packet container.
Definition
midi.h:47
midi_ump::data
uint32_t data[4]
Raw content, in the CPU native endianness.
Definition
midi.h:48
include
zephyr
audio
midi.h
Generated on
for Zephyr Project API by
1.16.1