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
17extern "C" {
18#endif
19
20#include <stdint.h>
21
30
43
47struct midi_ump {
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
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
Universal MIDI Packet container.
Definition midi.h:47
uint32_t data[4]
Raw content, in the CPU native endianness.
Definition midi.h:48