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