Zephyr Project API
4.0.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
30
struct
midi_ump
{
31
uint32_t
data
[4];
32
};
33
42
#define UMP_MT_UTILITY 0x00
44
#define UMP_MT_SYS_RT_COMMON 0x01
46
#define UMP_MT_MIDI1_CHANNEL_VOICE 0x02
48
#define UMP_MT_DATA_64 0x03
50
#define UMP_MT_MIDI2_CHANNEL_VOICE 0x04
52
#define UMP_MT_DATA_128 0x05
54
#define UMP_MT_FLEX_DATA 0x0d
56
#define UMP_MT_UMP_STREAM 0x0f
63
#define UMP_MT(ump) \
64
((ump).data[0] >> 28)
65
70
#define UMP_NUM_WORDS_LOOKUP_TABLE \
71
((0U << 0) | (0U << 2) | (0U << 4) | (1U << 6) | \
72
(1U << 8) | (3U << 10) | (0U << 12) | (0U << 14) | \
73
(1U << 16) | (1U << 18) | (1U << 20) | (2U << 22) | \
74
(2U << 24) | (3U << 26) | (3U << 28) | (3U << 30))
75
81
#define UMP_NUM_WORDS(ump) \
82
(1 + ((UMP_NUM_WORDS_LOOKUP_TABLE >> (2 * UMP_MT(ump))) & 3))
83
88
#define UMP_GROUP(ump) \
89
(((ump).data[0] >> 24) & 0x0f)
90
95
#define UMP_MIDI_STATUS(ump) \
96
(((ump).data[0] >> 16) & 0xff)
102
#define UMP_MIDI_COMMAND(ump) \
103
(UMP_MIDI_STATUS(ump) >> 4)
108
#define UMP_MIDI_CHANNEL(ump) \
109
(UMP_MIDI_STATUS(ump) & 0x0f)
114
#define UMP_MIDI1_P1(ump) \
115
(((ump).data[0] >> 8) & 0x7f)
120
#define UMP_MIDI1_P2(ump) \
121
((ump).data[0] & 0x7f)
122
132
#define UMP_MIDI1_CHANNEL_VOICE(group, command, channel, p1, p2) \
133
(struct midi_ump) {.data = { \
134
(UMP_MT_MIDI1_CHANNEL_VOICE << 28) \
135
| (((group) & 0x0f) << 24) \
136
| (((command) & 0x0f) << 20) \
137
| (((channel) & 0x0f) << 16) \
138
| (((p1) & 0x7f) << 8) \
139
| ((p2) & 0x7f) \
140
}}
141
151
#define UMP_MIDI_NOTE_OFF 0x8
152
#define UMP_MIDI_NOTE_ON 0x9
153
#define UMP_MIDI_AFTERTOUCH 0xa
154
#define UMP_MIDI_CONTROL_CHANGE 0xb
155
#define UMP_MIDI_PROGRAM_CHANGE 0xc
156
#define UMP_MIDI_CHAN_AFTERTOUCH 0xd
157
#define UMP_MIDI_PITCH_BEND 0xe
169
#define UMP_SYS_RT_COMMON(group, status, p1, p2) \
170
(struct midi_ump) {.data = { \
171
(UMP_MT_SYS_RT_COMMON << 28) \
172
| (((group) & 0x0f) << 24) \
173
| ((status) << 16) \
174
| (((p1) & 0x7f) << 8) \
175
| ((p2) & 0x7f) \
176
}}
177
186
#define UMP_SYS_MIDI_TIME_CODE 0xf1
187
#define UMP_SYS_SONG_POSITION 0xf2
188
#define UMP_SYS_SONG_SELECT 0xf3
189
#define UMP_SYS_TUNE_REQUEST 0xf6
190
#define UMP_SYS_TIMING_CLOCK 0xf8
191
#define UMP_SYS_START 0xfa
192
#define UMP_SYS_CONTINUE 0xfb
193
#define UMP_SYS_STOP 0xfc
194
#define UMP_SYS_ACTIVE_SENSING 0xfe
195
#define UMP_SYS_RESET 0xff
200
#ifdef __cplusplus
201
}
202
#endif
203
204
#endif
stdint.h
uint32_t
__UINT32_TYPE__ uint32_t
Definition
stdint.h:90
midi_ump
Universal MIDI Packet container.
Definition
midi.h:30
midi_ump::data
uint32_t data[4]
Raw content, in the CPU native endianness.
Definition
midi.h:31
include
zephyr
audio
midi.h
Generated on Tue Feb 11 2025 02:55:24 for Zephyr Project API by
1.9.8