summaryrefslogtreecommitdiff
path: root/floppyMusic/midi.h
blob: 82248b43dbe803691a06dbb0686d2ae7121f4e41 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
/*
 * midi.h
 *
 * Created: 12.06.2017 20:43:37
 *  Author: Jonas
 */ 

  /*
  Octave||                     Note Numbers
	 #  ||
	    || C   | C#  | D   | D#  | E   | F   | F#  | G   | G#  | A   | A#  | B
 -----------------------------------------------------------------------------
	 0  ||   0 |   1 |   2 |   3 |   4 |   5 |   6 |   7 |   8 |   9 |  10 | 11
	 1  ||  12 |  13 |  14 |  15 |  16 |  17 |  18 |  19 |  20 |  21 |  22 | 23
	 2  ||  24 |  25 |  26 |  27 |  28 |  29 |  30 |  31 |  32 |  33 |  34 | 35
	 3  ||  36 |  37 |  38 |  39 |  40 |  41 |  42 |  43 |  44 |  45 |  46 | 47
	 4  ||  48 |  49 |  50 |  51 |  52 |  53 |  54 |  55 |  56 |  57 |  58 | 59
	 5  ||  60 |  61 |  62 |  63 |  64 |  65 |  66 |  67 |  68 |  69 |  70 | 71
	 6  ||  72 |  73 |  74 |  75 |  76 |  77 |  78 |  79 |  80 |  81 |  82 | 83
	 7  ||  84 |  85 |  86 |  87 |  88 |  89 |  90 |  91 |  92 |  93 |  94 | 95
	 8  ||  96 |  97 |  98 |  99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107
	 9  || 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119
	 10 || 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 |
 */

#ifndef F_CPU
#error F_CPU not defined for midi.h
#endif

#ifndef MIDI_H_
#define MIDI_H_

#define _MIDI_LINK_SPEED 30000UL //Standard MIDI linkspeed is 30k baud

#include <avr/interrupt.h>
#include <util/delay.h>
#include <avr/io.h>

#include "floppy.h"

static char midi_recv_buffer[16];
static uint8_t midi_recv_ptr;

static char midi_active_channels;
static uint16_t midi_current_notes[8];
static const uint16_t midi_code_frequency_table[232];

void midi_setup();
/*
* initializes UART communication and Interrupts
*/
void midi_process();
/*
* Run in loop
*/

static void midi_command(char _cmd, char _note, char _vel);

static uint8_t midi_recv_avail();

static char midi_get_recv_buf();

static void midi_update_note(uint16_t _note, uint8_t _status);
/*
* _note : MIDI-standard note #
* _status : 0=OFF >0=ON
*/

static void midi_uart_out(unsigned char _c);

#endif /* MIDI_H_ */