38 #define BAUD_RATE 31250 41 #define MIDI_UART USARTE0 44 #define MIDI_CHANNEL_MASK 0x0f 47 #define MIDI_MESSAGE_TYPE_MASK 0xf0 50 #define MIDI_MAX_VALUE 127 151 return MIDI_UART.STATUS & USART_DREIF_bm;
Note on message note number read; awaiting velocity.
Definition: midi.h:97
static bool uart_is_ready(void)
Checks if the UART is ready to send data.
Definition: midi.h:150
void set_midi_tx_channel(enum midi_channel channel)
Updates the midi transmit channel.
Definition: midi.c:136
midi_state
States in the MIDI state machine.
Definition: midi.h:89
midi_message_type
MIDI status byte values (first nibble)
Definition: midi.h:80
void send_note_off(midi_value_t note, midi_value_t velocity)
Sends a note off message.
Definition: midi.c:116
MIDI channel 10.
Definition: midi.h:70
void send_program_change(midi_value_t program)
Sends a program change message.
Definition: midi.c:126
static enum midi_channel tx_channel
The MIDI transmit channel.
Definition: midi.c:53
uint8_t midi_value_t
Type for valid MIDI values [0..127].
Definition: midi.h:56
void(* control_change)(midi_value_t controller, midi_value_t value)
Definition: midi.h:107
MIDI channel 2.
Definition: midi.h:62
MIDI channel 8.
Definition: midi.h:68
MIDI transceiver module configuration.
Definition: midi.h:135
MIDI channel 9.
Definition: midi.h:69
GPIO configuration and service functions.
#define MIDI_UART
UART used for MIDI I/O.
Definition: midi.h:41
Control change message status byte read; awaiting controller number.
Definition: midi.h:92
This struct represents the four solder jumpers on the bottom side of the PCB.
Definition: gpio.h:86
bool omni_mode
Setting this flag enables Omni mode.
Definition: midi.h:140
Note on message.
Definition: midi.h:84
static struct midi_event_handlers * event_handlers
The MIDI event handlers.
Definition: midi.c:38
void set_omni_mode(bool enable)
Puts the device into Omni mode.
Definition: midi.c:141
MIDI channel 13.
Definition: midi.h:73
Data structure for program information.
Definition: program.h:64
static enum midi_channel rx_channel
The MIDI receive channel.
Definition: midi.c:49
Program change message status byte read.
Definition: midi.h:98
void init_midi_module(const struct midi_config *config)
Initializes the MIDI transceiver module.
Definition: midi.c:65
MIDI channel 12.
Definition: midi.h:72
No pending MIDI message bytes.
Definition: midi.h:91
void(* note_off)(midi_value_t note, midi_value_t velocity)
Definition: midi.h:114
MIDI channel 11.
Definition: midi.h:71
void(* program_change)(midi_value_t program)
Definition: midi.h:128
MIDI channel 6.
Definition: midi.h:66
Note off message status byte read; awaiting note number.
Definition: midi.h:94
MIDI channel 16.
Definition: midi.h:76
void send_note_on(midi_value_t note, midi_value_t velocity)
Sends a note on message.
Definition: midi.c:121
bool signal_rx
Definition: midi.h:141
void set_midi_rx_channel(enum midi_channel channel)
Updates the midi receive channel.
Definition: midi.c:131
Note off message.
Definition: midi.h:83
Program change message.
Definition: midi.h:85
MIDI channel 7.
Definition: midi.h:67
void send_midi_message(enum midi_channel channel, enum midi_message_type type, midi_value_t data0, midi_value_t data1)
Sends an arbitrary MIDI message.
Definition: midi.c:102
static void uart_write(uint8_t data)
Sends one byte of date over the UART.
Definition: midi.h:157
MIDI channel 1.
Definition: midi.h:61
Note off message note number read; awaiting velocity.
Definition: midi.h:95
Pointers to MIDI message handling callbacks.
Definition: midi.h:105
Control change message controller number read; awaiting value.
Definition: midi.h:93
Control change message.
Definition: midi.h:82
void send_control_change(midi_value_t controller, midi_value_t value)
Sends a control change message.
Definition: midi.c:97
void(* note_on)(midi_value_t note, midi_value_t velocity)
Definition: midi.h:121
MIDI channel 4.
Definition: midi.h:64
midi_channel
MIDI status byte values (second nibble)
Definition: midi.h:59
MIDI channel 15.
Definition: midi.h:75
enum midi_channel read_midi_channel_from_jumpers(const struct jumpers *jumpers)
Reads the MIDI channel configuration from the solder jumpers.
Definition: midi.c:89
MIDI channel 14.
Definition: midi.h:74
MIDI channel 3.
Definition: midi.h:63
Note on message status byte read; awaiting note number.
Definition: midi.h:96
MIDI channel 5.
Definition: midi.h:65