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
11extern "C" {
12#endif
13
14#include <stdint.h>
15
24
37
41struct midi_ump {
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
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
Universal MIDI Packet container.
Definition midi.h:41
uint32_t data[4]
Raw content, in the CPU native endianness.
Definition midi.h:42