00001
00002
00003
00004
00005
00006
00007
00008 #include "uart.h"
00009 #include "midi.h"
00010 #include "debug.h"
00011
00012
00013 void midiInit() {
00014 uartInit();
00015 uartSetBaudRate(MIDI_BAUD_RATE);
00016 }
00017
00018
00019
00020 u08 midiNoteOnOut(u08 note, u08 vel, u08 channel) {
00021 uartSendByte(MIDI_NOTE_ON | (channel & MIDI_CHANNEL_MASK));
00022 uartSendByte(MIDI_DATA_MASK & note);
00023 uartSendByte(MIDI_DATA_MASK & vel);
00024
00025 return 0;
00026 }
00027
00028
00029
00030 u08 midiNoteOffOut(u08 note, u08 vel, u08 channel) {
00031 uartSendByte(MIDI_NOTE_OFF | (channel & MIDI_CHANNEL_MASK));
00032 uartSendByte(MIDI_DATA_MASK & note);
00033 uartSendByte(MIDI_DATA_MASK & vel);
00034
00035 return 0;
00036 }
00037
00038
00039
00040 u08 midiControlChangeOut(u08 controller, u08 value, u08 channel) {
00041 uartSendByte(MIDI_CONTROL_CHANGE | (channel & MIDI_CHANNEL_MASK));
00042 uartSendByte(MIDI_DATA_MASK & controller);
00043 uartSendByte(MIDI_DATA_MASK & value);
00044
00045 return 0;
00046 }
00047
00048
00049
00050 u08 midiProgramChangeOut(u08 program, u08 channel) {
00051 uartSendByte(MIDI_PROGRAM_CHANGE | (channel & MIDI_CHANNEL_MASK));
00052 uartSendByte(MIDI_DATA_MASK & program);
00053
00054 return 0;
00055 }
00056
00057
00058
00059 u08 midiPolyTouchOut(u08 note, u08 pressure, u08 channel) {
00060 uartSendByte(MIDI_POLY_TOUCH | (channel & MIDI_CHANNEL_MASK));
00061 uartSendByte(MIDI_DATA_MASK & note);
00062 uartSendByte(MIDI_DATA_MASK & pressure);
00063
00064 return 0;
00065 }
00066
00067
00068
00069 u08 midiChannelTouchOut(u08 pressure, u08 channel) {
00070 uartSendByte(MIDI_CHANNEL_TOUCH | (channel & MIDI_CHANNEL_MASK));
00071 uartSendByte(MIDI_DATA_MASK & pressure);
00072
00073 return 0;
00074 }
00075
00076
00077
00078
00079 u08 midiPitchBendOut(u08 bendLSB, u08 bendMSB, u08 channel) {
00080 uartSendByte(MIDI_PITCH_BEND | (channel & MIDI_CHANNEL_MASK));
00081 uartSendByte(MIDI_DATA_MASK & bendLSB);
00082 uartSendByte(MIDI_DATA_MASK & bendMSB);
00083 return 0;
00084 }