00001
00002
00003
00004
00005
00006
00007 #ifndef MIDI_h
00008 #define MIDI_h
00009
00010
00011 #include <inttypes.h>
00012
00014 #define MIDI_rate 31250
00015
00016 #define NoteOff 0
00017
00018 #define NoteOn 1
00019
00020 #define ATPoly 2
00021
00022 #define CC 3
00023
00024 #define PC 4
00025
00026 #define ATCanal 5
00027
00028 #define PitchBend 6
00029
00030 #define SysEx 7
00031
00032
00033
00034
00035
00036 #define MIDI_FILTER_OFF 0
00037 #define MIDI_FILTER_FULL 1
00038 #define MIDI_FILTER_CANAL 2
00039 #define MIDI_FILTER_ANTICANAL 3
00040
00041 #define MIDI_CHANNEL_OMNI 0
00042 #define MIDI_CHANNEL_OFF 17
00043
00044
00045 #define MIDI_SYSEX_ARRAY_SIZE 256
00046
00047 #define MANUFACTURER_ID_H 0x7D // Non-Commercial
00048
00050 typedef uint8_t byte;
00051
00053 struct midimsg {
00055 byte channel;
00057 byte type;
00059 byte data1;
00061 byte data2;
00063 byte sysex_array[MIDI_SYSEX_ARRAY_SIZE];
00065 bool OK;
00066 };
00067
00068
00069 class MIDI_Class {
00070 public:
00071 MIDI_Class();
00072 ~MIDI_Class();
00073
00074 void begin(byte inChannel = 1);
00075
00076
00077 bool read();
00078 bool read(byte channel);
00079
00080
00081 void send(byte type, byte param1, byte param2, byte canal);
00082
00083 void sendNoteOn(byte NoteNumber,byte Velocity,byte Channel);
00084 void sendNoteOff(byte NoteNumber,byte Velocity,byte Channel);
00085 void sendProgramChange(byte ProgramNumber,byte Channel);
00086 void sendControlChange(byte ControlNumber, byte ControlValue,byte Channel);
00087 void sendPitchBend(int PitchValue,byte Channel);
00088 void sendPolyPressure(byte NoteNumber,byte Pressure,byte Channel);
00089 void sendAfterTouch(byte Pressure,byte Channel);
00090 void sendSysEx(byte length, byte * array);
00091
00092
00093 void turnThruOn();
00094 void turnThruOff();
00095 void turnThru(bool state);
00096
00097
00098 byte getType();
00099 byte getChannel();
00100 byte getData1();
00101 byte getData2();
00102 byte * getSysExArray();
00103 bool check();
00104 byte getInputChannel() { return mInputChannel; }
00105 byte getFilterMode() { return mFilterMode; }
00106 bool getThruState() { return mThruActivated; }
00107
00108
00109 void setDeviceID(byte sysID);
00110 void delMsg();
00111 void delSysEx();
00112 void setInputChannel(byte channel);
00113 void setFilter(byte filter);
00114
00115
00116 private:
00117 byte genctrl(byte canal, byte type);
00118 void filter(byte channel);
00119 void setType(byte type);
00120 void setChannel(byte channel);
00121 void setData1(byte data);
00122 void setData2(byte data);
00123 void setStatus(bool status);
00124 bool parse(byte channel);
00125
00126
00127 byte mInputChannel;
00128 byte mFilterMode;
00129 byte sysex_ID;
00130 byte mRunningStatus_TX;
00131 byte mRunningStatus_RX;
00132 midimsg mMessage;
00133 bool mThruActivated;
00134 };
00135
00136
00137 extern MIDI_Class MIDI;
00138
00139 #endif // MIDI_h