Zephyr API Documentation
4.2.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
7
#ifndef ZEPHYR_INCLUDE_AUDIO_MIDI_H_
8
#define ZEPHYR_INCLUDE_AUDIO_MIDI_H_
9
10
#ifdef __cplusplus
11
extern
"C"
{
12
#endif
13
14
#include <
stdint.h
>
15
24
37
41
struct
midi_ump
{
42
uint32_t
data
[4];
43
};
44
51
53
#define UMP_MT_UTILITY 0x00
55
#define UMP_MT_SYS_RT_COMMON 0x01
57
#define UMP_MT_MIDI1_CHANNEL_VOICE 0x02
59
#define UMP_MT_DATA_64 0x03
61
#define UMP_MT_MIDI2_CHANNEL_VOICE 0x04
63
#define UMP_MT_DATA_128 0x05
65
#define UMP_MT_FLEX_DATA 0x0d
70
#define UMP_MT_UMP_STREAM 0x0f
72
78
#define UMP_MT(ump) \
79
((ump).data[0] >> 28)
80
85
#define UMP_NUM_WORDS_LOOKUP_TABLE \
86
((0U << 0) | (0U << 2) | (0U << 4) | (1U << 6) | \
87
(1U << 8) | (3U << 10) | (0U << 12) | (0U << 14) | \
88
(1U << 16) | (1U << 18) | (1U << 20) | (2U << 22) | \
89
(2U << 24) | (3U << 26) | (3U << 28) | (3U << 30))
90
96
#define UMP_NUM_WORDS(ump) \
97
(1 + ((UMP_NUM_WORDS_LOOKUP_TABLE >> (2 * UMP_MT(ump))) & 3))
98
103
#define UMP_GROUP(ump) \
104
(((ump).data[0] >> 24) & 0xF)
105
111
#define UMP_MIDI_STATUS(ump) \
112
(((ump).data[0] >> 16) & 0xFF)
113
118
#define UMP_MIDI_COMMAND(ump) \
119
(UMP_MIDI_STATUS(ump) >> 4)
120
124
#define UMP_MIDI_CHANNEL(ump) \
125
(UMP_MIDI_STATUS(ump) & 0xF)
126
130
#define UMP_MIDI1_P1(ump) \
131
(((ump).data[0] >> 8) & 0x7F)
132
136
#define UMP_MIDI1_P2(ump) \
137
((ump).data[0] & 0x7F)
138
148
#define UMP_MIDI1_CHANNEL_VOICE(group, command, channel, p1, p2) \
149
(struct midi_ump) {.data = { \
150
(UMP_MT_MIDI1_CHANNEL_VOICE << 28) \
151
| (((group) & 0x0f) << 24) \
152
| (((command) & 0x0f) << 20) \
153
| (((channel) & 0x0f) << 16) \
154
| (((p1) & 0x7f) << 8) \
155
| ((p2) & 0x7f) \
156
}}
157
166
#define UMP_MIDI_NOTE_OFF 0x8
167
#define UMP_MIDI_NOTE_ON 0x9
168
#define UMP_MIDI_AFTERTOUCH 0xa
169
#define UMP_MIDI_CONTROL_CHANGE 0xb
170
#define UMP_MIDI_PROGRAM_CHANGE 0xc
171
#define UMP_MIDI_CHAN_AFTERTOUCH 0xd
172
#define UMP_MIDI_PITCH_BEND 0xe
174
184
#define UMP_SYS_RT_COMMON(group, status, p1, p2) \
185
(struct midi_ump) {.data = { \
186
(UMP_MT_SYS_RT_COMMON << 28) \
187
| (((group) & 0x0f) << 24) \
188
| ((status) << 16) \
189
| (((p1) & 0x7f) << 8) \
190
| ((p2) & 0x7f) \
191
}}
192
202
#define UMP_SYS_MIDI_TIME_CODE 0xf1
203
#define UMP_SYS_SONG_POSITION 0xf2
204
#define UMP_SYS_SONG_SELECT 0xf3
205
#define UMP_SYS_TUNE_REQUEST 0xf6
206
#define UMP_SYS_TIMING_CLOCK 0xf8
207
#define UMP_SYS_START 0xfa
208
#define UMP_SYS_CONTINUE 0xfb
209
#define UMP_SYS_STOP 0xfc
210
#define UMP_SYS_ACTIVE_SENSING 0xfe
211
#define UMP_SYS_RESET 0xff
213
214
222
228
#define UMP_STREAM_FORMAT(ump) \
229
(((ump).data[0] >> 26) & 0x03)
230
239
241
#define UMP_STREAM_FORMAT_COMPLETE 0x00
243
#define UMP_STREAM_FORMAT_START 0x01
247
#define UMP_STREAM_FORMAT_CONTINUE 0x02
249
#define UMP_STREAM_FORMAT_END 0x03
250
252
258
#define UMP_STREAM_STATUS(ump) \
259
(((ump).data[0] >> 16) & 0x3FF)
260
269
271
#define UMP_STREAM_STATUS_EP_DISCOVERY 0x00
273
#define UMP_STREAM_STATUS_EP_INFO 0x01
275
#define UMP_STREAM_STATUS_DEVICE_IDENT 0x02
277
#define UMP_STREAM_STATUS_EP_NAME 0x03
279
#define UMP_STREAM_STATUS_PROD_ID 0x04
281
#define UMP_STREAM_STATUS_CONF_REQ 0x05
283
#define UMP_STREAM_STATUS_CONF_NOTIF 0x06
285
#define UMP_STREAM_STATUS_FB_DISCOVERY 0x10
287
#define UMP_STREAM_STATUS_FB_INFO 0x11
289
#define UMP_STREAM_STATUS_FB_NAME 0x12
291
298
#define UMP_STREAM_EP_DISCOVERY_FILTER(ump) \
299
((ump).data[1] & 0xFF)
300
310
312
#define UMP_EP_DISC_FILTER_EP_INFO BIT(0)
314
#define UMP_EP_DISC_FILTER_DEVICE_ID BIT(1)
316
#define UMP_EP_DISC_FILTER_EP_NAME BIT(2)
318
#define UMP_EP_DISC_FILTER_PRODUCT_ID BIT(3)
320
#define UMP_EP_DISC_FILTER_STREAM_CFG BIT(4)
322
329
#define UMP_STREAM_FB_DISCOVERY_FILTER(ump) \
330
((ump).data[0] & 0xFF)
331
337
#define UMP_STREAM_FB_DISCOVERY_NUM(ump) \
338
(((ump).data[0] >> 8) & 0xFF)
339
350
#define UMP_FB_DISC_FILTER_INFO BIT(0)
352
#define UMP_FB_DISC_FILTER_NAME BIT(1)
354
356
358
359
#ifdef __cplusplus
360
}
361
#endif
362
363
#endif
stdint.h
uint32_t
__UINT32_TYPE__ uint32_t
Definition
stdint.h:90
midi_ump
Universal MIDI Packet container.
Definition
midi.h:41
midi_ump::data
uint32_t data[4]
Raw content, in the CPU native endianness.
Definition
midi.h:42
zephyr
audio
midi.h
Generated on
for Zephyr API Documentation by
1.14.0